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
LU-1304 mdd: do not use ma internally
[fs/lustre-release.git]
/
lustre
/
mdd
/
mdd_permission.c
diff --git
a/lustre/mdd/mdd_permission.c
b/lustre/mdd/mdd_permission.c
index
1f3ba34
..
b74872b
100644
(file)
--- a/
lustre/mdd/mdd_permission.c
+++ b/
lustre/mdd/mdd_permission.c
@@
-362,7
+362,7
@@
int mdd_permission(const struct lu_env *env,
{
struct mdd_object *mdd_pobj, *mdd_cobj;
struct md_ucred *uc = NULL;
-
struct lu_attr *la = NULL
;
+
struct lu_attr *la = &mdd_env_info(env)->mti_cattr
;
int check_create, check_link;
int check_unlink;
int check_rename_src, check_rename_tar;
@@
-374,17
+374,15
@@
int mdd_permission(const struct lu_env *env,
LASSERT(cobj);
mdd_cobj = md2mdd_obj(cobj);
+ rc = mdd_la_get(env, mdd_cobj, la, BYPASS_CAPA);
+ if (rc)
+ RETURN(rc);
+
/* For cross_open case, the "mask" is open flags,
* so convert it to permission mask first.
* XXX: MDS_OPEN_CROSS must be NOT equal to permission mask MAY_*. */
- if (unlikely(mask & MDS_OPEN_CROSS)) {
- la = &mdd_env_info(env)->mti_la;
- rc = mdd_la_get(env, mdd_cobj, la, BYPASS_CAPA);
- if (rc)
- RETURN(rc);
-
- mask = accmode(env, la, mask & ~MDS_OPEN_CROSS);
- }
+ if (unlikely(mask & MDS_OPEN_CROSS))
+ mask = accmode(env, la, mask & ~MDS_OPEN_CROSS);
check_create = mask & MAY_CREATE;
check_link = mask & MAY_LINK;
@@
-407,22
+405,18
@@
int mdd_permission(const struct lu_env *env,
if (!rc && (check_create || check_link))
rc = mdd_may_create(env, mdd_cobj, NULL, 1, check_link);
- if (!rc && check_unlink) {
- LASSERT(ma);
- rc = mdd_may_unlink(env, mdd_cobj, ma);
- }
+ if (!rc && check_unlink)
+ rc = mdd_may_unlink(env, mdd_cobj, la);
if (!rc && (check_rename_src || check_rename_tar)) {
LASSERT(pobj);
- LASSERT(ma);
mdd_pobj = md2mdd_obj(pobj);
-
rc = mdd_may_delete(env, mdd_pobj, mdd_cobj, ma
, 1,
+
rc = mdd_may_delete(env, mdd_pobj, mdd_cobj, la, NULL
, 1,
check_rename_tar);
}
if (!rc && (check_vtx_part || check_vtx_full)) {
uc = md_ucred(env);
- LASSERT(ma);
if (likely(!la)) {
la = &mdd_env_info(env)->mti_la;
rc = mdd_la_get(env, mdd_cobj, la, BYPASS_CAPA);
@@
-445,13
+439,6
@@
int mdd_permission(const struct lu_env *env,
if (likely(!uc))
uc = md_ucred(env);
- if (likely(!la)) {
- la = &mdd_env_info(env)->mti_la;
- rc = mdd_la_get(env, mdd_cobj, la, BYPASS_CAPA);
- if (rc)
- RETURN(rc);
- }
-
if (la->la_uid != uc->mu_fsuid &&
!mdd_capable(uc, CFS_CAP_FOWNER))
rc = -EPERM;