Whamcloud - gitweb
LU-3157 llite: A not locked mutex can be unlocked.
[fs/lustre-release.git] / lustre / llite / file.c
index a216652..85c3944 100644 (file)
@@ -55,7 +55,11 @@ struct ll_file_data *ll_file_data_get(void)
        struct ll_file_data *fd;
 
        OBD_SLAB_ALLOC_PTR_GFP(fd, ll_file_data_slab, CFS_ALLOC_IO);
+       if (fd == NULL)
+               return NULL;
+
        fd->fd_write_failed = false;
+
        return fd;
 }
 
@@ -522,12 +526,12 @@ int ll_file_open(struct inode *inode, struct file *file)
         it = file->private_data; /* XXX: compat macro */
         file->private_data = NULL; /* prevent ll_local_open assertion */
 
-        fd = ll_file_data_get();
-        if (fd == NULL)
-                GOTO(out_och_free, rc = -ENOMEM);
+       fd = ll_file_data_get();
+       if (fd == NULL)
+               GOTO(out_openerr, rc = -ENOMEM);
 
-        fd->fd_file = file;
-        if (S_ISDIR(inode->i_mode)) {
+       fd->fd_file = file;
+       if (S_ISDIR(inode->i_mode)) {
                spin_lock(&lli->lli_sa_lock);
                if (lli->lli_opendir_key == NULL && lli->lli_sai == NULL &&
                    lli->lli_opendir_pid == 0) {
@@ -536,7 +540,7 @@ int ll_file_open(struct inode *inode, struct file *file)
                        opendir_set = 1;
                }
                spin_unlock(&lli->lli_sa_lock);
-        }
+       }
 
         if (inode->i_sb->s_root == file->f_dentry) {
                 LUSTRE_FPRIVATE(file) = fd;
@@ -2663,11 +2667,11 @@ int ll_have_md_lock(struct inode *inode, __u64 *bits,  ldlm_mode_t l_req_mode)
         CDEBUG(D_INFO, "trying to match res "DFID" mode %s\n", PFID(fid),
                ldlm_lockname[mode]);
 
-        flags = LDLM_FL_BLOCK_GRANTED | LDLM_FL_CBPENDING | LDLM_FL_TEST_LOCK;
-        for (i = 0; i < MDS_INODELOCK_MAXSHIFT && *bits != 0; i++) {
-                policy.l_inodebits.bits = *bits & (1 << i);
-                if (policy.l_inodebits.bits == 0)
-                        continue;
+       flags = LDLM_FL_BLOCK_GRANTED | LDLM_FL_CBPENDING | LDLM_FL_TEST_LOCK;
+       for (i = 0; i <= MDS_INODELOCK_MAXSHIFT && *bits != 0; i++) {
+               policy.l_inodebits.bits = *bits & (1 << i);
+               if (policy.l_inodebits.bits == 0)
+                       continue;
 
                 if (md_lock_match(ll_i2mdexp(inode), flags, fid, LDLM_IBITS,
                                   &policy, mode, &lockh)) {