Whamcloud - gitweb
LU-3280 ldlm: suppress useless lock RPC for layout
authorjcl <jacques-charles.lafoucriere@cea.fr>
Mon, 6 May 2013 11:12:55 +0000 (13:12 +0200)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 8 May 2013 18:11:25 +0000 (14:11 -0400)
In ldlm_lock_decref_internal() when l_lvb_data is freed to
reduce memory consumption, LDLM_FL_LVB_READY is not
cleared, so later when the lock is reused lvb is not
updated. But clearing LDLM_FL_LVB_READY forces layout refetch
at each file access, so the better is to remove the optimization.
The use case is after a restore in HSM.

Signed-off-by: JC Lafoucriere <jacques-charles.lafoucriere@cea.fr>
Change-Id: I3aa56cf39fe34941d227400410b27db32479b1b1
Reviewed-on: http://review.whamcloud.com/6268
Tested-by: Hudson
Reviewed-by: Fan Yong <fan.yong@intel.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/ldlm/ldlm_lock.c
lustre/llite/file.c

index fa9423f..97a8c14 100644 (file)
@@ -881,20 +881,6 @@ void ldlm_lock_decref_internal(struct ldlm_lock *lock, __u32 mode)
 
         ldlm_lock_decref_internal_nolock(lock, mode);
 
-       /* release lvb data for layout lock */
-       if (ns_is_client(ns) && !lock->l_readers && !lock->l_writers &&
-           ldlm_has_layout(lock) && lock->l_flags & LDLM_FL_LVB_READY) {
-               /* this is the last user of a layout lock and stripe has
-                * been set up, lvb is no longer used.
-                * This may be a large amount of memory, so we should free it
-                * when possible. */
-               if (lock->l_lvb_data != NULL) {
-                       OBD_FREE_LARGE(lock->l_lvb_data, lock->l_lvb_len);
-                       lock->l_lvb_data = NULL;
-                       lock->l_lvb_len = 0;
-               }
-       }
-
         if (lock->l_flags & LDLM_FL_LOCAL &&
             !lock->l_readers && !lock->l_writers) {
                 /* If this is a local lock on a server namespace and this was
index cc55607..cfb48ca 100644 (file)
@@ -3328,6 +3328,9 @@ static int ll_layout_lock_set(struct lustre_handle *lockh, ldlm_mode_t mode,
        LDLM_DEBUG(lock, "File %p/"DFID" being reconfigured: %d.\n",
                inode, PFID(&lli->lli_fid), reconf);
 
+       /* in case this is a caching lock and reinstate with new inode */
+       md_set_lock_data(sbi->ll_md_exp, &lockh->cookie, inode, NULL);
+
        lock_res_and_lock(lock);
        lvb_ready = !!(lock->l_flags & LDLM_FL_LVB_READY);
        unlock_res_and_lock(lock);
@@ -3496,8 +3499,6 @@ again:
 
        ll_finish_md_op_data(op_data);
 
-       md_set_lock_data(sbi->ll_md_exp, &it.d.lustre.it_lock_handle, inode, NULL);
-
        mode = it.d.lustre.it_lock_mode;
        it.d.lustre.it_lock_mode = 0;
        ll_intent_drop_lock(&it);