diff options
Diffstat (limited to 'fs/ext4/namei.c')
-rw-r--r-- | fs/ext4/namei.c | 96 |
1 files changed, 52 insertions, 44 deletions
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index 9fd2a5e1be4d..fec0b4c2f5f1 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c | |||
@@ -74,10 +74,6 @@ static struct buffer_head *ext4_append(handle_t *handle, | |||
74 | #define assert(test) J_ASSERT(test) | 74 | #define assert(test) J_ASSERT(test) |
75 | #endif | 75 | #endif |
76 | 76 | ||
77 | #ifndef swap | ||
78 | #define swap(x, y) do { typeof(x) z = x; x = y; y = z; } while (0) | ||
79 | #endif | ||
80 | |||
81 | #ifdef DX_DEBUG | 77 | #ifdef DX_DEBUG |
82 | #define dxtrace(command) command | 78 | #define dxtrace(command) command |
83 | #else | 79 | #else |
@@ -372,6 +368,8 @@ dx_probe(const struct qstr *d_name, struct inode *dir, | |||
372 | goto fail; | 368 | goto fail; |
373 | } | 369 | } |
374 | hinfo->hash_version = root->info.hash_version; | 370 | hinfo->hash_version = root->info.hash_version; |
371 | if (hinfo->hash_version <= DX_HASH_TEA) | ||
372 | hinfo->hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned; | ||
375 | hinfo->seed = EXT4_SB(dir->i_sb)->s_hash_seed; | 373 | hinfo->seed = EXT4_SB(dir->i_sb)->s_hash_seed; |
376 | if (d_name) | 374 | if (d_name) |
377 | ext4fs_dirhash(d_name->name, d_name->len, hinfo); | 375 | ext4fs_dirhash(d_name->name, d_name->len, hinfo); |
@@ -641,6 +639,9 @@ int ext4_htree_fill_tree(struct file *dir_file, __u32 start_hash, | |||
641 | dir = dir_file->f_path.dentry->d_inode; | 639 | dir = dir_file->f_path.dentry->d_inode; |
642 | if (!(EXT4_I(dir)->i_flags & EXT4_INDEX_FL)) { | 640 | if (!(EXT4_I(dir)->i_flags & EXT4_INDEX_FL)) { |
643 | hinfo.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version; | 641 | hinfo.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version; |
642 | if (hinfo.hash_version <= DX_HASH_TEA) | ||
643 | hinfo.hash_version += | ||
644 | EXT4_SB(dir->i_sb)->s_hash_unsigned; | ||
644 | hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed; | 645 | hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed; |
645 | count = htree_dirblock_to_tree(dir_file, dir, 0, &hinfo, | 646 | count = htree_dirblock_to_tree(dir_file, dir, 0, &hinfo, |
646 | start_hash, start_minor_hash); | 647 | start_hash, start_minor_hash); |
@@ -806,7 +807,7 @@ static inline int ext4_match (int len, const char * const name, | |||
806 | static inline int search_dirblock(struct buffer_head *bh, | 807 | static inline int search_dirblock(struct buffer_head *bh, |
807 | struct inode *dir, | 808 | struct inode *dir, |
808 | const struct qstr *d_name, | 809 | const struct qstr *d_name, |
809 | unsigned long offset, | 810 | unsigned int offset, |
810 | struct ext4_dir_entry_2 ** res_dir) | 811 | struct ext4_dir_entry_2 ** res_dir) |
811 | { | 812 | { |
812 | struct ext4_dir_entry_2 * de; | 813 | struct ext4_dir_entry_2 * de; |
@@ -1043,11 +1044,11 @@ static struct dentry *ext4_lookup(struct inode *dir, struct dentry *dentry, stru | |||
1043 | bh = ext4_find_entry(dir, &dentry->d_name, &de); | 1044 | bh = ext4_find_entry(dir, &dentry->d_name, &de); |
1044 | inode = NULL; | 1045 | inode = NULL; |
1045 | if (bh) { | 1046 | if (bh) { |
1046 | unsigned long ino = le32_to_cpu(de->inode); | 1047 | __u32 ino = le32_to_cpu(de->inode); |
1047 | brelse(bh); | 1048 | brelse(bh); |
1048 | if (!ext4_valid_inum(dir->i_sb, ino)) { | 1049 | if (!ext4_valid_inum(dir->i_sb, ino)) { |
1049 | ext4_error(dir->i_sb, "ext4_lookup", | 1050 | ext4_error(dir->i_sb, "ext4_lookup", |
1050 | "bad inode number: %lu", ino); | 1051 | "bad inode number: %u", ino); |
1051 | return ERR_PTR(-EIO); | 1052 | return ERR_PTR(-EIO); |
1052 | } | 1053 | } |
1053 | inode = ext4_iget(dir->i_sb, ino); | 1054 | inode = ext4_iget(dir->i_sb, ino); |
@@ -1060,7 +1061,7 @@ static struct dentry *ext4_lookup(struct inode *dir, struct dentry *dentry, stru | |||
1060 | 1061 | ||
1061 | struct dentry *ext4_get_parent(struct dentry *child) | 1062 | struct dentry *ext4_get_parent(struct dentry *child) |
1062 | { | 1063 | { |
1063 | unsigned long ino; | 1064 | __u32 ino; |
1064 | struct inode *inode; | 1065 | struct inode *inode; |
1065 | static const struct qstr dotdot = { | 1066 | static const struct qstr dotdot = { |
1066 | .name = "..", | 1067 | .name = "..", |
@@ -1078,7 +1079,7 @@ struct dentry *ext4_get_parent(struct dentry *child) | |||
1078 | 1079 | ||
1079 | if (!ext4_valid_inum(child->d_inode->i_sb, ino)) { | 1080 | if (!ext4_valid_inum(child->d_inode->i_sb, ino)) { |
1080 | ext4_error(child->d_inode->i_sb, "ext4_get_parent", | 1081 | ext4_error(child->d_inode->i_sb, "ext4_get_parent", |
1081 | "bad inode number: %lu", ino); | 1082 | "bad inode number: %u", ino); |
1082 | return ERR_PTR(-EIO); | 1083 | return ERR_PTR(-EIO); |
1083 | } | 1084 | } |
1084 | 1085 | ||
@@ -1166,9 +1167,9 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir, | |||
1166 | u32 hash2; | 1167 | u32 hash2; |
1167 | struct dx_map_entry *map; | 1168 | struct dx_map_entry *map; |
1168 | char *data1 = (*bh)->b_data, *data2; | 1169 | char *data1 = (*bh)->b_data, *data2; |
1169 | unsigned split, move, size, i; | 1170 | unsigned split, move, size; |
1170 | struct ext4_dir_entry_2 *de = NULL, *de2; | 1171 | struct ext4_dir_entry_2 *de = NULL, *de2; |
1171 | int err = 0; | 1172 | int err = 0, i; |
1172 | 1173 | ||
1173 | bh2 = ext4_append (handle, dir, &newblock, &err); | 1174 | bh2 = ext4_append (handle, dir, &newblock, &err); |
1174 | if (!(bh2)) { | 1175 | if (!(bh2)) { |
@@ -1228,10 +1229,10 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir, | |||
1228 | de = de2; | 1229 | de = de2; |
1229 | } | 1230 | } |
1230 | dx_insert_block(frame, hash2 + continued, newblock); | 1231 | dx_insert_block(frame, hash2 + continued, newblock); |
1231 | err = ext4_journal_dirty_metadata(handle, bh2); | 1232 | err = ext4_handle_dirty_metadata(handle, dir, bh2); |
1232 | if (err) | 1233 | if (err) |
1233 | goto journal_error; | 1234 | goto journal_error; |
1234 | err = ext4_journal_dirty_metadata(handle, frame->bh); | 1235 | err = ext4_handle_dirty_metadata(handle, dir, frame->bh); |
1235 | if (err) | 1236 | if (err) |
1236 | goto journal_error; | 1237 | goto journal_error; |
1237 | brelse(bh2); | 1238 | brelse(bh2); |
@@ -1266,7 +1267,7 @@ static int add_dirent_to_buf(handle_t *handle, struct dentry *dentry, | |||
1266 | struct inode *dir = dentry->d_parent->d_inode; | 1267 | struct inode *dir = dentry->d_parent->d_inode; |
1267 | const char *name = dentry->d_name.name; | 1268 | const char *name = dentry->d_name.name; |
1268 | int namelen = dentry->d_name.len; | 1269 | int namelen = dentry->d_name.len; |
1269 | unsigned long offset = 0; | 1270 | unsigned int offset = 0; |
1270 | unsigned short reclen; | 1271 | unsigned short reclen; |
1271 | int nlen, rlen, err; | 1272 | int nlen, rlen, err; |
1272 | char *top; | 1273 | char *top; |
@@ -1335,8 +1336,8 @@ static int add_dirent_to_buf(handle_t *handle, struct dentry *dentry, | |||
1335 | ext4_update_dx_flag(dir); | 1336 | ext4_update_dx_flag(dir); |
1336 | dir->i_version++; | 1337 | dir->i_version++; |
1337 | ext4_mark_inode_dirty(handle, dir); | 1338 | ext4_mark_inode_dirty(handle, dir); |
1338 | BUFFER_TRACE(bh, "call ext4_journal_dirty_metadata"); | 1339 | BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata"); |
1339 | err = ext4_journal_dirty_metadata(handle, bh); | 1340 | err = ext4_handle_dirty_metadata(handle, dir, bh); |
1340 | if (err) | 1341 | if (err) |
1341 | ext4_std_error(dir->i_sb, err); | 1342 | ext4_std_error(dir->i_sb, err); |
1342 | brelse(bh); | 1343 | brelse(bh); |
@@ -1408,6 +1409,8 @@ static int make_indexed_dir(handle_t *handle, struct dentry *dentry, | |||
1408 | 1409 | ||
1409 | /* Initialize as for dx_probe */ | 1410 | /* Initialize as for dx_probe */ |
1410 | hinfo.hash_version = root->info.hash_version; | 1411 | hinfo.hash_version = root->info.hash_version; |
1412 | if (hinfo.hash_version <= DX_HASH_TEA) | ||
1413 | hinfo.hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned; | ||
1411 | hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed; | 1414 | hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed; |
1412 | ext4fs_dirhash(name, namelen, &hinfo); | 1415 | ext4fs_dirhash(name, namelen, &hinfo); |
1413 | frame = frames; | 1416 | frame = frames; |
@@ -1437,7 +1440,6 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry, | |||
1437 | struct inode *inode) | 1440 | struct inode *inode) |
1438 | { | 1441 | { |
1439 | struct inode *dir = dentry->d_parent->d_inode; | 1442 | struct inode *dir = dentry->d_parent->d_inode; |
1440 | unsigned long offset; | ||
1441 | struct buffer_head *bh; | 1443 | struct buffer_head *bh; |
1442 | struct ext4_dir_entry_2 *de; | 1444 | struct ext4_dir_entry_2 *de; |
1443 | struct super_block *sb; | 1445 | struct super_block *sb; |
@@ -1459,7 +1461,7 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry, | |||
1459 | ext4_mark_inode_dirty(handle, dir); | 1461 | ext4_mark_inode_dirty(handle, dir); |
1460 | } | 1462 | } |
1461 | blocks = dir->i_size >> sb->s_blocksize_bits; | 1463 | blocks = dir->i_size >> sb->s_blocksize_bits; |
1462 | for (block = 0, offset = 0; block < blocks; block++) { | 1464 | for (block = 0; block < blocks; block++) { |
1463 | bh = ext4_bread(handle, dir, block, 0, &retval); | 1465 | bh = ext4_bread(handle, dir, block, 0, &retval); |
1464 | if(!bh) | 1466 | if(!bh) |
1465 | return retval; | 1467 | return retval; |
@@ -1574,7 +1576,7 @@ static int ext4_dx_add_entry(handle_t *handle, struct dentry *dentry, | |||
1574 | dxtrace(dx_show_index("node", frames[1].entries)); | 1576 | dxtrace(dx_show_index("node", frames[1].entries)); |
1575 | dxtrace(dx_show_index("node", | 1577 | dxtrace(dx_show_index("node", |
1576 | ((struct dx_node *) bh2->b_data)->entries)); | 1578 | ((struct dx_node *) bh2->b_data)->entries)); |
1577 | err = ext4_journal_dirty_metadata(handle, bh2); | 1579 | err = ext4_handle_dirty_metadata(handle, inode, bh2); |
1578 | if (err) | 1580 | if (err) |
1579 | goto journal_error; | 1581 | goto journal_error; |
1580 | brelse (bh2); | 1582 | brelse (bh2); |
@@ -1600,7 +1602,7 @@ static int ext4_dx_add_entry(handle_t *handle, struct dentry *dentry, | |||
1600 | if (err) | 1602 | if (err) |
1601 | goto journal_error; | 1603 | goto journal_error; |
1602 | } | 1604 | } |
1603 | ext4_journal_dirty_metadata(handle, frames[0].bh); | 1605 | ext4_handle_dirty_metadata(handle, inode, frames[0].bh); |
1604 | } | 1606 | } |
1605 | de = do_split(handle, dir, &bh, frame, &hinfo, &err); | 1607 | de = do_split(handle, dir, &bh, frame, &hinfo, &err); |
1606 | if (!de) | 1608 | if (!de) |
@@ -1646,8 +1648,8 @@ static int ext4_delete_entry(handle_t *handle, | |||
1646 | else | 1648 | else |
1647 | de->inode = 0; | 1649 | de->inode = 0; |
1648 | dir->i_version++; | 1650 | dir->i_version++; |
1649 | BUFFER_TRACE(bh, "call ext4_journal_dirty_metadata"); | 1651 | BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata"); |
1650 | ext4_journal_dirty_metadata(handle, bh); | 1652 | ext4_handle_dirty_metadata(handle, dir, bh); |
1651 | return 0; | 1653 | return 0; |
1652 | } | 1654 | } |
1653 | i += ext4_rec_len_from_disk(de->rec_len); | 1655 | i += ext4_rec_len_from_disk(de->rec_len); |
@@ -1725,7 +1727,7 @@ retry: | |||
1725 | return PTR_ERR(handle); | 1727 | return PTR_ERR(handle); |
1726 | 1728 | ||
1727 | if (IS_DIRSYNC(dir)) | 1729 | if (IS_DIRSYNC(dir)) |
1728 | handle->h_sync = 1; | 1730 | ext4_handle_sync(handle); |
1729 | 1731 | ||
1730 | inode = ext4_new_inode (handle, dir, mode); | 1732 | inode = ext4_new_inode (handle, dir, mode); |
1731 | err = PTR_ERR(inode); | 1733 | err = PTR_ERR(inode); |
@@ -1759,7 +1761,7 @@ retry: | |||
1759 | return PTR_ERR(handle); | 1761 | return PTR_ERR(handle); |
1760 | 1762 | ||
1761 | if (IS_DIRSYNC(dir)) | 1763 | if (IS_DIRSYNC(dir)) |
1762 | handle->h_sync = 1; | 1764 | ext4_handle_sync(handle); |
1763 | 1765 | ||
1764 | inode = ext4_new_inode(handle, dir, mode); | 1766 | inode = ext4_new_inode(handle, dir, mode); |
1765 | err = PTR_ERR(inode); | 1767 | err = PTR_ERR(inode); |
@@ -1795,7 +1797,7 @@ retry: | |||
1795 | return PTR_ERR(handle); | 1797 | return PTR_ERR(handle); |
1796 | 1798 | ||
1797 | if (IS_DIRSYNC(dir)) | 1799 | if (IS_DIRSYNC(dir)) |
1798 | handle->h_sync = 1; | 1800 | ext4_handle_sync(handle); |
1799 | 1801 | ||
1800 | inode = ext4_new_inode(handle, dir, S_IFDIR | mode); | 1802 | inode = ext4_new_inode(handle, dir, S_IFDIR | mode); |
1801 | err = PTR_ERR(inode); | 1803 | err = PTR_ERR(inode); |
@@ -1824,8 +1826,8 @@ retry: | |||
1824 | strcpy(de->name, ".."); | 1826 | strcpy(de->name, ".."); |
1825 | ext4_set_de_type(dir->i_sb, de, S_IFDIR); | 1827 | ext4_set_de_type(dir->i_sb, de, S_IFDIR); |
1826 | inode->i_nlink = 2; | 1828 | inode->i_nlink = 2; |
1827 | BUFFER_TRACE(dir_block, "call ext4_journal_dirty_metadata"); | 1829 | BUFFER_TRACE(dir_block, "call ext4_handle_dirty_metadata"); |
1828 | ext4_journal_dirty_metadata(handle, dir_block); | 1830 | ext4_handle_dirty_metadata(handle, dir, dir_block); |
1829 | brelse(dir_block); | 1831 | brelse(dir_block); |
1830 | ext4_mark_inode_dirty(handle, inode); | 1832 | ext4_mark_inode_dirty(handle, inode); |
1831 | err = ext4_add_entry(handle, dentry, inode); | 1833 | err = ext4_add_entry(handle, dentry, inode); |
@@ -1854,7 +1856,7 @@ out_stop: | |||
1854 | */ | 1856 | */ |
1855 | static int empty_dir(struct inode *inode) | 1857 | static int empty_dir(struct inode *inode) |
1856 | { | 1858 | { |
1857 | unsigned long offset; | 1859 | unsigned int offset; |
1858 | struct buffer_head *bh; | 1860 | struct buffer_head *bh; |
1859 | struct ext4_dir_entry_2 *de, *de1; | 1861 | struct ext4_dir_entry_2 *de, *de1; |
1860 | struct super_block *sb; | 1862 | struct super_block *sb; |
@@ -1899,7 +1901,7 @@ static int empty_dir(struct inode *inode) | |||
1899 | if (err) | 1901 | if (err) |
1900 | ext4_error(sb, __func__, | 1902 | ext4_error(sb, __func__, |
1901 | "error %d reading directory" | 1903 | "error %d reading directory" |
1902 | " #%lu offset %lu", | 1904 | " #%lu offset %u", |
1903 | err, inode->i_ino, offset); | 1905 | err, inode->i_ino, offset); |
1904 | offset += sb->s_blocksize; | 1906 | offset += sb->s_blocksize; |
1905 | continue; | 1907 | continue; |
@@ -1937,6 +1939,9 @@ int ext4_orphan_add(handle_t *handle, struct inode *inode) | |||
1937 | struct ext4_iloc iloc; | 1939 | struct ext4_iloc iloc; |
1938 | int err = 0, rc; | 1940 | int err = 0, rc; |
1939 | 1941 | ||
1942 | if (!ext4_handle_valid(handle)) | ||
1943 | return 0; | ||
1944 | |||
1940 | lock_super(sb); | 1945 | lock_super(sb); |
1941 | if (!list_empty(&EXT4_I(inode)->i_orphan)) | 1946 | if (!list_empty(&EXT4_I(inode)->i_orphan)) |
1942 | goto out_unlock; | 1947 | goto out_unlock; |
@@ -1965,7 +1970,7 @@ int ext4_orphan_add(handle_t *handle, struct inode *inode) | |||
1965 | /* Insert this inode at the head of the on-disk orphan list... */ | 1970 | /* Insert this inode at the head of the on-disk orphan list... */ |
1966 | NEXT_ORPHAN(inode) = le32_to_cpu(EXT4_SB(sb)->s_es->s_last_orphan); | 1971 | NEXT_ORPHAN(inode) = le32_to_cpu(EXT4_SB(sb)->s_es->s_last_orphan); |
1967 | EXT4_SB(sb)->s_es->s_last_orphan = cpu_to_le32(inode->i_ino); | 1972 | EXT4_SB(sb)->s_es->s_last_orphan = cpu_to_le32(inode->i_ino); |
1968 | err = ext4_journal_dirty_metadata(handle, EXT4_SB(sb)->s_sbh); | 1973 | err = ext4_handle_dirty_metadata(handle, inode, EXT4_SB(sb)->s_sbh); |
1969 | rc = ext4_mark_iloc_dirty(handle, inode, &iloc); | 1974 | rc = ext4_mark_iloc_dirty(handle, inode, &iloc); |
1970 | if (!err) | 1975 | if (!err) |
1971 | err = rc; | 1976 | err = rc; |
@@ -1999,10 +2004,13 @@ int ext4_orphan_del(handle_t *handle, struct inode *inode) | |||
1999 | struct list_head *prev; | 2004 | struct list_head *prev; |
2000 | struct ext4_inode_info *ei = EXT4_I(inode); | 2005 | struct ext4_inode_info *ei = EXT4_I(inode); |
2001 | struct ext4_sb_info *sbi; | 2006 | struct ext4_sb_info *sbi; |
2002 | unsigned long ino_next; | 2007 | __u32 ino_next; |
2003 | struct ext4_iloc iloc; | 2008 | struct ext4_iloc iloc; |
2004 | int err = 0; | 2009 | int err = 0; |
2005 | 2010 | ||
2011 | if (!ext4_handle_valid(handle)) | ||
2012 | return 0; | ||
2013 | |||
2006 | lock_super(inode->i_sb); | 2014 | lock_super(inode->i_sb); |
2007 | if (list_empty(&ei->i_orphan)) { | 2015 | if (list_empty(&ei->i_orphan)) { |
2008 | unlock_super(inode->i_sb); | 2016 | unlock_super(inode->i_sb); |
@@ -2021,7 +2029,7 @@ int ext4_orphan_del(handle_t *handle, struct inode *inode) | |||
2021 | * transaction handle with which to update the orphan list on | 2029 | * transaction handle with which to update the orphan list on |
2022 | * disk, but we still need to remove the inode from the linked | 2030 | * disk, but we still need to remove the inode from the linked |
2023 | * list in memory. */ | 2031 | * list in memory. */ |
2024 | if (!handle) | 2032 | if (sbi->s_journal && !handle) |
2025 | goto out; | 2033 | goto out; |
2026 | 2034 | ||
2027 | err = ext4_reserve_inode_write(handle, inode, &iloc); | 2035 | err = ext4_reserve_inode_write(handle, inode, &iloc); |
@@ -2029,19 +2037,19 @@ int ext4_orphan_del(handle_t *handle, struct inode *inode) | |||
2029 | goto out_err; | 2037 | goto out_err; |
2030 | 2038 | ||
2031 | if (prev == &sbi->s_orphan) { | 2039 | if (prev == &sbi->s_orphan) { |
2032 | jbd_debug(4, "superblock will point to %lu\n", ino_next); | 2040 | jbd_debug(4, "superblock will point to %u\n", ino_next); |
2033 | BUFFER_TRACE(sbi->s_sbh, "get_write_access"); | 2041 | BUFFER_TRACE(sbi->s_sbh, "get_write_access"); |
2034 | err = ext4_journal_get_write_access(handle, sbi->s_sbh); | 2042 | err = ext4_journal_get_write_access(handle, sbi->s_sbh); |
2035 | if (err) | 2043 | if (err) |
2036 | goto out_brelse; | 2044 | goto out_brelse; |
2037 | sbi->s_es->s_last_orphan = cpu_to_le32(ino_next); | 2045 | sbi->s_es->s_last_orphan = cpu_to_le32(ino_next); |
2038 | err = ext4_journal_dirty_metadata(handle, sbi->s_sbh); | 2046 | err = ext4_handle_dirty_metadata(handle, inode, sbi->s_sbh); |
2039 | } else { | 2047 | } else { |
2040 | struct ext4_iloc iloc2; | 2048 | struct ext4_iloc iloc2; |
2041 | struct inode *i_prev = | 2049 | struct inode *i_prev = |
2042 | &list_entry(prev, struct ext4_inode_info, i_orphan)->vfs_inode; | 2050 | &list_entry(prev, struct ext4_inode_info, i_orphan)->vfs_inode; |
2043 | 2051 | ||
2044 | jbd_debug(4, "orphan inode %lu will point to %lu\n", | 2052 | jbd_debug(4, "orphan inode %lu will point to %u\n", |
2045 | i_prev->i_ino, ino_next); | 2053 | i_prev->i_ino, ino_next); |
2046 | err = ext4_reserve_inode_write(handle, i_prev, &iloc2); | 2054 | err = ext4_reserve_inode_write(handle, i_prev, &iloc2); |
2047 | if (err) | 2055 | if (err) |
@@ -2086,7 +2094,7 @@ static int ext4_rmdir(struct inode *dir, struct dentry *dentry) | |||
2086 | goto end_rmdir; | 2094 | goto end_rmdir; |
2087 | 2095 | ||
2088 | if (IS_DIRSYNC(dir)) | 2096 | if (IS_DIRSYNC(dir)) |
2089 | handle->h_sync = 1; | 2097 | ext4_handle_sync(handle); |
2090 | 2098 | ||
2091 | inode = dentry->d_inode; | 2099 | inode = dentry->d_inode; |
2092 | 2100 | ||
@@ -2140,7 +2148,7 @@ static int ext4_unlink(struct inode *dir, struct dentry *dentry) | |||
2140 | return PTR_ERR(handle); | 2148 | return PTR_ERR(handle); |
2141 | 2149 | ||
2142 | if (IS_DIRSYNC(dir)) | 2150 | if (IS_DIRSYNC(dir)) |
2143 | handle->h_sync = 1; | 2151 | ext4_handle_sync(handle); |
2144 | 2152 | ||
2145 | retval = -ENOENT; | 2153 | retval = -ENOENT; |
2146 | bh = ext4_find_entry(dir, &dentry->d_name, &de); | 2154 | bh = ext4_find_entry(dir, &dentry->d_name, &de); |
@@ -2197,7 +2205,7 @@ retry: | |||
2197 | return PTR_ERR(handle); | 2205 | return PTR_ERR(handle); |
2198 | 2206 | ||
2199 | if (IS_DIRSYNC(dir)) | 2207 | if (IS_DIRSYNC(dir)) |
2200 | handle->h_sync = 1; | 2208 | ext4_handle_sync(handle); |
2201 | 2209 | ||
2202 | inode = ext4_new_inode(handle, dir, S_IFLNK|S_IRWXUGO); | 2210 | inode = ext4_new_inode(handle, dir, S_IFLNK|S_IRWXUGO); |
2203 | err = PTR_ERR(inode); | 2211 | err = PTR_ERR(inode); |
@@ -2260,7 +2268,7 @@ retry: | |||
2260 | return PTR_ERR(handle); | 2268 | return PTR_ERR(handle); |
2261 | 2269 | ||
2262 | if (IS_DIRSYNC(dir)) | 2270 | if (IS_DIRSYNC(dir)) |
2263 | handle->h_sync = 1; | 2271 | ext4_handle_sync(handle); |
2264 | 2272 | ||
2265 | inode->i_ctime = ext4_current_time(inode); | 2273 | inode->i_ctime = ext4_current_time(inode); |
2266 | ext4_inc_count(handle, inode); | 2274 | ext4_inc_count(handle, inode); |
@@ -2309,7 +2317,7 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
2309 | return PTR_ERR(handle); | 2317 | return PTR_ERR(handle); |
2310 | 2318 | ||
2311 | if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir)) | 2319 | if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir)) |
2312 | handle->h_sync = 1; | 2320 | ext4_handle_sync(handle); |
2313 | 2321 | ||
2314 | old_bh = ext4_find_entry(old_dir, &old_dentry->d_name, &old_de); | 2322 | old_bh = ext4_find_entry(old_dir, &old_dentry->d_name, &old_de); |
2315 | /* | 2323 | /* |
@@ -2363,8 +2371,8 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
2363 | new_dir->i_ctime = new_dir->i_mtime = | 2371 | new_dir->i_ctime = new_dir->i_mtime = |
2364 | ext4_current_time(new_dir); | 2372 | ext4_current_time(new_dir); |
2365 | ext4_mark_inode_dirty(handle, new_dir); | 2373 | ext4_mark_inode_dirty(handle, new_dir); |
2366 | BUFFER_TRACE(new_bh, "call ext4_journal_dirty_metadata"); | 2374 | BUFFER_TRACE(new_bh, "call ext4_handle_dirty_metadata"); |
2367 | ext4_journal_dirty_metadata(handle, new_bh); | 2375 | ext4_handle_dirty_metadata(handle, new_dir, new_bh); |
2368 | brelse(new_bh); | 2376 | brelse(new_bh); |
2369 | new_bh = NULL; | 2377 | new_bh = NULL; |
2370 | } | 2378 | } |
@@ -2414,8 +2422,8 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
2414 | BUFFER_TRACE(dir_bh, "get_write_access"); | 2422 | BUFFER_TRACE(dir_bh, "get_write_access"); |
2415 | ext4_journal_get_write_access(handle, dir_bh); | 2423 | ext4_journal_get_write_access(handle, dir_bh); |
2416 | PARENT_INO(dir_bh->b_data) = cpu_to_le32(new_dir->i_ino); | 2424 | PARENT_INO(dir_bh->b_data) = cpu_to_le32(new_dir->i_ino); |
2417 | BUFFER_TRACE(dir_bh, "call ext4_journal_dirty_metadata"); | 2425 | BUFFER_TRACE(dir_bh, "call ext4_handle_dirty_metadata"); |
2418 | ext4_journal_dirty_metadata(handle, dir_bh); | 2426 | ext4_handle_dirty_metadata(handle, old_dir, dir_bh); |
2419 | ext4_dec_count(handle, old_dir); | 2427 | ext4_dec_count(handle, old_dir); |
2420 | if (new_inode) { | 2428 | if (new_inode) { |
2421 | /* checked empty_dir above, can't have another parent, | 2429 | /* checked empty_dir above, can't have another parent, |