diff options
Diffstat (limited to 'fs/ext4/ialloc.c')
-rw-r--r-- | fs/ext4/ialloc.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c index 4facdd29a350..3f32c8012447 100644 --- a/fs/ext4/ialloc.c +++ b/fs/ext4/ialloc.c | |||
@@ -725,6 +725,10 @@ repeat_in_this_group: | |||
725 | "inode=%lu", ino + 1); | 725 | "inode=%lu", ino + 1); |
726 | continue; | 726 | continue; |
727 | } | 727 | } |
728 | BUFFER_TRACE(inode_bitmap_bh, "get_write_access"); | ||
729 | err = ext4_journal_get_write_access(handle, inode_bitmap_bh); | ||
730 | if (err) | ||
731 | goto fail; | ||
728 | ext4_lock_group(sb, group); | 732 | ext4_lock_group(sb, group); |
729 | ret2 = ext4_test_and_set_bit(ino, inode_bitmap_bh->b_data); | 733 | ret2 = ext4_test_and_set_bit(ino, inode_bitmap_bh->b_data); |
730 | ext4_unlock_group(sb, group); | 734 | ext4_unlock_group(sb, group); |
@@ -738,6 +742,11 @@ repeat_in_this_group: | |||
738 | goto out; | 742 | goto out; |
739 | 743 | ||
740 | got: | 744 | got: |
745 | BUFFER_TRACE(inode_bitmap_bh, "call ext4_handle_dirty_metadata"); | ||
746 | err = ext4_handle_dirty_metadata(handle, NULL, inode_bitmap_bh); | ||
747 | if (err) | ||
748 | goto fail; | ||
749 | |||
741 | /* We may have to initialize the block bitmap if it isn't already */ | 750 | /* We may have to initialize the block bitmap if it isn't already */ |
742 | if (ext4_has_group_desc_csum(sb) && | 751 | if (ext4_has_group_desc_csum(sb) && |
743 | gdp->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) { | 752 | gdp->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) { |
@@ -753,7 +762,6 @@ got: | |||
753 | 762 | ||
754 | BUFFER_TRACE(block_bitmap_bh, "dirty block bitmap"); | 763 | BUFFER_TRACE(block_bitmap_bh, "dirty block bitmap"); |
755 | err = ext4_handle_dirty_metadata(handle, NULL, block_bitmap_bh); | 764 | err = ext4_handle_dirty_metadata(handle, NULL, block_bitmap_bh); |
756 | brelse(block_bitmap_bh); | ||
757 | 765 | ||
758 | /* recheck and clear flag under lock if we still need to */ | 766 | /* recheck and clear flag under lock if we still need to */ |
759 | ext4_lock_group(sb, group); | 767 | ext4_lock_group(sb, group); |
@@ -766,16 +774,12 @@ got: | |||
766 | ext4_group_desc_csum_set(sb, group, gdp); | 774 | ext4_group_desc_csum_set(sb, group, gdp); |
767 | } | 775 | } |
768 | ext4_unlock_group(sb, group); | 776 | ext4_unlock_group(sb, group); |
777 | brelse(block_bitmap_bh); | ||
769 | 778 | ||
770 | if (err) | 779 | if (err) |
771 | goto fail; | 780 | goto fail; |
772 | } | 781 | } |
773 | 782 | ||
774 | BUFFER_TRACE(inode_bitmap_bh, "get_write_access"); | ||
775 | err = ext4_journal_get_write_access(handle, inode_bitmap_bh); | ||
776 | if (err) | ||
777 | goto fail; | ||
778 | |||
779 | BUFFER_TRACE(group_desc_bh, "get_write_access"); | 783 | BUFFER_TRACE(group_desc_bh, "get_write_access"); |
780 | err = ext4_journal_get_write_access(handle, group_desc_bh); | 784 | err = ext4_journal_get_write_access(handle, group_desc_bh); |
781 | if (err) | 785 | if (err) |
@@ -823,11 +827,6 @@ got: | |||
823 | } | 827 | } |
824 | ext4_unlock_group(sb, group); | 828 | ext4_unlock_group(sb, group); |
825 | 829 | ||
826 | BUFFER_TRACE(inode_bitmap_bh, "call ext4_handle_dirty_metadata"); | ||
827 | err = ext4_handle_dirty_metadata(handle, NULL, inode_bitmap_bh); | ||
828 | if (err) | ||
829 | goto fail; | ||
830 | |||
831 | BUFFER_TRACE(group_desc_bh, "call ext4_handle_dirty_metadata"); | 830 | BUFFER_TRACE(group_desc_bh, "call ext4_handle_dirty_metadata"); |
832 | err = ext4_handle_dirty_metadata(handle, NULL, group_desc_bh); | 831 | err = ext4_handle_dirty_metadata(handle, NULL, group_desc_bh); |
833 | if (err) | 832 | if (err) |
@@ -903,6 +902,10 @@ got: | |||
903 | 902 | ||
904 | ei->i_extra_isize = EXT4_SB(sb)->s_want_extra_isize; | 903 | ei->i_extra_isize = EXT4_SB(sb)->s_want_extra_isize; |
905 | 904 | ||
905 | ei->i_inline_off = 0; | ||
906 | if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_INLINE_DATA)) | ||
907 | ext4_set_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); | ||
908 | |||
906 | ret = inode; | 909 | ret = inode; |
907 | dquot_initialize(inode); | 910 | dquot_initialize(inode); |
908 | err = dquot_alloc_inode(inode); | 911 | err = dquot_alloc_inode(inode); |