/* 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) {
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;