diff options
| -rw-r--r-- | fs/ext4/balloc.c | 4 | ||||
| -rw-r--r-- | fs/ext4/ialloc.c | 4 | ||||
| -rw-r--r-- | fs/ext4/mballoc.c | 4 |
3 files changed, 9 insertions, 3 deletions
diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c index 59566c082f1b..bd2ece228827 100644 --- a/fs/ext4/balloc.c +++ b/fs/ext4/balloc.c | |||
| @@ -319,9 +319,11 @@ ext4_read_block_bitmap(struct super_block *sb, ext4_group_t block_group) | |||
| 319 | block_group, bitmap_blk); | 319 | block_group, bitmap_blk); |
| 320 | return NULL; | 320 | return NULL; |
| 321 | } | 321 | } |
| 322 | if (bh_uptodate_or_lock(bh)) | 322 | if (buffer_uptodate(bh) && |
| 323 | !(desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT))) | ||
| 323 | return bh; | 324 | return bh; |
| 324 | 325 | ||
| 326 | lock_buffer(bh); | ||
| 325 | spin_lock(sb_bgl_lock(EXT4_SB(sb), block_group)); | 327 | spin_lock(sb_bgl_lock(EXT4_SB(sb), block_group)); |
| 326 | if (desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) { | 328 | if (desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) { |
| 327 | ext4_init_block_bitmap(sb, bh, block_group, desc); | 329 | ext4_init_block_bitmap(sb, bh, block_group, desc); |
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c index 1343bf18825b..fe34d74cfb19 100644 --- a/fs/ext4/ialloc.c +++ b/fs/ext4/ialloc.c | |||
| @@ -115,9 +115,11 @@ ext4_read_inode_bitmap(struct super_block *sb, ext4_group_t block_group) | |||
| 115 | block_group, bitmap_blk); | 115 | block_group, bitmap_blk); |
| 116 | return NULL; | 116 | return NULL; |
| 117 | } | 117 | } |
| 118 | if (bh_uptodate_or_lock(bh)) | 118 | if (buffer_uptodate(bh) && |
| 119 | !(desc->bg_flags & cpu_to_le16(EXT4_BG_INODE_UNINIT))) | ||
| 119 | return bh; | 120 | return bh; |
| 120 | 121 | ||
| 122 | lock_buffer(bh); | ||
| 121 | spin_lock(sb_bgl_lock(EXT4_SB(sb), block_group)); | 123 | spin_lock(sb_bgl_lock(EXT4_SB(sb), block_group)); |
| 122 | if (desc->bg_flags & cpu_to_le16(EXT4_BG_INODE_UNINIT)) { | 124 | if (desc->bg_flags & cpu_to_le16(EXT4_BG_INODE_UNINIT)) { |
| 123 | ext4_init_inode_bitmap(sb, bh, block_group, desc); | 125 | ext4_init_inode_bitmap(sb, bh, block_group, desc); |
diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 335faee0c0f5..b580714f0d85 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c | |||
| @@ -782,9 +782,11 @@ static int ext4_mb_init_cache(struct page *page, char *incore) | |||
| 782 | if (bh[i] == NULL) | 782 | if (bh[i] == NULL) |
| 783 | goto out; | 783 | goto out; |
| 784 | 784 | ||
| 785 | if (bh_uptodate_or_lock(bh[i])) | 785 | if (buffer_uptodate(bh[i]) && |
| 786 | !(desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT))) | ||
| 786 | continue; | 787 | continue; |
| 787 | 788 | ||
| 789 | lock_buffer(bh[i]); | ||
| 788 | spin_lock(sb_bgl_lock(EXT4_SB(sb), first_group + i)); | 790 | spin_lock(sb_bgl_lock(EXT4_SB(sb), first_group + i)); |
| 789 | if (desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) { | 791 | if (desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) { |
| 790 | ext4_init_block_bitmap(sb, bh[i], | 792 | ext4_init_block_bitmap(sb, bh[i], |
