1147 mutex_lock_nested(&JFS_IP(new_dir)->commit_mutex, COMMIT_MUTEX_PARENT);
1148 mutex_lock_nested(&JFS_IP(old_ip)->commit_mutex, COMMIT_MUTEX_CHILD);
1149 if (old_dir != new_dir)
1150 mutex_lock_nested(&JFS_IP(old_dir)->commit_mutex,
1151 COMMIT_MUTEX_SECOND_PARENT);
1152
1153 if (new_ip) {
1154 mutex_lock_nested(&JFS_IP(new_ip)->commit_mutex,
1155 COMMIT_MUTEX_VICTIM);
1156
1157
1158
1159 ino = new_ip->i_ino;
1160 rc = dtModify(tid, new_dir, &new_dname, &ino,
1161 old_ip->i_ino, JFS_RENAME);
1162 if (rc)
1163 goto out4;
1164 drop_nlink(new_ip);
1165 if (S_ISDIR(new_ip->i_mode)) {
1166 drop_nlink(new_ip);
1167 if (new_ip->i_nlink) {
1168 mutex_unlock(&JFS_IP(new_ip)->commit_mutex);
1169 if (old_dir != new_dir)
1170 mutex_unlock(&JFS_IP(old_dir)->commit_mutex);
1171 mutex_unlock(&JFS_IP(old_ip)->commit_mutex);
1172 mutex_unlock(&JFS_IP(new_dir)->commit_mutex);
1173 if (!S_ISDIR(old_ip->i_mode) && new_ip)
1174 IWRITE_UNLOCK(new_ip);
1175 jfs_error(new_ip->i_sb,
1176 "jfs_rename: new_ip->i_nlink != 0");
1177 return -EIO;
1178 }
1179 tblk = tid_to_tblock(tid);
1180 tblk->xflag |= COMMIT_DELETE;
1181 tblk->u.ip = new_ip;
1182 } else if (new_ip->i_nlink == 0) {
1183 assert(!test_cflag(COMMIT_Nolink, new_ip));
1184
1185 if ((new_size = commitZeroLink(tid, new_ip)) < 0) {
1186 txAbort(tid, 1);
1187 rc = new_size;