Loading fs/nfs/nfs3acl.c +12 −22 Original line number Diff line number Diff line Loading @@ -80,7 +80,7 @@ struct posix_acl *nfs3_get_acl(struct inode *inode, int type) } if (res.acl_access != NULL) { if (posix_acl_equiv_mode(res.acl_access, NULL) || if ((posix_acl_equiv_mode(res.acl_access, NULL) == 0) || res.acl_access->a_count == 0) { posix_acl_release(res.acl_access); res.acl_access = NULL; Loading Loading @@ -113,7 +113,7 @@ getout: return ERR_PTR(status); } int nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl, static int __nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl, struct posix_acl *dfacl) { struct nfs_server *server = NFS_SERVER(inode); Loading Loading @@ -198,6 +198,15 @@ out: return status; } int nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl, struct posix_acl *dfacl) { int ret; ret = __nfs3_proc_setacls(inode, acl, dfacl); return (ret == -EOPNOTSUPP) ? 0 : ret; } int nfs3_set_acl(struct inode *inode, struct posix_acl *acl, int type) { struct posix_acl *alloc = NULL, *dfacl = NULL; Loading Loading @@ -225,7 +234,7 @@ int nfs3_set_acl(struct inode *inode, struct posix_acl *acl, int type) if (IS_ERR(alloc)) goto fail; } status = nfs3_proc_setacls(inode, acl, dfacl); status = __nfs3_proc_setacls(inode, acl, dfacl); posix_acl_release(alloc); return status; Loading @@ -233,25 +242,6 @@ fail: return PTR_ERR(alloc); } int nfs3_proc_set_default_acl(struct inode *dir, struct inode *inode, umode_t mode) { struct posix_acl *default_acl, *acl; int error; error = posix_acl_create(dir, &mode, &default_acl, &acl); if (error) return (error == -EOPNOTSUPP) ? 0 : error; error = nfs3_proc_setacls(inode, acl, default_acl); if (acl) posix_acl_release(acl); if (default_acl) posix_acl_release(default_acl); return error; } const struct xattr_handler *nfs3_xattr_handlers[] = { &posix_acl_access_xattr_handler, &posix_acl_default_xattr_handler, Loading fs/posix_acl.c +12 −6 Original line number Diff line number Diff line Loading @@ -521,8 +521,11 @@ posix_acl_chmod(struct inode *inode, umode_t mode) return -EOPNOTSUPP; acl = get_acl(inode, ACL_TYPE_ACCESS); if (IS_ERR_OR_NULL(acl)) if (IS_ERR_OR_NULL(acl)) { if (acl == ERR_PTR(-EOPNOTSUPP)) return 0; return PTR_ERR(acl); } ret = __posix_acl_chmod(&acl, GFP_KERNEL, mode); if (ret) Loading @@ -544,14 +547,15 @@ posix_acl_create(struct inode *dir, umode_t *mode, goto no_acl; p = get_acl(dir, ACL_TYPE_DEFAULT); if (IS_ERR(p)) if (IS_ERR(p)) { if (p == ERR_PTR(-EOPNOTSUPP)) goto apply_umask; return PTR_ERR(p); if (!p) { *mode &= ~current_umask(); goto no_acl; } if (!p) goto apply_umask; *acl = posix_acl_clone(p, GFP_NOFS); if (!*acl) return -ENOMEM; Loading @@ -575,6 +579,8 @@ posix_acl_create(struct inode *dir, umode_t *mode, } return 0; apply_umask: *mode &= ~current_umask(); no_acl: *default_acl = NULL; *acl = NULL; Loading Loading
fs/nfs/nfs3acl.c +12 −22 Original line number Diff line number Diff line Loading @@ -80,7 +80,7 @@ struct posix_acl *nfs3_get_acl(struct inode *inode, int type) } if (res.acl_access != NULL) { if (posix_acl_equiv_mode(res.acl_access, NULL) || if ((posix_acl_equiv_mode(res.acl_access, NULL) == 0) || res.acl_access->a_count == 0) { posix_acl_release(res.acl_access); res.acl_access = NULL; Loading Loading @@ -113,7 +113,7 @@ getout: return ERR_PTR(status); } int nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl, static int __nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl, struct posix_acl *dfacl) { struct nfs_server *server = NFS_SERVER(inode); Loading Loading @@ -198,6 +198,15 @@ out: return status; } int nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl, struct posix_acl *dfacl) { int ret; ret = __nfs3_proc_setacls(inode, acl, dfacl); return (ret == -EOPNOTSUPP) ? 0 : ret; } int nfs3_set_acl(struct inode *inode, struct posix_acl *acl, int type) { struct posix_acl *alloc = NULL, *dfacl = NULL; Loading Loading @@ -225,7 +234,7 @@ int nfs3_set_acl(struct inode *inode, struct posix_acl *acl, int type) if (IS_ERR(alloc)) goto fail; } status = nfs3_proc_setacls(inode, acl, dfacl); status = __nfs3_proc_setacls(inode, acl, dfacl); posix_acl_release(alloc); return status; Loading @@ -233,25 +242,6 @@ fail: return PTR_ERR(alloc); } int nfs3_proc_set_default_acl(struct inode *dir, struct inode *inode, umode_t mode) { struct posix_acl *default_acl, *acl; int error; error = posix_acl_create(dir, &mode, &default_acl, &acl); if (error) return (error == -EOPNOTSUPP) ? 0 : error; error = nfs3_proc_setacls(inode, acl, default_acl); if (acl) posix_acl_release(acl); if (default_acl) posix_acl_release(default_acl); return error; } const struct xattr_handler *nfs3_xattr_handlers[] = { &posix_acl_access_xattr_handler, &posix_acl_default_xattr_handler, Loading
fs/posix_acl.c +12 −6 Original line number Diff line number Diff line Loading @@ -521,8 +521,11 @@ posix_acl_chmod(struct inode *inode, umode_t mode) return -EOPNOTSUPP; acl = get_acl(inode, ACL_TYPE_ACCESS); if (IS_ERR_OR_NULL(acl)) if (IS_ERR_OR_NULL(acl)) { if (acl == ERR_PTR(-EOPNOTSUPP)) return 0; return PTR_ERR(acl); } ret = __posix_acl_chmod(&acl, GFP_KERNEL, mode); if (ret) Loading @@ -544,14 +547,15 @@ posix_acl_create(struct inode *dir, umode_t *mode, goto no_acl; p = get_acl(dir, ACL_TYPE_DEFAULT); if (IS_ERR(p)) if (IS_ERR(p)) { if (p == ERR_PTR(-EOPNOTSUPP)) goto apply_umask; return PTR_ERR(p); if (!p) { *mode &= ~current_umask(); goto no_acl; } if (!p) goto apply_umask; *acl = posix_acl_clone(p, GFP_NOFS); if (!*acl) return -ENOMEM; Loading @@ -575,6 +579,8 @@ posix_acl_create(struct inode *dir, umode_t *mode, } return 0; apply_umask: *mode &= ~current_umask(); no_acl: *default_acl = NULL; *acl = NULL; Loading