nfsd race fixes: jfs
jfs version of Al Viro's nfsd race patches
Signed-off-by: Dave Kleikamp <shaggy@linux.vnet.ibm.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
diff --git a/fs/jfs/namei.c b/fs/jfs/namei.c
index cc3cedff..b4de56b 100644
--- a/fs/jfs/namei.c
+++ b/fs/jfs/namei.c
@@ -155,7 +155,6 @@
ip->i_fop = &jfs_file_operations;
ip->i_mapping->a_ops = &jfs_aops;
- insert_inode_hash(ip);
mark_inode_dirty(ip);
dip->i_ctime = dip->i_mtime = CURRENT_TIME;
@@ -171,9 +170,12 @@
if (rc) {
free_ea_wmap(ip);
ip->i_nlink = 0;
+ unlock_new_inode(ip);
iput(ip);
- } else
+ } else {
d_instantiate(dentry, ip);
+ unlock_new_inode(ip);
+ }
out2:
free_UCSname(&dname);
@@ -289,7 +291,6 @@
ip->i_op = &jfs_dir_inode_operations;
ip->i_fop = &jfs_dir_operations;
- insert_inode_hash(ip);
mark_inode_dirty(ip);
/* update parent directory inode */
@@ -306,9 +307,12 @@
if (rc) {
free_ea_wmap(ip);
ip->i_nlink = 0;
+ unlock_new_inode(ip);
iput(ip);
- } else
+ } else {
d_instantiate(dentry, ip);
+ unlock_new_inode(ip);
+ }
out2:
free_UCSname(&dname);
@@ -1019,7 +1023,6 @@
goto out3;
}
- insert_inode_hash(ip);
mark_inode_dirty(ip);
dip->i_ctime = dip->i_mtime = CURRENT_TIME;
@@ -1039,9 +1042,12 @@
if (rc) {
free_ea_wmap(ip);
ip->i_nlink = 0;
+ unlock_new_inode(ip);
iput(ip);
- } else
+ } else {
d_instantiate(dentry, ip);
+ unlock_new_inode(ip);
+ }
out2:
free_UCSname(&dname);
@@ -1399,7 +1405,6 @@
jfs_ip->dev = new_encode_dev(rdev);
init_special_inode(ip, ip->i_mode, rdev);
- insert_inode_hash(ip);
mark_inode_dirty(ip);
dir->i_ctime = dir->i_mtime = CURRENT_TIME;
@@ -1417,9 +1422,12 @@
if (rc) {
free_ea_wmap(ip);
ip->i_nlink = 0;
+ unlock_new_inode(ip);
iput(ip);
- } else
+ } else {
d_instantiate(dentry, ip);
+ unlock_new_inode(ip);
+ }
out1:
free_UCSname(&dname);