提交 1b83d707 编写于 作者: T Trond Myklebust

NFS: Protect inode->i_nlink updates using inode->i_lock

Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
上级 d67d1c7b
...@@ -870,6 +870,14 @@ static int nfs_dentry_delete(struct dentry *dentry) ...@@ -870,6 +870,14 @@ static int nfs_dentry_delete(struct dentry *dentry)
} }
static void nfs_drop_nlink(struct inode *inode)
{
spin_lock(&inode->i_lock);
if (inode->i_nlink > 0)
drop_nlink(inode);
spin_unlock(&inode->i_lock);
}
/* /*
* Called when the dentry loses inode. * Called when the dentry loses inode.
* We use it to clean up silly-renamed files. * We use it to clean up silly-renamed files.
...@@ -1420,7 +1428,7 @@ static int nfs_safe_remove(struct dentry *dentry) ...@@ -1420,7 +1428,7 @@ static int nfs_safe_remove(struct dentry *dentry)
error = NFS_PROTO(dir)->remove(dir, &dentry->d_name); error = NFS_PROTO(dir)->remove(dir, &dentry->d_name);
/* The VFS may want to delete this inode */ /* The VFS may want to delete this inode */
if (error == 0) if (error == 0)
drop_nlink(inode); nfs_drop_nlink(inode);
nfs_mark_for_revalidate(inode); nfs_mark_for_revalidate(inode);
} else } else
error = NFS_PROTO(dir)->remove(dir, &dentry->d_name); error = NFS_PROTO(dir)->remove(dir, &dentry->d_name);
...@@ -1647,7 +1655,7 @@ static int nfs_rename(struct inode *old_dir, struct dentry *old_dentry, ...@@ -1647,7 +1655,7 @@ static int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
/* dentry still busy? */ /* dentry still busy? */
goto out; goto out;
} else } else
drop_nlink(new_inode); nfs_drop_nlink(new_inode);
go_ahead: go_ahead:
/* /*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册