From c25fadd60d55190ae24b16d46085e855c51930b0 Mon Sep 17 00:00:00 2001 From: Patrick Farrell Date: Wed, 29 May 2019 11:02:19 -0400 Subject: [PATCH] LU-12343 osc: Fix dom handling in weight_ast The DOM bit can be cancelled at any time during calls to weigh_ast, so: 1. We cannot assert that it is present 2. We cannot use it to identify the !LDLM_EXTENT case when calling osc_lock_weight Lustre-change: https://review.whamcloud.com/34966 Lustre-commit: 4f3ce87a06e6ed90373218d3aa1eb34a7675db65 Signed-off-by: Patrick Farrell Change-Id: Ic3e7370580e35d8ae06b8330971959e0d55a4e81 Reviewed-by: Mike Pershin Reviewed-by: Andreas Dilger Reviewed-by: James Simmons Reviewed-by: Oleg Drokin Reviewed-on: https://review.whamcloud.com/35858 Tested-by: jenkins Tested-by: Maloo --- lustre/osc/osc_lock.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lustre/osc/osc_lock.c b/lustre/osc/osc_lock.c index d500bfc..23fa3fa 100644 --- a/lustre/osc/osc_lock.c +++ b/lustre/osc/osc_lock.c @@ -679,7 +679,8 @@ unsigned long osc_ldlm_weigh_ast(struct ldlm_lock *dlmlock) RETURN(1); LASSERT(dlmlock->l_resource->lr_type == LDLM_EXTENT || - ldlm_has_dom(dlmlock)); + dlmlock->l_resource->lr_type == LDLM_IBITS); + lock_res_and_lock(dlmlock); obj = dlmlock->l_ast_data; if (obj) @@ -703,12 +704,17 @@ unsigned long osc_ldlm_weigh_ast(struct ldlm_lock *dlmlock) GOTO(out, weight = 1); } - if (ldlm_has_dom(dlmlock)) - weight = osc_lock_weight(env, obj, 0, OBD_OBJECT_EOF); - else + if (dlmlock->l_resource->lr_type == LDLM_EXTENT) weight = osc_lock_weight(env, obj, dlmlock->l_policy_data.l_extent.start, dlmlock->l_policy_data.l_extent.end); + else if (ldlm_has_dom(dlmlock)) + weight = osc_lock_weight(env, obj, 0, OBD_OBJECT_EOF); + /* The DOM bit can be cancelled at any time; in that case, we know + * there are no pages, so just return weight of 0 + */ + else + weight = 0; EXIT; -- 1.8.3.1