Loading fs/9p/acl.c +14 −12 Original line number Diff line number Diff line Loading @@ -167,23 +167,25 @@ int v9fs_acl_chmod(struct inode *inode, struct p9_fid *fid) } int v9fs_set_create_acl(struct dentry *dentry, struct posix_acl **dpacl, struct posix_acl **pacl) struct posix_acl *dacl, struct posix_acl *acl) { if (dentry) { struct p9_fid *fid = v9fs_fid_lookup(dentry); set_cached_acl(dentry->d_inode, ACL_TYPE_DEFAULT, *dpacl); set_cached_acl(dentry->d_inode, ACL_TYPE_ACCESS, *pacl); set_cached_acl(dentry->d_inode, ACL_TYPE_DEFAULT, dacl); set_cached_acl(dentry->d_inode, ACL_TYPE_ACCESS, acl); if (!IS_ERR(fid)) { v9fs_set_acl(fid, ACL_TYPE_DEFAULT, *dpacl); v9fs_set_acl(fid, ACL_TYPE_ACCESS, *pacl); } v9fs_set_acl(fid, ACL_TYPE_DEFAULT, dacl); v9fs_set_acl(fid, ACL_TYPE_ACCESS, acl); } posix_acl_release(*dpacl); posix_acl_release(*pacl); *dpacl = *pacl = NULL; return 0; } void v9fs_put_acl(struct posix_acl *dacl, struct posix_acl *acl) { posix_acl_release(dacl); posix_acl_release(acl); } int v9fs_acl_mode(struct inode *dir, umode_t *modep, struct posix_acl **dpacl, struct posix_acl **pacl) { Loading fs/9p/acl.h +8 −3 Original line number Diff line number Diff line Loading @@ -19,9 +19,10 @@ extern int v9fs_get_acl(struct inode *, struct p9_fid *); extern struct posix_acl *v9fs_iop_get_acl(struct inode *inode, int type); extern int v9fs_acl_chmod(struct inode *, struct p9_fid *); 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, umode_t *modep, struct posix_acl **dpacl, struct posix_acl **pacl); extern void v9fs_put_acl(struct posix_acl *dacl, struct posix_acl *acl); #else #define v9fs_iop_get_acl NULL static inline int v9fs_get_acl(struct inode *inode, struct p9_fid *fid) Loading @@ -33,11 +34,15 @@ static inline int v9fs_acl_chmod(struct inode *inode, struct p9_fid *fid) return 0; } static inline int v9fs_set_create_acl(struct dentry *dentry, struct posix_acl **dpacl, struct posix_acl **pacl) struct posix_acl *dacl, struct posix_acl *acl) { return 0; } static inline void v9fs_put_acl(struct posix_acl *dacl, struct posix_acl *acl) { } static inline int v9fs_acl_mode(struct inode *dir, umode_t *modep, struct posix_acl **dpacl, struct posix_acl **pacl) Loading fs/9p/vfs_inode_dotl.c +6 −6 Original line number Diff line number Diff line Loading @@ -331,7 +331,7 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry, 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); v9inode = V9FS_I(inode); mutex_lock(&v9inode->v_mutex); Loading Loading @@ -364,6 +364,7 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry, #endif *opened |= FILE_CREATED; out: v9fs_put_acl(dacl, pacl); dput(res); return err; Loading @@ -373,7 +374,6 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry, err_clunk_old_fid: if (ofid) p9_client_clunk(ofid); v9fs_set_create_acl(NULL, &dacl, &pacl); goto out; } Loading Loading @@ -467,13 +467,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); v9fs_put_acl(dacl, pacl); return err; } Loading Loading @@ -912,11 +912,11 @@ v9fs_vfs_mknod_dotl(struct inode *dir, struct dentry *dentry, umode_t 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); v9fs_put_acl(dacl, pacl); return err; } Loading Loading
fs/9p/acl.c +14 −12 Original line number Diff line number Diff line Loading @@ -167,23 +167,25 @@ int v9fs_acl_chmod(struct inode *inode, struct p9_fid *fid) } int v9fs_set_create_acl(struct dentry *dentry, struct posix_acl **dpacl, struct posix_acl **pacl) struct posix_acl *dacl, struct posix_acl *acl) { if (dentry) { struct p9_fid *fid = v9fs_fid_lookup(dentry); set_cached_acl(dentry->d_inode, ACL_TYPE_DEFAULT, *dpacl); set_cached_acl(dentry->d_inode, ACL_TYPE_ACCESS, *pacl); set_cached_acl(dentry->d_inode, ACL_TYPE_DEFAULT, dacl); set_cached_acl(dentry->d_inode, ACL_TYPE_ACCESS, acl); if (!IS_ERR(fid)) { v9fs_set_acl(fid, ACL_TYPE_DEFAULT, *dpacl); v9fs_set_acl(fid, ACL_TYPE_ACCESS, *pacl); } v9fs_set_acl(fid, ACL_TYPE_DEFAULT, dacl); v9fs_set_acl(fid, ACL_TYPE_ACCESS, acl); } posix_acl_release(*dpacl); posix_acl_release(*pacl); *dpacl = *pacl = NULL; return 0; } void v9fs_put_acl(struct posix_acl *dacl, struct posix_acl *acl) { posix_acl_release(dacl); posix_acl_release(acl); } int v9fs_acl_mode(struct inode *dir, umode_t *modep, struct posix_acl **dpacl, struct posix_acl **pacl) { Loading
fs/9p/acl.h +8 −3 Original line number Diff line number Diff line Loading @@ -19,9 +19,10 @@ extern int v9fs_get_acl(struct inode *, struct p9_fid *); extern struct posix_acl *v9fs_iop_get_acl(struct inode *inode, int type); extern int v9fs_acl_chmod(struct inode *, struct p9_fid *); 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, umode_t *modep, struct posix_acl **dpacl, struct posix_acl **pacl); extern void v9fs_put_acl(struct posix_acl *dacl, struct posix_acl *acl); #else #define v9fs_iop_get_acl NULL static inline int v9fs_get_acl(struct inode *inode, struct p9_fid *fid) Loading @@ -33,11 +34,15 @@ static inline int v9fs_acl_chmod(struct inode *inode, struct p9_fid *fid) return 0; } static inline int v9fs_set_create_acl(struct dentry *dentry, struct posix_acl **dpacl, struct posix_acl **pacl) struct posix_acl *dacl, struct posix_acl *acl) { return 0; } static inline void v9fs_put_acl(struct posix_acl *dacl, struct posix_acl *acl) { } static inline int v9fs_acl_mode(struct inode *dir, umode_t *modep, struct posix_acl **dpacl, struct posix_acl **pacl) Loading
fs/9p/vfs_inode_dotl.c +6 −6 Original line number Diff line number Diff line Loading @@ -331,7 +331,7 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry, 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); v9inode = V9FS_I(inode); mutex_lock(&v9inode->v_mutex); Loading Loading @@ -364,6 +364,7 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry, #endif *opened |= FILE_CREATED; out: v9fs_put_acl(dacl, pacl); dput(res); return err; Loading @@ -373,7 +374,6 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry, err_clunk_old_fid: if (ofid) p9_client_clunk(ofid); v9fs_set_create_acl(NULL, &dacl, &pacl); goto out; } Loading Loading @@ -467,13 +467,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); v9fs_put_acl(dacl, pacl); return err; } Loading Loading @@ -912,11 +912,11 @@ v9fs_vfs_mknod_dotl(struct inode *dir, struct dentry *dentry, umode_t 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); v9fs_put_acl(dacl, pacl); return err; } Loading