diff options
Diffstat (limited to 'fs/ocfs2/namei.c')
-rw-r--r-- | fs/ocfs2/namei.c | 101 |
1 files changed, 37 insertions, 64 deletions
diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c index d5d808fe0140..485a6aa0ad39 100644 --- a/fs/ocfs2/namei.c +++ b/fs/ocfs2/namei.c | |||
@@ -60,6 +60,7 @@ | |||
60 | #include "symlink.h" | 60 | #include "symlink.h" |
61 | #include "sysfile.h" | 61 | #include "sysfile.h" |
62 | #include "uptodate.h" | 62 | #include "uptodate.h" |
63 | #include "xattr.h" | ||
63 | 64 | ||
64 | #include "buffer_head_io.h" | 65 | #include "buffer_head_io.h" |
65 | 66 | ||
@@ -327,14 +328,9 @@ leave: | |||
327 | if (status == -ENOSPC) | 328 | if (status == -ENOSPC) |
328 | mlog(0, "Disk is full\n"); | 329 | mlog(0, "Disk is full\n"); |
329 | 330 | ||
330 | if (new_fe_bh) | 331 | brelse(new_fe_bh); |
331 | brelse(new_fe_bh); | 332 | brelse(de_bh); |
332 | 333 | brelse(parent_fe_bh); | |
333 | if (de_bh) | ||
334 | brelse(de_bh); | ||
335 | |||
336 | if (parent_fe_bh) | ||
337 | brelse(parent_fe_bh); | ||
338 | 334 | ||
339 | if ((status < 0) && inode) | 335 | if ((status < 0) && inode) |
340 | iput(inode); | 336 | iput(inode); |
@@ -647,12 +643,9 @@ out_unlock_inode: | |||
647 | out: | 643 | out: |
648 | ocfs2_inode_unlock(dir, 1); | 644 | ocfs2_inode_unlock(dir, 1); |
649 | 645 | ||
650 | if (de_bh) | 646 | brelse(de_bh); |
651 | brelse(de_bh); | 647 | brelse(fe_bh); |
652 | if (fe_bh) | 648 | brelse(parent_fe_bh); |
653 | brelse(fe_bh); | ||
654 | if (parent_fe_bh) | ||
655 | brelse(parent_fe_bh); | ||
656 | 649 | ||
657 | mlog_exit(err); | 650 | mlog_exit(err); |
658 | 651 | ||
@@ -851,17 +844,10 @@ leave: | |||
851 | iput(orphan_dir); | 844 | iput(orphan_dir); |
852 | } | 845 | } |
853 | 846 | ||
854 | if (fe_bh) | 847 | brelse(fe_bh); |
855 | brelse(fe_bh); | 848 | brelse(dirent_bh); |
856 | 849 | brelse(parent_node_bh); | |
857 | if (dirent_bh) | 850 | brelse(orphan_entry_bh); |
858 | brelse(dirent_bh); | ||
859 | |||
860 | if (parent_node_bh) | ||
861 | brelse(parent_node_bh); | ||
862 | |||
863 | if (orphan_entry_bh) | ||
864 | brelse(orphan_entry_bh); | ||
865 | 851 | ||
866 | mlog_exit(status); | 852 | mlog_exit(status); |
867 | 853 | ||
@@ -1372,24 +1358,15 @@ bail: | |||
1372 | 1358 | ||
1373 | if (new_inode) | 1359 | if (new_inode) |
1374 | iput(new_inode); | 1360 | iput(new_inode); |
1375 | if (newfe_bh) | 1361 | brelse(newfe_bh); |
1376 | brelse(newfe_bh); | 1362 | brelse(old_inode_bh); |
1377 | if (old_inode_bh) | 1363 | brelse(old_dir_bh); |
1378 | brelse(old_inode_bh); | 1364 | brelse(new_dir_bh); |
1379 | if (old_dir_bh) | 1365 | brelse(new_de_bh); |
1380 | brelse(old_dir_bh); | 1366 | brelse(old_de_bh); |
1381 | if (new_dir_bh) | 1367 | brelse(old_inode_de_bh); |
1382 | brelse(new_dir_bh); | 1368 | brelse(orphan_entry_bh); |
1383 | if (new_de_bh) | 1369 | brelse(insert_entry_bh); |
1384 | brelse(new_de_bh); | ||
1385 | if (old_de_bh) | ||
1386 | brelse(old_de_bh); | ||
1387 | if (old_inode_de_bh) | ||
1388 | brelse(old_inode_de_bh); | ||
1389 | if (orphan_entry_bh) | ||
1390 | brelse(orphan_entry_bh); | ||
1391 | if (insert_entry_bh) | ||
1392 | brelse(insert_entry_bh); | ||
1393 | 1370 | ||
1394 | mlog_exit(status); | 1371 | mlog_exit(status); |
1395 | 1372 | ||
@@ -1492,8 +1469,7 @@ bail: | |||
1492 | 1469 | ||
1493 | if (bhs) { | 1470 | if (bhs) { |
1494 | for(i = 0; i < blocks; i++) | 1471 | for(i = 0; i < blocks; i++) |
1495 | if (bhs[i]) | 1472 | brelse(bhs[i]); |
1496 | brelse(bhs[i]); | ||
1497 | kfree(bhs); | 1473 | kfree(bhs); |
1498 | } | 1474 | } |
1499 | 1475 | ||
@@ -1598,10 +1574,10 @@ static int ocfs2_symlink(struct inode *dir, | |||
1598 | u32 offset = 0; | 1574 | u32 offset = 0; |
1599 | 1575 | ||
1600 | inode->i_op = &ocfs2_symlink_inode_operations; | 1576 | inode->i_op = &ocfs2_symlink_inode_operations; |
1601 | status = ocfs2_do_extend_allocation(osb, inode, &offset, 1, 0, | 1577 | status = ocfs2_add_inode_data(osb, inode, &offset, 1, 0, |
1602 | new_fe_bh, | 1578 | new_fe_bh, |
1603 | handle, data_ac, NULL, | 1579 | handle, data_ac, NULL, |
1604 | NULL); | 1580 | NULL); |
1605 | if (status < 0) { | 1581 | if (status < 0) { |
1606 | if (status != -ENOSPC && status != -EINTR) { | 1582 | if (status != -ENOSPC && status != -EINTR) { |
1607 | mlog(ML_ERROR, | 1583 | mlog(ML_ERROR, |
@@ -1659,12 +1635,9 @@ bail: | |||
1659 | 1635 | ||
1660 | ocfs2_inode_unlock(dir, 1); | 1636 | ocfs2_inode_unlock(dir, 1); |
1661 | 1637 | ||
1662 | if (new_fe_bh) | 1638 | brelse(new_fe_bh); |
1663 | brelse(new_fe_bh); | 1639 | brelse(parent_fe_bh); |
1664 | if (parent_fe_bh) | 1640 | brelse(de_bh); |
1665 | brelse(parent_fe_bh); | ||
1666 | if (de_bh) | ||
1667 | brelse(de_bh); | ||
1668 | if (inode_ac) | 1641 | if (inode_ac) |
1669 | ocfs2_free_alloc_context(inode_ac); | 1642 | ocfs2_free_alloc_context(inode_ac); |
1670 | if (data_ac) | 1643 | if (data_ac) |
@@ -1759,8 +1732,7 @@ leave: | |||
1759 | iput(orphan_dir_inode); | 1732 | iput(orphan_dir_inode); |
1760 | } | 1733 | } |
1761 | 1734 | ||
1762 | if (orphan_dir_bh) | 1735 | brelse(orphan_dir_bh); |
1763 | brelse(orphan_dir_bh); | ||
1764 | 1736 | ||
1765 | mlog_exit(status); | 1737 | mlog_exit(status); |
1766 | return status; | 1738 | return status; |
@@ -1780,10 +1752,9 @@ static int ocfs2_orphan_add(struct ocfs2_super *osb, | |||
1780 | 1752 | ||
1781 | mlog_entry("(inode->i_ino = %lu)\n", inode->i_ino); | 1753 | mlog_entry("(inode->i_ino = %lu)\n", inode->i_ino); |
1782 | 1754 | ||
1783 | status = ocfs2_read_block(osb, | 1755 | status = ocfs2_read_block(orphan_dir_inode, |
1784 | OCFS2_I(orphan_dir_inode)->ip_blkno, | 1756 | OCFS2_I(orphan_dir_inode)->ip_blkno, |
1785 | &orphan_dir_bh, OCFS2_BH_CACHED, | 1757 | &orphan_dir_bh); |
1786 | orphan_dir_inode); | ||
1787 | if (status < 0) { | 1758 | if (status < 0) { |
1788 | mlog_errno(status); | 1759 | mlog_errno(status); |
1789 | goto leave; | 1760 | goto leave; |
@@ -1829,8 +1800,7 @@ static int ocfs2_orphan_add(struct ocfs2_super *osb, | |||
1829 | (unsigned long long)OCFS2_I(inode)->ip_blkno, osb->slot_num); | 1800 | (unsigned long long)OCFS2_I(inode)->ip_blkno, osb->slot_num); |
1830 | 1801 | ||
1831 | leave: | 1802 | leave: |
1832 | if (orphan_dir_bh) | 1803 | brelse(orphan_dir_bh); |
1833 | brelse(orphan_dir_bh); | ||
1834 | 1804 | ||
1835 | mlog_exit(status); | 1805 | mlog_exit(status); |
1836 | return status; | 1806 | return status; |
@@ -1898,8 +1868,7 @@ int ocfs2_orphan_del(struct ocfs2_super *osb, | |||
1898 | } | 1868 | } |
1899 | 1869 | ||
1900 | leave: | 1870 | leave: |
1901 | if (target_de_bh) | 1871 | brelse(target_de_bh); |
1902 | brelse(target_de_bh); | ||
1903 | 1872 | ||
1904 | mlog_exit(status); | 1873 | mlog_exit(status); |
1905 | return status; | 1874 | return status; |
@@ -1918,4 +1887,8 @@ const struct inode_operations ocfs2_dir_iops = { | |||
1918 | .setattr = ocfs2_setattr, | 1887 | .setattr = ocfs2_setattr, |
1919 | .getattr = ocfs2_getattr, | 1888 | .getattr = ocfs2_getattr, |
1920 | .permission = ocfs2_permission, | 1889 | .permission = ocfs2_permission, |
1890 | .setxattr = generic_setxattr, | ||
1891 | .getxattr = generic_getxattr, | ||
1892 | .listxattr = ocfs2_listxattr, | ||
1893 | .removexattr = generic_removexattr, | ||
1921 | }; | 1894 | }; |