[lustre-devel] [PATCH 192/622] lustre: ldlm: Adjust search_* functions
James Simmons
jsimmons at infradead.org
Thu Feb 27 13:11:00 PST 2020
From: Patrick Farrell <pfarrell at whamcloud.com>
The search_itree and search_queue functions should both
return either a pointer to a found lock or NULL.
Currently, search_itree just returns the contents of
data->lmd_lock, whether or not a lock was found.
search_queue will do the same under certain cirumstances.
Zero lmd_lock in both search_* functions, and also stop
searching in search_itree once a lock is found.
cray-bug-id: LUS-6783
WC-bug-id: https://jira.whamcloud.com/browse/LU-11719
Lustre-commit: a231148843bd ("LU-11719 ldlm: Adjust search_* functions")
Signed-off-by: Patrick Farrell <pfarrell at whamcloud.com>
Reviewed-on: https://review.whamcloud.com/33754
Reviewed-by: Andreas Dilger <adilger at whamcloud.com>
Reviewed-by: James Simmons <uja.ornl at yahoo.com>
Reviewed-by: Oleg Drokin <green at whamcloud.com>
Signed-off-by: James Simmons <jsimmons at infradead.org>
---
fs/lustre/ldlm/ldlm_lock.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/fs/lustre/ldlm/ldlm_lock.c b/fs/lustre/ldlm/ldlm_lock.c
index b9771ef..06690a6 100644
--- a/fs/lustre/ldlm/ldlm_lock.c
+++ b/fs/lustre/ldlm/ldlm_lock.c
@@ -1159,6 +1159,8 @@ static struct ldlm_lock *search_itree(struct ldlm_resource *res,
{
int idx;
+ data->lmd_lock = NULL;
+
for (idx = 0; idx < LCK_MODE_NUM; idx++) {
struct ldlm_interval_tree *tree = &res->lr_itree[idx];
@@ -1172,11 +1174,14 @@ static struct ldlm_lock *search_itree(struct ldlm_resource *res,
data->lmd_policy->l_extent.start,
data->lmd_policy->l_extent.end,
lock_matches, data);
+ if (data->lmd_lock)
+ return data->lmd_lock;
}
- return data->lmd_lock;
+
+ return NULL;
}
-/**
+/*
* Search for a lock with given properties in a queue.
*
* @queue search for a lock in this queue
@@ -1189,9 +1194,12 @@ static struct ldlm_lock *search_queue(struct list_head *queue,
{
struct ldlm_lock *lock;
+ data->lmd_lock = NULL;
+
list_for_each_entry(lock, queue, l_res_link)
if (lock_matches(lock, data))
return data->lmd_lock;
+
return NULL;
}
--
1.8.3.1
More information about the lustre-devel
mailing list