@@ -1324,8 +1324,8 @@ static int reiserfs_rename(struct mnt_idmap *idmap,
1324
1324
struct inode * old_inode , * new_dentry_inode ;
1325
1325
struct reiserfs_transaction_handle th ;
1326
1326
int jbegin_count ;
1327
- umode_t old_inode_mode ;
1328
1327
unsigned long savelink = 1 ;
1328
+ bool update_dir_parent = false;
1329
1329
1330
1330
if (flags & ~RENAME_NOREPLACE )
1331
1331
return - EINVAL ;
@@ -1375,8 +1375,7 @@ static int reiserfs_rename(struct mnt_idmap *idmap,
1375
1375
return - ENOENT ;
1376
1376
}
1377
1377
1378
- old_inode_mode = old_inode -> i_mode ;
1379
- if (S_ISDIR (old_inode_mode )) {
1378
+ if (S_ISDIR (old_inode -> i_mode )) {
1380
1379
/*
1381
1380
* make sure that directory being renamed has correct ".."
1382
1381
* and that its new parent directory has not too many links
@@ -1389,24 +1388,28 @@ static int reiserfs_rename(struct mnt_idmap *idmap,
1389
1388
}
1390
1389
}
1391
1390
1392
- /*
1393
- * directory is renamed, its parent directory will be changed,
1394
- * so find ".." entry
1395
- */
1396
- dot_dot_de .de_gen_number_bit_string = NULL ;
1397
- retval =
1398
- reiserfs_find_entry (old_inode , ".." , 2 , & dot_dot_entry_path ,
1391
+ if (old_dir != new_dir ) {
1392
+ /*
1393
+ * directory is renamed, its parent directory will be
1394
+ * changed, so find ".." entry
1395
+ */
1396
+ dot_dot_de .de_gen_number_bit_string = NULL ;
1397
+ retval =
1398
+ reiserfs_find_entry (old_inode , ".." , 2 ,
1399
+ & dot_dot_entry_path ,
1399
1400
& dot_dot_de );
1400
- pathrelse (& dot_dot_entry_path );
1401
- if (retval != NAME_FOUND ) {
1402
- reiserfs_write_unlock (old_dir -> i_sb );
1403
- return - EIO ;
1404
- }
1401
+ pathrelse (& dot_dot_entry_path );
1402
+ if (retval != NAME_FOUND ) {
1403
+ reiserfs_write_unlock (old_dir -> i_sb );
1404
+ return - EIO ;
1405
+ }
1405
1406
1406
- /* inode number of .. must equal old_dir->i_ino */
1407
- if (dot_dot_de .de_objectid != old_dir -> i_ino ) {
1408
- reiserfs_write_unlock (old_dir -> i_sb );
1409
- return - EIO ;
1407
+ /* inode number of .. must equal old_dir->i_ino */
1408
+ if (dot_dot_de .de_objectid != old_dir -> i_ino ) {
1409
+ reiserfs_write_unlock (old_dir -> i_sb );
1410
+ return - EIO ;
1411
+ }
1412
+ update_dir_parent = true;
1410
1413
}
1411
1414
}
1412
1415
@@ -1486,7 +1489,7 @@ static int reiserfs_rename(struct mnt_idmap *idmap,
1486
1489
1487
1490
reiserfs_prepare_for_journal (old_inode -> i_sb , new_de .de_bh , 1 );
1488
1491
1489
- if (S_ISDIR ( old_inode -> i_mode ) ) {
1492
+ if (update_dir_parent ) {
1490
1493
if ((retval =
1491
1494
search_by_entry_key (new_dir -> i_sb ,
1492
1495
& dot_dot_de .de_entry_key ,
@@ -1534,14 +1537,14 @@ static int reiserfs_rename(struct mnt_idmap *idmap,
1534
1537
new_de .de_bh );
1535
1538
reiserfs_restore_prepared_buffer (old_inode -> i_sb ,
1536
1539
old_de .de_bh );
1537
- if (S_ISDIR ( old_inode_mode ) )
1540
+ if (update_dir_parent )
1538
1541
reiserfs_restore_prepared_buffer (old_inode ->
1539
1542
i_sb ,
1540
1543
dot_dot_de .
1541
1544
de_bh );
1542
1545
continue ;
1543
1546
}
1544
- if (S_ISDIR ( old_inode_mode ) ) {
1547
+ if (update_dir_parent ) {
1545
1548
if (item_moved (& dot_dot_ih , & dot_dot_entry_path ) ||
1546
1549
!entry_points_to_object (".." , 2 , & dot_dot_de ,
1547
1550
old_dir )) {
@@ -1559,7 +1562,7 @@ static int reiserfs_rename(struct mnt_idmap *idmap,
1559
1562
}
1560
1563
}
1561
1564
1562
- RFALSE (S_ISDIR ( old_inode_mode ) &&
1565
+ RFALSE (update_dir_parent &&
1563
1566
!buffer_journal_prepared (dot_dot_de .de_bh ), "" );
1564
1567
1565
1568
break ;
@@ -1592,11 +1595,12 @@ static int reiserfs_rename(struct mnt_idmap *idmap,
1592
1595
savelink = new_dentry_inode -> i_nlink ;
1593
1596
}
1594
1597
1595
- if (S_ISDIR ( old_inode_mode ) ) {
1598
+ if (update_dir_parent ) {
1596
1599
/* adjust ".." of renamed directory */
1597
1600
set_ino_in_dir_entry (& dot_dot_de , INODE_PKEY (new_dir ));
1598
1601
journal_mark_dirty (& th , dot_dot_de .de_bh );
1599
-
1602
+ }
1603
+ if (S_ISDIR (old_inode -> i_mode )) {
1600
1604
/*
1601
1605
* there (in new_dir) was no directory, so it got new link
1602
1606
* (".." of renamed directory)
0 commit comments