summaryrefslogtreecommitdiffstats
path: root/drivers/staging/lustre/lustre/ldlm/ldlm_internal.h
diff options
context:
space:
mode:
authorVitaly Fertman <vitaly.fertman@seagate.com>2016-03-30 19:49:06 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-03-30 21:38:13 -0700
commit6cead36d284f230d29c2500c774180b8c716d4e6 (patch)
tree5d12748853353ab42338b2cf864a134081e62359 /drivers/staging/lustre/lustre/ldlm/ldlm_internal.h
parente9570b490ba209220b43530ca250060035d6bcba (diff)
downloadop-kernel-dev-6cead36d284f230d29c2500c774180b8c716d4e6.zip
op-kernel-dev-6cead36d284f230d29c2500c774180b8c716d4e6.tar.gz
staging/lustre/ldlm: Solve a race for LRU lock cancel
This patch solves a race condition that the lock may be used again after LRU cancellation policy check. In that case, the lock may have locked or dirty pages that makes the policy check totally useless. The problem is solved by checking l_last_used at cancellation time therefore it can make sure that the lock has not been used. Signed-off-by: Jinshan Xiong <jinshan.xiong@intel.com> Signed-off-by: Vitaly Fertman <vitaly_fertman@xyratex.com> Reviewed-on: http://review.whamcloud.com/12603 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5781 Reviewed-by: James Simmons <uja.ornl@yahoo.com> Signed-off-by: Oleg Drokin <green@linuxhacker.ru> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/lustre/lustre/ldlm/ldlm_internal.h')
-rw-r--r--drivers/staging/lustre/lustre/ldlm/ldlm_internal.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_internal.h b/drivers/staging/lustre/lustre/ldlm/ldlm_internal.h
index e31d84a..351f8b4 100644
--- a/drivers/staging/lustre/lustre/ldlm/ldlm_internal.h
+++ b/drivers/staging/lustre/lustre/ldlm/ldlm_internal.h
@@ -146,7 +146,8 @@ void ldlm_lock_decref_internal(struct ldlm_lock *, __u32 mode);
void ldlm_lock_decref_internal_nolock(struct ldlm_lock *, __u32 mode);
int ldlm_run_ast_work(struct ldlm_namespace *ns, struct list_head *rpc_list,
enum ldlm_desc_ast_t ast_type);
-int ldlm_lock_remove_from_lru(struct ldlm_lock *lock);
+int ldlm_lock_remove_from_lru_check(struct ldlm_lock *lock, time_t last_use);
+#define ldlm_lock_remove_from_lru(lock) ldlm_lock_remove_from_lru_check(lock, 0)
int ldlm_lock_remove_from_lru_nolock(struct ldlm_lock *lock);
void ldlm_lock_destroy_nolock(struct ldlm_lock *lock);
OpenPOWER on IntegriCloud