|
@@ -1160,7 +1160,7 @@ static int jfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|
|
rc = dtModify(tid, new_dir, &new_dname, &ino,
|
|
|
old_ip->i_ino, JFS_RENAME);
|
|
|
if (rc)
|
|
|
- goto out4;
|
|
|
+ goto out_tx;
|
|
|
drop_nlink(new_ip);
|
|
|
if (S_ISDIR(new_ip->i_mode)) {
|
|
|
drop_nlink(new_ip);
|
|
@@ -1185,7 +1185,7 @@ static int jfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|
|
if ((new_size = commitZeroLink(tid, new_ip)) < 0) {
|
|
|
txAbort(tid, 1); /* Marks FS Dirty */
|
|
|
rc = new_size;
|
|
|
- goto out4;
|
|
|
+ goto out_tx;
|
|
|
}
|
|
|
tblk = tid_to_tblock(tid);
|
|
|
tblk->xflag |= COMMIT_DELETE;
|
|
@@ -1203,7 +1203,7 @@ static int jfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|
|
if (rc) {
|
|
|
jfs_err("jfs_rename didn't expect dtSearch to fail "
|
|
|
"w/rc = %d", rc);
|
|
|
- goto out4;
|
|
|
+ goto out_tx;
|
|
|
}
|
|
|
|
|
|
ino = old_ip->i_ino;
|
|
@@ -1211,7 +1211,7 @@ static int jfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|
|
if (rc) {
|
|
|
if (rc == -EIO)
|
|
|
jfs_err("jfs_rename: dtInsert returned -EIO");
|
|
|
- goto out4;
|
|
|
+ goto out_tx;
|
|
|
}
|
|
|
if (S_ISDIR(old_ip->i_mode))
|
|
|
inc_nlink(new_dir);
|
|
@@ -1226,7 +1226,7 @@ static int jfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|
|
jfs_err("jfs_rename did not expect dtDelete to return rc = %d",
|
|
|
rc);
|
|
|
txAbort(tid, 1); /* Marks Filesystem dirty */
|
|
|
- goto out4;
|
|
|
+ goto out_tx;
|
|
|
}
|
|
|
if (S_ISDIR(old_ip->i_mode)) {
|
|
|
drop_nlink(old_dir);
|
|
@@ -1285,7 +1285,7 @@ static int jfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|
|
|
|
|
rc = txCommit(tid, ipcount, iplist, commit_flag);
|
|
|
|
|
|
- out4:
|
|
|
+ out_tx:
|
|
|
txEnd(tid);
|
|
|
if (new_ip)
|
|
|
mutex_unlock(&JFS_IP(new_ip)->commit_mutex);
|
|
@@ -1308,13 +1308,6 @@ static int jfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|
|
}
|
|
|
if (new_ip && (new_ip->i_nlink == 0))
|
|
|
set_cflag(COMMIT_Nolink, new_ip);
|
|
|
- out3:
|
|
|
- free_UCSname(&new_dname);
|
|
|
- out2:
|
|
|
- free_UCSname(&old_dname);
|
|
|
- out1:
|
|
|
- if (new_ip && !S_ISDIR(new_ip->i_mode))
|
|
|
- IWRITE_UNLOCK(new_ip);
|
|
|
/*
|
|
|
* Truncating the directory index table is not guaranteed. It
|
|
|
* may need to be done iteratively
|
|
@@ -1325,7 +1318,13 @@ static int jfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|
|
|
|
|
clear_cflag(COMMIT_Stale, old_dir);
|
|
|
}
|
|
|
-
|
|
|
+ if (new_ip && !S_ISDIR(new_ip->i_mode))
|
|
|
+ IWRITE_UNLOCK(new_ip);
|
|
|
+ out3:
|
|
|
+ free_UCSname(&new_dname);
|
|
|
+ out2:
|
|
|
+ free_UCSname(&old_dname);
|
|
|
+ out1:
|
|
|
jfs_info("jfs_rename: returning %d", rc);
|
|
|
return rc;
|
|
|
}
|