Whamcloud - gitweb
LU-5287 export: hold exp_lock when modify exp_flags 71/11871/1
authorNiu Yawei <yawei.niu@intel.com>
Thu, 11 Sep 2014 10:57:52 +0000 (06:57 -0400)
committerNiu Yawei <yawei.niu@intel.com>
Thu, 11 Sep 2014 10:57:52 +0000 (06:57 -0400)
There are few places that changing the exp_flags without holding
exp_lock, that could overwrite other concurrent exp_flags updating.

Signed-off-by: Niu Yawei <yawei.niu@intel.com>
Change-Id: I9c0421ffeacd6bf6feaa31dca9f9fc0e7963bc8b

lustre/ldlm/ldlm_lib.c
lustre/mdt/mdt_handler.c

index de54f75..5072321 100644 (file)
@@ -1080,8 +1080,10 @@ dont_check_exports:
         * OBD_CONNECT_MNE_SWAB flag around forever, just so long as we need
         * interop with unpatched 2.2 clients.  For newer clients, servers
         * will never do MNE swabbing, let the client handle that.  LU-1644 */
+       spin_lock(&export->exp_lock);
        export->exp_need_mne_swab = !ptlrpc_req_need_swab(req) &&
                        !(data->ocd_connect_flags & OBD_CONNECT_MNE_SWAB);
+       spin_unlock(&export->exp_lock);
 #else
 #warning "LU-1644: Remove old OBD_CONNECT_MNE_SWAB fixup and exp_need_mne_swab"
 #endif
index 2e4e8c0..9a5d2a1 100644 (file)
@@ -5041,7 +5041,9 @@ static int mdt_obd_connect(const struct lu_env *env,
                         mdt_export_stats_init(obd, lexp, localdata);
 
                /* For phase I, sync for cross-ref operation. */
+               spin_lock(&lexp->exp_lock);
                lexp->exp_keep_sync = 1;
+               spin_unlock(&lexp->exp_lock);
         }
 
         if (rc != 0) {