From 60ffb05533d1f9f012921b02272cccb5f2ad9660 Mon Sep 17 00:00:00 2001 From: Al Viro Date: Thu, 31 Jan 2013 12:54:47 -0500 Subject: [PATCH] --- yaml --- r: 359175 b: refs/heads/master c: 0f235caeaed6bbde6d455e172a83fa693ca485a1 h: refs/heads/master i: 359173: ec0c52b59f68735c737b091b2e0a82af7029415e 359171: 312d55a95e5f959ed29e00e3921ad1bee010ae2d 359167: 417edc18132c1d9a5e10fd271a66f238ce2f02dc v: v3 --- [refs] | 2 +- trunk/fs/9p/acl.c | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 3091f0cc051c..1e13b1194977 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7f165aaa7dc898472f3b3fbf2231bb3b5623a3df +refs/heads/master: 0f235caeaed6bbde6d455e172a83fa693ca485a1 diff --git a/trunk/fs/9p/acl.c b/trunk/fs/9p/acl.c index c5d8cd638e6e..506d8af26a1f 100644 --- a/trunk/fs/9p/acl.c +++ b/trunk/fs/9p/acl.c @@ -23,6 +23,7 @@ #include "acl.h" #include "v9fs.h" #include "v9fs_vfs.h" +#include "fid.h" static struct posix_acl *__v9fs_get_acl(struct p9_fid *fid, char *name) { @@ -113,7 +114,7 @@ struct posix_acl *v9fs_iop_get_acl(struct inode *inode, int type) } -static int v9fs_set_acl(struct dentry *dentry, int type, struct posix_acl *acl) +static int v9fs_set_acl(struct p9_fid *fid, int type, struct posix_acl *acl) { int retval; char *name; @@ -140,7 +141,7 @@ static int v9fs_set_acl(struct dentry *dentry, int type, struct posix_acl *acl) default: BUG(); } - retval = v9fs_xattr_set(dentry, name, buffer, size, 0); + retval = v9fs_fid_xattr_set(fid, name, buffer, size, 0); err_free_out: kfree(buffer); return retval; @@ -151,16 +152,19 @@ int v9fs_acl_chmod(struct dentry *dentry) int retval = 0; struct posix_acl *acl; struct inode *inode = dentry->d_inode; + struct p9_fid *fid = v9fs_fid_lookup(dentry); if (S_ISLNK(inode->i_mode)) return -EOPNOTSUPP; + if (IS_ERR(fid)) + return PTR_ERR(fid); acl = v9fs_get_cached_acl(inode, ACL_TYPE_ACCESS); if (acl) { retval = posix_acl_chmod(&acl, GFP_KERNEL, inode->i_mode); if (retval) return retval; set_cached_acl(inode, ACL_TYPE_ACCESS, acl); - retval = v9fs_set_acl(dentry, ACL_TYPE_ACCESS, acl); + retval = v9fs_set_acl(fid, ACL_TYPE_ACCESS, acl); posix_acl_release(acl); } return retval; @@ -170,10 +174,13 @@ int v9fs_set_create_acl(struct dentry *dentry, struct posix_acl **dpacl, struct posix_acl **pacl) { if (dentry) { + struct p9_fid *fid = v9fs_fid_lookup(dentry); set_cached_acl(dentry->d_inode, ACL_TYPE_DEFAULT, *dpacl); - v9fs_set_acl(dentry, ACL_TYPE_DEFAULT, *dpacl); set_cached_acl(dentry->d_inode, ACL_TYPE_ACCESS, *pacl); - v9fs_set_acl(dentry, ACL_TYPE_ACCESS, *pacl); + if (!IS_ERR(fid)) { + v9fs_set_acl(fid, ACL_TYPE_DEFAULT, *dpacl); + v9fs_set_acl(fid, ACL_TYPE_ACCESS, *pacl); + } } posix_acl_release(*dpacl); posix_acl_release(*pacl);