diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-02 13:06:20 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-02 13:06:20 -0400 |
commit | f1f8935a5c38a2c61e86a42bc971a2539eef2211 (patch) | |
tree | 694950045f2f5d89507d7206cf6595e09cdfbd2c /fs/ext4/namei.c | |
parent | 34116645d912f65d7eb4508a1db3c9d0e45facb1 (diff) | |
parent | f2a44523b20f323e4aef7c16261d34d6f0a4bf06 (diff) |
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: (97 commits)
jbd2: Unify log messages in jbd2 code
jbd/jbd2: validate sb->s_first in journal_get_superblock()
ext4: let ext4_ext_rm_leaf work with EXT_DEBUG defined
ext4: fix a syntax error in ext4_ext_insert_extent when debugging enabled
ext4: fix a typo in struct ext4_allocation_context
ext4: Don't normalize an falloc request if it can fit in 1 extent.
ext4: remove comments about extent mount option in ext4_new_inode()
ext4: let ext4_discard_partial_buffers handle unaligned range correctly
ext4: return ENOMEM if find_or_create_pages fails
ext4: move vars to local scope in ext4_discard_partial_page_buffers_no_lock()
ext4: Create helper function for EXT4_IO_END_UNWRITTEN and i_aiodio_unwritten
ext4: optimize locking for end_io extent conversion
ext4: remove unnecessary call to waitqueue_active()
ext4: Use correct locking for ext4_end_io_nolock()
ext4: fix race in xattr block allocation path
ext4: trace punch_hole correctly in ext4_ext_map_blocks
ext4: clean up AGGRESSIVE_TEST code
ext4: move variables to their scope
ext4: fix quota accounting during migration
ext4: migrate cleanup
...
Diffstat (limited to 'fs/ext4/namei.c')
-rw-r--r-- | fs/ext4/namei.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index 1c924faeb6c8..2a75eed2ef06 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c | |||
@@ -1586,7 +1586,7 @@ static int ext4_dx_add_entry(handle_t *handle, struct dentry *dentry, | |||
1586 | dxtrace(dx_show_index("node", frames[1].entries)); | 1586 | dxtrace(dx_show_index("node", frames[1].entries)); |
1587 | dxtrace(dx_show_index("node", | 1587 | dxtrace(dx_show_index("node", |
1588 | ((struct dx_node *) bh2->b_data)->entries)); | 1588 | ((struct dx_node *) bh2->b_data)->entries)); |
1589 | err = ext4_handle_dirty_metadata(handle, inode, bh2); | 1589 | err = ext4_handle_dirty_metadata(handle, dir, bh2); |
1590 | if (err) | 1590 | if (err) |
1591 | goto journal_error; | 1591 | goto journal_error; |
1592 | brelse (bh2); | 1592 | brelse (bh2); |
@@ -1612,7 +1612,7 @@ static int ext4_dx_add_entry(handle_t *handle, struct dentry *dentry, | |||
1612 | if (err) | 1612 | if (err) |
1613 | goto journal_error; | 1613 | goto journal_error; |
1614 | } | 1614 | } |
1615 | err = ext4_handle_dirty_metadata(handle, inode, frames[0].bh); | 1615 | err = ext4_handle_dirty_metadata(handle, dir, frames[0].bh); |
1616 | if (err) { | 1616 | if (err) { |
1617 | ext4_std_error(inode->i_sb, err); | 1617 | ext4_std_error(inode->i_sb, err); |
1618 | goto cleanup; | 1618 | goto cleanup; |
@@ -1707,9 +1707,8 @@ static void ext4_inc_count(handle_t *handle, struct inode *inode) | |||
1707 | */ | 1707 | */ |
1708 | static void ext4_dec_count(handle_t *handle, struct inode *inode) | 1708 | static void ext4_dec_count(handle_t *handle, struct inode *inode) |
1709 | { | 1709 | { |
1710 | drop_nlink(inode); | 1710 | if (!S_ISDIR(inode->i_mode) || inode->i_nlink > 2) |
1711 | if (S_ISDIR(inode->i_mode) && inode->i_nlink == 0) | 1711 | drop_nlink(inode); |
1712 | inc_nlink(inode); | ||
1713 | } | 1712 | } |
1714 | 1713 | ||
1715 | 1714 | ||
@@ -1756,7 +1755,7 @@ retry: | |||
1756 | if (IS_DIRSYNC(dir)) | 1755 | if (IS_DIRSYNC(dir)) |
1757 | ext4_handle_sync(handle); | 1756 | ext4_handle_sync(handle); |
1758 | 1757 | ||
1759 | inode = ext4_new_inode(handle, dir, mode, &dentry->d_name, 0); | 1758 | inode = ext4_new_inode(handle, dir, mode, &dentry->d_name, 0, NULL); |
1760 | err = PTR_ERR(inode); | 1759 | err = PTR_ERR(inode); |
1761 | if (!IS_ERR(inode)) { | 1760 | if (!IS_ERR(inode)) { |
1762 | inode->i_op = &ext4_file_inode_operations; | 1761 | inode->i_op = &ext4_file_inode_operations; |
@@ -1792,7 +1791,7 @@ retry: | |||
1792 | if (IS_DIRSYNC(dir)) | 1791 | if (IS_DIRSYNC(dir)) |
1793 | ext4_handle_sync(handle); | 1792 | ext4_handle_sync(handle); |
1794 | 1793 | ||
1795 | inode = ext4_new_inode(handle, dir, mode, &dentry->d_name, 0); | 1794 | inode = ext4_new_inode(handle, dir, mode, &dentry->d_name, 0, NULL); |
1796 | err = PTR_ERR(inode); | 1795 | err = PTR_ERR(inode); |
1797 | if (!IS_ERR(inode)) { | 1796 | if (!IS_ERR(inode)) { |
1798 | init_special_inode(inode, inode->i_mode, rdev); | 1797 | init_special_inode(inode, inode->i_mode, rdev); |
@@ -1832,7 +1831,7 @@ retry: | |||
1832 | ext4_handle_sync(handle); | 1831 | ext4_handle_sync(handle); |
1833 | 1832 | ||
1834 | inode = ext4_new_inode(handle, dir, S_IFDIR | mode, | 1833 | inode = ext4_new_inode(handle, dir, S_IFDIR | mode, |
1835 | &dentry->d_name, 0); | 1834 | &dentry->d_name, 0, NULL); |
1836 | err = PTR_ERR(inode); | 1835 | err = PTR_ERR(inode); |
1837 | if (IS_ERR(inode)) | 1836 | if (IS_ERR(inode)) |
1838 | goto out_stop; | 1837 | goto out_stop; |
@@ -1863,7 +1862,7 @@ retry: | |||
1863 | ext4_set_de_type(dir->i_sb, de, S_IFDIR); | 1862 | ext4_set_de_type(dir->i_sb, de, S_IFDIR); |
1864 | inode->i_nlink = 2; | 1863 | inode->i_nlink = 2; |
1865 | BUFFER_TRACE(dir_block, "call ext4_handle_dirty_metadata"); | 1864 | BUFFER_TRACE(dir_block, "call ext4_handle_dirty_metadata"); |
1866 | err = ext4_handle_dirty_metadata(handle, dir, dir_block); | 1865 | err = ext4_handle_dirty_metadata(handle, inode, dir_block); |
1867 | if (err) | 1866 | if (err) |
1868 | goto out_clear_inode; | 1867 | goto out_clear_inode; |
1869 | err = ext4_mark_inode_dirty(handle, inode); | 1868 | err = ext4_mark_inode_dirty(handle, inode); |
@@ -2279,7 +2278,7 @@ retry: | |||
2279 | ext4_handle_sync(handle); | 2278 | ext4_handle_sync(handle); |
2280 | 2279 | ||
2281 | inode = ext4_new_inode(handle, dir, S_IFLNK|S_IRWXUGO, | 2280 | inode = ext4_new_inode(handle, dir, S_IFLNK|S_IRWXUGO, |
2282 | &dentry->d_name, 0); | 2281 | &dentry->d_name, 0, NULL); |
2283 | err = PTR_ERR(inode); | 2282 | err = PTR_ERR(inode); |
2284 | if (IS_ERR(inode)) | 2283 | if (IS_ERR(inode)) |
2285 | goto out_stop; | 2284 | goto out_stop; |
@@ -2530,7 +2529,7 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
2530 | PARENT_INO(dir_bh->b_data, new_dir->i_sb->s_blocksize) = | 2529 | PARENT_INO(dir_bh->b_data, new_dir->i_sb->s_blocksize) = |
2531 | cpu_to_le32(new_dir->i_ino); | 2530 | cpu_to_le32(new_dir->i_ino); |
2532 | BUFFER_TRACE(dir_bh, "call ext4_handle_dirty_metadata"); | 2531 | BUFFER_TRACE(dir_bh, "call ext4_handle_dirty_metadata"); |
2533 | retval = ext4_handle_dirty_metadata(handle, old_dir, dir_bh); | 2532 | retval = ext4_handle_dirty_metadata(handle, old_inode, dir_bh); |
2534 | if (retval) { | 2533 | if (retval) { |
2535 | ext4_std_error(old_dir->i_sb, retval); | 2534 | ext4_std_error(old_dir->i_sb, retval); |
2536 | goto end_rename; | 2535 | goto end_rename; |