Loading fs/9p/acl.c +13 −9 Original line number Diff line number Diff line Loading @@ -185,12 +185,15 @@ int v9fs_acl_chmod(struct dentry *dentry) } int v9fs_set_create_acl(struct dentry *dentry, struct posix_acl *dpacl, struct posix_acl *pacl) struct posix_acl **dpacl, struct posix_acl **pacl) { v9fs_set_acl(dentry, ACL_TYPE_DEFAULT, dpacl); v9fs_set_acl(dentry, ACL_TYPE_ACCESS, pacl); posix_acl_release(dpacl); posix_acl_release(pacl); if (dentry) { v9fs_set_acl(dentry, ACL_TYPE_DEFAULT, *dpacl); v9fs_set_acl(dentry, ACL_TYPE_ACCESS, *pacl); } posix_acl_release(*dpacl); posix_acl_release(*pacl); *dpacl = *pacl = NULL; return 0; } Loading @@ -212,11 +215,11 @@ int v9fs_acl_mode(struct inode *dir, mode_t *modep, struct posix_acl *clone; if (S_ISDIR(mode)) *dpacl = acl; *dpacl = posix_acl_dup(acl); clone = posix_acl_clone(acl, GFP_NOFS); retval = -ENOMEM; posix_acl_release(acl); if (!clone) goto cleanup; return -ENOMEM; retval = posix_acl_create_masq(clone, &mode); if (retval < 0) { Loading @@ -225,11 +228,12 @@ int v9fs_acl_mode(struct inode *dir, mode_t *modep, } if (retval > 0) *pacl = clone; else posix_acl_release(clone); } *modep = mode; return 0; cleanup: posix_acl_release(acl); return retval; } Loading fs/9p/acl.h +3 −3 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ extern int v9fs_get_acl(struct inode *, struct p9_fid *); extern int v9fs_check_acl(struct inode *inode, int mask); extern int v9fs_acl_chmod(struct dentry *); extern int v9fs_set_create_acl(struct dentry *, struct posix_acl *, struct posix_acl *); struct posix_acl **, struct posix_acl **); extern int v9fs_acl_mode(struct inode *dir, mode_t *modep, struct posix_acl **dpacl, struct posix_acl **pacl); #else Loading @@ -33,8 +33,8 @@ static inline int v9fs_acl_chmod(struct dentry *dentry) return 0; } static inline int v9fs_set_create_acl(struct dentry *dentry, struct posix_acl *dpacl, struct posix_acl *pacl) struct posix_acl **dpacl, struct posix_acl **pacl) { return 0; } Loading fs/9p/vfs_inode_dotl.c +6 −3 Original line number Diff line number Diff line Loading @@ -242,7 +242,7 @@ v9fs_vfs_create_dotl(struct inode *dir, struct dentry *dentry, int omode, goto error; /* Now set the ACL based on the default value */ v9fs_set_create_acl(dentry, dacl, pacl); v9fs_set_create_acl(dentry, &dacl, &pacl); v9inode = V9FS_I(inode); mutex_lock(&v9inode->v_mutex); Loading Loading @@ -283,6 +283,7 @@ v9fs_vfs_create_dotl(struct inode *dir, struct dentry *dentry, int omode, err_clunk_old_fid: if (ofid) p9_client_clunk(ofid); v9fs_set_create_acl(NULL, &dacl, &pacl); return err; } Loading Loading @@ -376,12 +377,13 @@ static int v9fs_vfs_mkdir_dotl(struct inode *dir, d_instantiate(dentry, inode); } /* Now set the ACL based on the default value */ v9fs_set_create_acl(dentry, dacl, pacl); v9fs_set_create_acl(dentry, &dacl, &pacl); inc_nlink(dir); v9fs_invalidate_inode_attr(dir); error: if (fid) p9_client_clunk(fid); v9fs_set_create_acl(NULL, &dacl, &pacl); return err; } Loading Loading @@ -781,10 +783,11 @@ v9fs_vfs_mknod_dotl(struct inode *dir, struct dentry *dentry, int omode, d_instantiate(dentry, inode); } /* Now set the ACL based on the default value */ v9fs_set_create_acl(dentry, dacl, pacl); v9fs_set_create_acl(dentry, &dacl, &pacl); error: if (fid) p9_client_clunk(fid); v9fs_set_create_acl(NULL, &dacl, &pacl); return err; } Loading Loading
fs/9p/acl.c +13 −9 Original line number Diff line number Diff line Loading @@ -185,12 +185,15 @@ int v9fs_acl_chmod(struct dentry *dentry) } int v9fs_set_create_acl(struct dentry *dentry, struct posix_acl *dpacl, struct posix_acl *pacl) struct posix_acl **dpacl, struct posix_acl **pacl) { v9fs_set_acl(dentry, ACL_TYPE_DEFAULT, dpacl); v9fs_set_acl(dentry, ACL_TYPE_ACCESS, pacl); posix_acl_release(dpacl); posix_acl_release(pacl); if (dentry) { v9fs_set_acl(dentry, ACL_TYPE_DEFAULT, *dpacl); v9fs_set_acl(dentry, ACL_TYPE_ACCESS, *pacl); } posix_acl_release(*dpacl); posix_acl_release(*pacl); *dpacl = *pacl = NULL; return 0; } Loading @@ -212,11 +215,11 @@ int v9fs_acl_mode(struct inode *dir, mode_t *modep, struct posix_acl *clone; if (S_ISDIR(mode)) *dpacl = acl; *dpacl = posix_acl_dup(acl); clone = posix_acl_clone(acl, GFP_NOFS); retval = -ENOMEM; posix_acl_release(acl); if (!clone) goto cleanup; return -ENOMEM; retval = posix_acl_create_masq(clone, &mode); if (retval < 0) { Loading @@ -225,11 +228,12 @@ int v9fs_acl_mode(struct inode *dir, mode_t *modep, } if (retval > 0) *pacl = clone; else posix_acl_release(clone); } *modep = mode; return 0; cleanup: posix_acl_release(acl); return retval; } Loading
fs/9p/acl.h +3 −3 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ extern int v9fs_get_acl(struct inode *, struct p9_fid *); extern int v9fs_check_acl(struct inode *inode, int mask); extern int v9fs_acl_chmod(struct dentry *); extern int v9fs_set_create_acl(struct dentry *, struct posix_acl *, struct posix_acl *); struct posix_acl **, struct posix_acl **); extern int v9fs_acl_mode(struct inode *dir, mode_t *modep, struct posix_acl **dpacl, struct posix_acl **pacl); #else Loading @@ -33,8 +33,8 @@ static inline int v9fs_acl_chmod(struct dentry *dentry) return 0; } static inline int v9fs_set_create_acl(struct dentry *dentry, struct posix_acl *dpacl, struct posix_acl *pacl) struct posix_acl **dpacl, struct posix_acl **pacl) { return 0; } Loading
fs/9p/vfs_inode_dotl.c +6 −3 Original line number Diff line number Diff line Loading @@ -242,7 +242,7 @@ v9fs_vfs_create_dotl(struct inode *dir, struct dentry *dentry, int omode, goto error; /* Now set the ACL based on the default value */ v9fs_set_create_acl(dentry, dacl, pacl); v9fs_set_create_acl(dentry, &dacl, &pacl); v9inode = V9FS_I(inode); mutex_lock(&v9inode->v_mutex); Loading Loading @@ -283,6 +283,7 @@ v9fs_vfs_create_dotl(struct inode *dir, struct dentry *dentry, int omode, err_clunk_old_fid: if (ofid) p9_client_clunk(ofid); v9fs_set_create_acl(NULL, &dacl, &pacl); return err; } Loading Loading @@ -376,12 +377,13 @@ static int v9fs_vfs_mkdir_dotl(struct inode *dir, d_instantiate(dentry, inode); } /* Now set the ACL based on the default value */ v9fs_set_create_acl(dentry, dacl, pacl); v9fs_set_create_acl(dentry, &dacl, &pacl); inc_nlink(dir); v9fs_invalidate_inode_attr(dir); error: if (fid) p9_client_clunk(fid); v9fs_set_create_acl(NULL, &dacl, &pacl); return err; } Loading Loading @@ -781,10 +783,11 @@ v9fs_vfs_mknod_dotl(struct inode *dir, struct dentry *dentry, int omode, d_instantiate(dentry, inode); } /* Now set the ACL based on the default value */ v9fs_set_create_acl(dentry, dacl, pacl); v9fs_set_create_acl(dentry, &dacl, &pacl); error: if (fid) p9_client_clunk(fid); v9fs_set_create_acl(NULL, &dacl, &pacl); return err; } Loading