Whamcloud - gitweb
LU-2744 build: fix 'data race condition' issues 71/6571/4
authorSebastien Buisson <sebastien.buisson@bull.net>
Thu, 6 Jun 2013 12:38:03 +0000 (14:38 +0200)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 10 Jul 2013 03:25:36 +0000 (03:25 +0000)
Fix 'data race condition' defects found by Coverity version
6.5.0:
Data race condition (MISSING_LOCK)
Accessing variable without holding lock. Elsewhere,
this variable is accessed with lock held.

Signed-off-by: Sebastien Buisson <sebastien.buisson@bull.net>
Change-Id: Ie23e735c630b45006e02f6dd04e682dabffb844f
Reviewed-on: http://review.whamcloud.com/6571
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Fan Yong <fan.yong@intel.com>
Reviewed-by: Keith Mannthey <keith.mannthey@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/llite/llite_lib.c
lustre/llite/namei.c

index 9a85d4d..1a98966 100644 (file)
@@ -1213,7 +1213,9 @@ void ll_clear_inode(struct inode *inode)
                 LASSERT(lli->lli_opendir_pid == 0);
         }
 
+       spin_lock(&lli->lli_lock);
         ll_i2info(inode)->lli_flags &= ~LLIF_MDS_SIZE_LOCK;
+       spin_unlock(&lli->lli_lock);
        md_null_inode(sbi->ll_md_exp, ll_inode2fid(inode));
 
         LASSERT(!lli->lli_open_fd_write_count);
@@ -1823,7 +1825,9 @@ void ll_update_inode(struct inode *inode, struct lustre_md *md)
                                         /* Use old size assignment to avoid
                                          * deadlock bz14138 & bz14326 */
                                         i_size_write(inode, body->size);
+                                       spin_lock(&lli->lli_lock);
                                         lli->lli_flags |= LLIF_MDS_SIZE_LOCK;
+                                       spin_unlock(&lli->lli_lock);
                                 }
                                 ldlm_lock_decref(&lockh, mode);
                         }
index 7383c7c..64855b1 100644 (file)
@@ -275,8 +275,11 @@ int ll_md_blocking_ast(struct ldlm_lock *lock, struct ldlm_lock_desc *desc,
                                CDEBUG(D_INODE, "invaliding layout %d.\n", rc);
                }
 
-                if (bits & MDS_INODELOCK_UPDATE)
+               if (bits & MDS_INODELOCK_UPDATE) {
+                       spin_lock(&lli->lli_lock);
                         lli->lli_flags &= ~LLIF_MDS_SIZE_LOCK;
+                       spin_unlock(&lli->lli_lock);
+               }
 
                 if (S_ISDIR(inode->i_mode) &&
                      (bits & MDS_INODELOCK_UPDATE)) {