Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bc969176 authored by JC Lafoucriere's avatar JC Lafoucriere Committed by Greg Kroah-Hartman
Browse files

staging/lustre/ldlm: suppress useless lock RPC for layout

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.

Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3280
Lustre-change: http://review.whamcloud.com/6268


Signed-off-by: default avatarJC Lafoucriere <jacques-charles.lafoucriere@cea.fr>
Reviewed-by: default avatarFan Yong <fan.yong@intel.com>
Reviewed-by: default avatarAndreas Dilger <andreas.dilger@intel.com>
Reviewed-by: default avatarOleg Drokin <oleg.drokin@intel.com>
Signed-off-by: default avatarPeng Tao <tao.peng@emc.com>
Signed-off-by: default avatarAndreas Dilger <andreas.dilger@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent c52f69c5
Loading
Loading
Loading
Loading
+0 −14
Original line number Original line Diff line number Diff line
@@ -861,20 +861,6 @@ void ldlm_lock_decref_internal(struct ldlm_lock *lock, __u32 mode)


	ldlm_lock_decref_internal_nolock(lock, 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 &&
	if (lock->l_flags & LDLM_FL_LOCAL &&
	    !lock->l_readers && !lock->l_writers) {
	    !lock->l_readers && !lock->l_writers) {
		/* If this is a local lock on a server namespace and this was
		/* If this is a local lock on a server namespace and this was
+3 −2
Original line number Original line Diff line number Diff line
@@ -3009,6 +3009,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",
	LDLM_DEBUG(lock, "File %p/"DFID" being reconfigured: %d.\n",
		inode, PFID(&lli->lli_fid), reconf);
		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);
	lock_res_and_lock(lock);
	lvb_ready = !!(lock->l_flags & LDLM_FL_LVB_READY);
	lvb_ready = !!(lock->l_flags & LDLM_FL_LVB_READY);
	unlock_res_and_lock(lock);
	unlock_res_and_lock(lock);
@@ -3177,8 +3180,6 @@ int ll_layout_refresh(struct inode *inode, __u32 *gen)


	ll_finish_md_op_data(op_data);
	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;
	mode = it.d.lustre.it_lock_mode;
	it.d.lustre.it_lock_mode = 0;
	it.d.lustre.it_lock_mode = 0;
	ll_intent_drop_lock(&it);
	ll_intent_drop_lock(&it);