mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-20 14:16:02 +00:00
[PATCH] NFS: Fix up v3 ACL caching code
Initialize the inode cache values correctly. Clean up __nfs3_forget_cached_acls() Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
5c6a9f7d92
commit
458818ed76
2 changed files with 10 additions and 5 deletions
|
@ -1961,6 +1961,10 @@ static struct inode *nfs_alloc_inode(struct super_block *sb)
|
||||||
if (!nfsi)
|
if (!nfsi)
|
||||||
return NULL;
|
return NULL;
|
||||||
nfsi->flags = 0;
|
nfsi->flags = 0;
|
||||||
|
#ifdef CONFIG_NFS_V3_ACL
|
||||||
|
nfsi->acl_access = ERR_PTR(-EAGAIN);
|
||||||
|
nfsi->acl_default = ERR_PTR(-EAGAIN);
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_NFS_V4
|
#ifdef CONFIG_NFS_V4
|
||||||
nfsi->nfs4_acl = NULL;
|
nfsi->nfs4_acl = NULL;
|
||||||
#endif /* CONFIG_NFS_V4 */
|
#endif /* CONFIG_NFS_V4 */
|
||||||
|
|
|
@ -115,11 +115,11 @@ int nfs3_removexattr(struct dentry *dentry, const char *name)
|
||||||
|
|
||||||
static void __nfs3_forget_cached_acls(struct nfs_inode *nfsi)
|
static void __nfs3_forget_cached_acls(struct nfs_inode *nfsi)
|
||||||
{
|
{
|
||||||
if (nfsi->acl_access != ERR_PTR(-EAGAIN)) {
|
if (!IS_ERR(nfsi->acl_access)) {
|
||||||
posix_acl_release(nfsi->acl_access);
|
posix_acl_release(nfsi->acl_access);
|
||||||
nfsi->acl_access = ERR_PTR(-EAGAIN);
|
nfsi->acl_access = ERR_PTR(-EAGAIN);
|
||||||
}
|
}
|
||||||
if (nfsi->acl_default != ERR_PTR(-EAGAIN)) {
|
if (!IS_ERR(nfsi->acl_default)) {
|
||||||
posix_acl_release(nfsi->acl_default);
|
posix_acl_release(nfsi->acl_default);
|
||||||
nfsi->acl_default = ERR_PTR(-EAGAIN);
|
nfsi->acl_default = ERR_PTR(-EAGAIN);
|
||||||
}
|
}
|
||||||
|
@ -137,7 +137,7 @@ void nfs3_forget_cached_acls(struct inode *inode)
|
||||||
static struct posix_acl *nfs3_get_cached_acl(struct inode *inode, int type)
|
static struct posix_acl *nfs3_get_cached_acl(struct inode *inode, int type)
|
||||||
{
|
{
|
||||||
struct nfs_inode *nfsi = NFS_I(inode);
|
struct nfs_inode *nfsi = NFS_I(inode);
|
||||||
struct posix_acl *acl = ERR_PTR(-EAGAIN);
|
struct posix_acl *acl = ERR_PTR(-EINVAL);
|
||||||
|
|
||||||
spin_lock(&inode->i_lock);
|
spin_lock(&inode->i_lock);
|
||||||
switch(type) {
|
switch(type) {
|
||||||
|
@ -150,12 +150,13 @@ static struct posix_acl *nfs3_get_cached_acl(struct inode *inode, int type)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return ERR_PTR(-EINVAL);
|
goto out;
|
||||||
}
|
}
|
||||||
if (acl == ERR_PTR(-EAGAIN))
|
if (IS_ERR(acl))
|
||||||
acl = ERR_PTR(-EAGAIN);
|
acl = ERR_PTR(-EAGAIN);
|
||||||
else
|
else
|
||||||
acl = posix_acl_dup(acl);
|
acl = posix_acl_dup(acl);
|
||||||
|
out:
|
||||||
spin_unlock(&inode->i_lock);
|
spin_unlock(&inode->i_lock);
|
||||||
dprintk("NFS: nfs3_get_cached_acl(%s/%ld, %d) = %p\n", inode->i_sb->s_id,
|
dprintk("NFS: nfs3_get_cached_acl(%s/%ld, %d) = %p\n", inode->i_sb->s_id,
|
||||||
inode->i_ino, type, acl);
|
inode->i_ino, type, acl);
|
||||||
|
|
Loading…
Reference in a new issue