Message ID | 20190220072925.103352-1-yangerkun@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | nfs: drop acl cache in __nfs3_proc_setacls | expand |
Ping? yangerkun wrote on 2019/2/20 15:29: > Since server may call posix_acl_update_mode which can lead acl been > NULL. So,just drop acl cache after rpc_call_sync, and if anyone want to > use acl, they can get the correct acl by send a msg to server themselves. > This can fix xfstests generic/099 over nfsv3. > > Signed-off-by: yangerkun <yangerkun@huawei.com> > --- > fs/nfs/nfs3acl.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/nfs/nfs3acl.c b/fs/nfs/nfs3acl.c > index 9fce185..6c07ebc 100644 > --- a/fs/nfs/nfs3acl.c > +++ b/fs/nfs/nfs3acl.c > @@ -222,8 +222,8 @@ static int __nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl, > switch (status) { > case 0: > status = nfs_refresh_inode(inode, fattr); > - set_cached_acl(inode, ACL_TYPE_ACCESS, acl); > - set_cached_acl(inode, ACL_TYPE_DEFAULT, dfacl); > + /* Sever may call posix_acl_update_mode */ > + forget_all_cached_acls(inode); > break; > case -EPFNOSUPPORT: > case -EPROTONOSUPPORT: >
Hi, On Fri, 2019-02-22 at 15:35 +0800, yangerkun wrote: > Ping? > > yangerkun wrote on 2019/2/20 15:29: > > Since server may call posix_acl_update_mode which can lead acl been > > NULL. So,just drop acl cache after rpc_call_sync, and if anyone > > want to > > use acl, they can get the correct acl by send a msg to server > > themselves. > > This can fix xfstests generic/099 over nfsv3. > > > > Signed-off-by: yangerkun <yangerkun@huawei.com> > > --- > > fs/nfs/nfs3acl.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/fs/nfs/nfs3acl.c b/fs/nfs/nfs3acl.c > > index 9fce185..6c07ebc 100644 > > --- a/fs/nfs/nfs3acl.c > > +++ b/fs/nfs/nfs3acl.c > > @@ -222,8 +222,8 @@ static int __nfs3_proc_setacls(struct inode > > *inode, struct posix_acl *acl, > > switch (status) { > > case 0: > > status = nfs_refresh_inode(inode, fattr); > > - set_cached_acl(inode, ACL_TYPE_ACCESS, acl); > > - set_cached_acl(inode, ACL_TYPE_DEFAULT, dfacl); > > + /* Sever may call posix_acl_update_mode */ > > + forget_all_cached_acls(inode); > > break; > > case -EPFNOSUPPORT: > > case -EPROTONOSUPPORT: > > I've applied the following patch http://git.linux-nfs.org/?p=trondmy/linux-nfs.git;a=commitdiff;h=ded52fbe7020a5696b0b0a0fdbf234e37bf16f94 in order to fix this issue. The reason why I prefer that fix is that we're already calling nfs_zap_acl_cache(inode) immediately before this switch statement, so the call to 'forget_all_cached_acls()' appears redundant. Thanks! Trond
Trond Myklebust wrote on 2019/2/22 21:51: > Hi, > > On Fri, 2019-02-22 at 15:35 +0800, yangerkun wrote: >> Ping? >> >> yangerkun wrote on 2019/2/20 15:29: >>> Since server may call posix_acl_update_mode which can lead acl been >>> NULL. So,just drop acl cache after rpc_call_sync, and if anyone >>> want to >>> use acl, they can get the correct acl by send a msg to server >>> themselves. >>> This can fix xfstests generic/099 over nfsv3. >>> >>> Signed-off-by: yangerkun <yangerkun@huawei.com> >>> --- >>> fs/nfs/nfs3acl.c | 4 ++-- >>> 1 file changed, 2 insertions(+), 2 deletions(-) >>> >>> diff --git a/fs/nfs/nfs3acl.c b/fs/nfs/nfs3acl.c >>> index 9fce185..6c07ebc 100644 >>> --- a/fs/nfs/nfs3acl.c >>> +++ b/fs/nfs/nfs3acl.c >>> @@ -222,8 +222,8 @@ static int __nfs3_proc_setacls(struct inode >>> *inode, struct posix_acl *acl, >>> switch (status) { >>> case 0: >>> status = nfs_refresh_inode(inode, fattr); >>> - set_cached_acl(inode, ACL_TYPE_ACCESS, acl); >>> - set_cached_acl(inode, ACL_TYPE_DEFAULT, dfacl); >>> + /* Sever may call posix_acl_update_mode */ >>> + forget_all_cached_acls(inode); >>> break; >>> case -EPFNOSUPPORT: >>> case -EPROTONOSUPPORT: >>> > > I've applied the following patch > http://git.linux-nfs.org/?p=trondmy/linux-nfs.git;a=commitdiff;h=ded52fbe7020a5696b0b0a0fdbf234e37bf16f94 > in order to fix this issue. > > The reason why I prefer that fix is that we're already calling > nfs_zap_acl_cache(inode) immediately before this switch statement, so > the call to 'forget_all_cached_acls()' appears redundant. > > Thanks! > Trond > Got it! Thanks a lot! Kun.
diff --git a/fs/nfs/nfs3acl.c b/fs/nfs/nfs3acl.c index 9fce185..6c07ebc 100644 --- a/fs/nfs/nfs3acl.c +++ b/fs/nfs/nfs3acl.c @@ -222,8 +222,8 @@ static int __nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl, switch (status) { case 0: status = nfs_refresh_inode(inode, fattr); - set_cached_acl(inode, ACL_TYPE_ACCESS, acl); - set_cached_acl(inode, ACL_TYPE_DEFAULT, dfacl); + /* Sever may call posix_acl_update_mode */ + forget_all_cached_acls(inode); break; case -EPFNOSUPPORT: case -EPROTONOSUPPORT:
Since server may call posix_acl_update_mode which can lead acl been NULL. So,just drop acl cache after rpc_call_sync, and if anyone want to use acl, they can get the correct acl by send a msg to server themselves. This can fix xfstests generic/099 over nfsv3. Signed-off-by: yangerkun <yangerkun@huawei.com> --- fs/nfs/nfs3acl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)