Whamcloud - gitweb
Process "-ENODATA" correctly for ACL, update lli_posix_acl even if no acl.
authorfanyong <fanyong>
Tue, 17 Oct 2006 13:49:30 +0000 (13:49 +0000)
committerfanyong <fanyong>
Tue, 17 Oct 2006 13:49:30 +0000 (13:49 +0000)
lustre/mdc/mdc_request.c
lustre/mdt/mdt_handler.c

index a85031c..2d8a3b6 100644 (file)
@@ -559,10 +559,14 @@ int mdc_get_lustre_md(struct obd_export *exp, struct ptlrpc_request *req,
         /* for ACL, it's possible that FLACL is set but aclsize is zero.  only
          * when aclsize != 0 there's an actual segment for ACL in reply
          * buffer. */
-        else if ((md->body->valid & OBD_MD_FLACL) && md->body->aclsize) {
-                rc = mdc_unpack_acl(dt_exp, req, md, offset++);
-                if (rc)
-                        GOTO(out, rc);
+        else if (md->body->valid & OBD_MD_FLACL) {
+                if (md->body->aclsize) {
+                        rc = mdc_unpack_acl(dt_exp, req, md, offset++);
+                        if (rc)
+                                GOTO(out, rc);
+                } else {
+                        md->posix_acl = NULL;
+                }
         }
 
         if (md->body->valid & OBD_MD_FLMDSCAPA) {
index 96ab26f..83f5b3b 100644 (file)
@@ -392,10 +392,15 @@ static int mdt_getattr_internal(struct mdt_thread_info *info,
                         rc = mo_xattr_get(env, next, buffer,
                                           XATTR_NAME_ACL_ACCESS);
                         if (rc < 0) {
-                                if (rc == -ENODATA || rc == -EOPNOTSUPP)
+                                if (rc == -ENODATA) {
+                                        repbody->aclsize = 0;
+                                        repbody->valid |= OBD_MD_FLACL;
                                         rc = 0;
-                                else
+                                } else if (rc == -EOPNOTSUPP) {
+                                        rc = 0;
+                                } else {
                                         CERROR("got acl size: %d\n", rc);
+                                }
                         } else {
                                 repbody->aclsize = rc;
                                 repbody->valid |= OBD_MD_FLACL;