X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fosc%2Fosc_lock.c;h=62da056e2876e9b6f2e403d42f4761670ee58c76;hp=33703863ee710d908e9eee1195dff62bf079ba5b;hb=72617588ac8cb2e3e5a7b8e5ebc201cab524d938;hpb=5315db3f1066619d6effe4f778d2df3ad1ba738f diff --git a/lustre/osc/osc_lock.c b/lustre/osc/osc_lock.c index 3370386..62da056 100644 --- a/lustre/osc/osc_lock.c +++ b/lustre/osc/osc_lock.c @@ -582,8 +582,7 @@ int osc_ldlm_glimpse_ast(struct ldlm_lock *dlmlock, void *data) matchdata.lmd_mode = &mode; matchdata.lmd_policy = &policy; matchdata.lmd_flags = LDLM_FL_TEST_LOCK | LDLM_FL_CBPENDING; - matchdata.lmd_unref = 1; - matchdata.lmd_has_ast_data = true; + matchdata.lmd_match = LDLM_MATCH_UNREF | LDLM_MATCH_AST_ANY; LDLM_LOCK_GET(dlmlock); @@ -727,7 +726,7 @@ unsigned long osc_ldlm_weigh_ast(struct ldlm_lock *dlmlock) unlock_res_and_lock(dlmlock); if (obj == NULL) - GOTO(out, weight = 1); + GOTO(out, weight = 0); spin_lock(&obj->oo_ol_spin); list_for_each_entry(oscl, &obj->oo_ol_list, ols_nextlock_oscobj) { @@ -1277,6 +1276,7 @@ struct ldlm_lock *osc_obj_dlmlock_at_pgoff(const struct lu_env *env, struct ldlm_lock *lock = NULL; enum ldlm_mode mode; __u64 flags; + enum ldlm_match_flags match_flags = 0; ENTRY; @@ -1287,6 +1287,16 @@ struct ldlm_lock *osc_obj_dlmlock_at_pgoff(const struct lu_env *env, flags = LDLM_FL_BLOCK_GRANTED | LDLM_FL_CBPENDING; if (dap_flags & OSC_DAP_FL_TEST_LOCK) flags |= LDLM_FL_TEST_LOCK; + + if (dap_flags & OSC_DAP_FL_AST) + match_flags |= LDLM_MATCH_AST; + + if (dap_flags & OSC_DAP_FL_CANCELING) + match_flags |= LDLM_MATCH_UNREF; + + if (dap_flags & OSC_DAP_FL_RIGHT) + match_flags |= LDLM_MATCH_RIGHT; + /* * It is fine to match any group lock since there could be only one * with a uniq gid and it conflicts with all other lock modes too @@ -1294,7 +1304,7 @@ struct ldlm_lock *osc_obj_dlmlock_at_pgoff(const struct lu_env *env, again: mode = osc_match_base(env, osc_export(obj), resname, LDLM_EXTENT, policy, LCK_PR | LCK_PW | LCK_GROUP, &flags, - obj, &lockh, dap_flags & OSC_DAP_FL_CANCELING); + obj, &lockh, match_flags); if (mode != 0) { lock = ldlm_handle2lock(&lockh); /* RACE: the lock is cancelled so let's try again */