Whamcloud - gitweb
Pass lu_attr as arg for __mdd_permission_internal explicitly.
authorfanyong <fanyong>
Tue, 7 Nov 2006 05:06:07 +0000 (05:06 +0000)
committerfanyong <fanyong>
Tue, 7 Nov 2006 05:06:07 +0000 (05:06 +0000)
lustre/mdd/mdd_internal.h
lustre/mdd/mdd_object.c
lustre/mdd/mdd_permission.c

index 2f1e990..706a492 100644 (file)
@@ -285,7 +285,7 @@ int __mdd_acl_init(const struct lu_env *env, struct mdd_object *obj,
 int mdd_acl_init(const struct lu_env *env, struct mdd_object *pobj,
                  struct mdd_object *cobj, __u32 *mode, struct thandle *handle);
 int __mdd_permission_internal(const struct lu_env *env, struct mdd_object *obj,
-                              int mask, int getattr);
+                              int mask, struct lu_attr *la);
 int mdd_permission_internal(const struct lu_env *env, struct mdd_object *obj,
                             int mask);
 int mdd_permission_internal_locked(const struct lu_env *env,
index f150e39..655a77b 100644 (file)
@@ -585,7 +585,7 @@ int mdd_fix_attr(const struct lu_env *env, struct mdd_object *obj,
         /* Check for setting the obj time. */
         if ((la->la_valid & (LA_MTIME | LA_ATIME | LA_CTIME)) &&
             !(la->la_valid & ~(LA_MTIME | LA_ATIME | LA_CTIME))) {
-                rc = __mdd_permission_internal(env, obj, MAY_WRITE, 0);
+                rc = __mdd_permission_internal(env, obj, MAY_WRITE, tmp_la);
                 if (rc)
                         RETURN(rc);
         }
@@ -671,7 +671,7 @@ int mdd_fix_attr(const struct lu_env *env, struct mdd_object *obj,
 
         /* For tuncate (or setsize), we should have MAY_WRITE perm */
         if (la->la_valid & (LA_SIZE | LA_BLOCKS)) {
-                rc = __mdd_permission_internal(env, obj, MAY_WRITE, 0);
+                rc = __mdd_permission_internal(env, obj, MAY_WRITE, tmp_la);
                 if (rc)
                         RETURN(rc);
 
@@ -1124,7 +1124,7 @@ static int mdd_open_sanity_check(const struct lu_env *env,
                 RETURN(-EISDIR);
 
         if (!(flag & MDS_OPEN_CREATED)) {
-                rc = __mdd_permission_internal(env, obj, mode, 0);
+                rc = __mdd_permission_internal(env, obj, mode, tmp_la);
                 if (rc)
                         RETURN(rc);
         }
index eed2885..3645b8e 100644 (file)
@@ -482,9 +482,8 @@ static int mdd_check_acl(const struct lu_env *env, struct mdd_object *obj,
 
 int __mdd_permission_internal(const struct lu_env *env,
                               struct mdd_object *obj,
-                              int mask, int getattr)
+                              int mask, struct lu_attr *la)
 {
-        struct lu_attr  *la = &mdd_env_info(env)->mti_la;
         struct md_ucred *uc = md_ucred(env);
         __u32 mode;
         int rc;
@@ -507,7 +506,8 @@ int __mdd_permission_internal(const struct lu_env *env,
         if ((mask & MAY_WRITE) && mdd_is_immutable(obj))
                 RETURN(-EACCES);
 
-        if (getattr) {
+        if (la == NULL) {
+                la = &mdd_env_info(env)->mti_la;
                 rc = mdd_la_get(env, obj, la, BYPASS_CAPA);
                 if (rc)
                         RETURN(rc);
@@ -549,7 +549,7 @@ check_capabilities:
 int mdd_permission_internal(const struct lu_env *env, struct mdd_object *obj, 
                             int mask)
 {
-        return __mdd_permission_internal(env, obj, mask, 1);
+        return __mdd_permission_internal(env, obj, mask, NULL);
 }
 
 inline int mdd_permission_internal_locked(const struct lu_env *env,