|
@@ -59,22 +59,19 @@ struct posix_acl *btrfs_get_acl(struct inode *inode, int type)
|
|
|
if (!value)
|
|
|
return ERR_PTR(-ENOMEM);
|
|
|
size = __btrfs_getxattr(inode, name, value, size);
|
|
|
- if (size > 0) {
|
|
|
- acl = posix_acl_from_xattr(value, size);
|
|
|
- if (IS_ERR(acl)) {
|
|
|
- kfree(value);
|
|
|
- return acl;
|
|
|
- }
|
|
|
- set_cached_acl(inode, type, acl);
|
|
|
- }
|
|
|
- kfree(value);
|
|
|
+ }
|
|
|
+ if (size > 0) {
|
|
|
+ acl = posix_acl_from_xattr(value, size);
|
|
|
} else if (size == -ENOENT || size == -ENODATA || size == 0) {
|
|
|
/* FIXME, who returns -ENOENT? I think nobody */
|
|
|
acl = NULL;
|
|
|
- set_cached_acl(inode, type, acl);
|
|
|
} else {
|
|
|
acl = ERR_PTR(-EIO);
|
|
|
}
|
|
|
+ kfree(value);
|
|
|
+
|
|
|
+ if (!IS_ERR(acl))
|
|
|
+ set_cached_acl(inode, type, acl);
|
|
|
|
|
|
return acl;
|
|
|
}
|