Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
branch: HEAD
[fs/lustre-release.git]
/
lustre
/
lov
/
lov_lock.c
diff --git
a/lustre/lov/lov_lock.c
b/lustre/lov/lov_lock.c
index
9c741f8
..
79a6942
100644
(file)
--- a/
lustre/lov/lov_lock.c
+++ b/
lustre/lov/lov_lock.c
@@
-330,6
+330,7
@@
static int lov_lock_sub_init(const struct lu_env *env,
descr->cld_start = cl_index(descr->cld_obj, start);
descr->cld_end = cl_index(descr->cld_obj, end);
descr->cld_mode = parent->cll_descr.cld_mode;
descr->cld_start = cl_index(descr->cld_obj, start);
descr->cld_end = cl_index(descr->cld_obj, end);
descr->cld_mode = parent->cll_descr.cld_mode;
+ descr->cld_gid = parent->cll_descr.cld_gid;
/* XXX has no effect */
lck->lls_sub[nr].sub_got = *descr;
lck->lls_sub[nr].sub_stripe = stripe;
/* XXX has no effect */
lck->lls_sub[nr].sub_got = *descr;
lck->lls_sub[nr].sub_stripe = stripe;
@@
-402,6
+403,7
@@
static int lov_sublock_release(const struct lu_env *env, struct lov_lock *lck,
* while sub-lock is being paged out.
*/
dying = (sublock->cll_descr.cld_mode == CLM_PHANTOM ||
* while sub-lock is being paged out.
*/
dying = (sublock->cll_descr.cld_mode == CLM_PHANTOM ||
+ sublock->cll_descr.cld_mode == CLM_GROUP ||
(sublock->cll_flags & (CLF_CANCELPEND|CLF_DOOMED))) &&
sublock->cll_holds == 1;
if (dying)
(sublock->cll_flags & (CLF_CANCELPEND|CLF_DOOMED))) &&
sublock->cll_holds == 1;
if (dying)
@@
-824,6
+826,7
@@
static int lov_lock_stripe_is_matching(const struct lu_env *env,
subd->cld_obj = NULL; /* don't need sub object at all */
subd->cld_mode = descr->cld_mode;
subd->cld_obj = NULL; /* don't need sub object at all */
subd->cld_mode = descr->cld_mode;
+ subd->cld_gid = descr->cld_gid;
result = lov_stripe_intersects(lsm, stripe, start, end,
&sub_start, &sub_end);
LASSERT(result);
result = lov_stripe_intersects(lsm, stripe, start, end,
&sub_start, &sub_end);
LASSERT(result);
@@
-857,7
+860,12
@@
static int lov_lock_fits_into(const struct lu_env *env,
ENTRY;
ENTRY;
- if (lov->lls_nr == 1) {
+ if (need->cld_mode == CLM_GROUP)
+ /*
+ * always allow to match group lock.
+ */
+ result = cl_lock_ext_match(&lov->lls_orig, need);
+ else if (lov->lls_nr == 1) {
struct cl_lock_descr *got = &lov->lls_sub[0].sub_got;
result = lov_lock_stripe_is_matching(env,
cl2lov(slice->cls_obj),
struct cl_lock_descr *got = &lov->lls_sub[0].sub_got;
result = lov_lock_stripe_is_matching(env,
cl2lov(slice->cls_obj),
@@
-1040,7
+1048,7
@@
static struct cl_lock_closure *lov_closure_get(const struct lu_env *env,
struct cl_lock_closure *closure;
closure = &lov_env_info(env)->lti_closure;
struct cl_lock_closure *closure;
closure = &lov_env_info(env)->lti_closure;
- L
INVRN
T(list_empty(&closure->clc_list));
+ L
ASSER
T(list_empty(&closure->clc_list));
cl_lock_closure_init(env, closure, parent, 1);
return closure;
}
cl_lock_closure_init(env, closure, parent, 1);
return closure;
}