diff options
Diffstat (limited to 'fs/reiserfs/inode.c')
| -rw-r--r-- | fs/reiserfs/inode.c | 9 | 
1 files changed, 7 insertions, 2 deletions
| diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c index 77d6d47abc83..f844533792ee 100644 --- a/fs/reiserfs/inode.c +++ b/fs/reiserfs/inode.c @@ -1811,11 +1811,16 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th,  				  TYPE_STAT_DATA, SD_SIZE, MAX_US_INT);  	memcpy(INODE_PKEY(inode), &(ih.ih_key), KEY_SIZE);  	args.dirid = le32_to_cpu(ih.ih_key.k_dir_id); -	if (insert_inode_locked4(inode, args.objectid, -			     reiserfs_find_actor, &args) < 0) { + +	reiserfs_write_unlock(inode->i_sb); +	err = insert_inode_locked4(inode, args.objectid, +			     reiserfs_find_actor, &args); +	reiserfs_write_lock(inode->i_sb); +	if (err) {  		err = -EINVAL;  		goto out_bad_inode;  	} +  	if (old_format_only(sb))  		/* not a perfect generation count, as object ids can be reused, but  		 ** this is as good as reiserfs can do right now. |