+++ /dev/null
-From tytso@mit.edu Wed Dec 3 10:03:38 2008
-From: Frederic Bohe <frederic.bohe@bull.net>
-Date: Sun, 16 Nov 2008 11:05:28 -0500
-Subject: ext4: fix initialization of UNINIT bitmap blocks
-To: stable@kernel.org
-Cc: Frederic Bohe <frederic.bohe@bull.net>, Ext4 Developers List <linux-ext4@vger.kernel.org>, "Theodore Ts'o" <tytso@mit.edu>
-Message-ID: <1226851540-8032-9-git-send-email-tytso@mit.edu>
-
-From: Frederic Bohe <frederic.bohe@bull.net>
-
-(cherry picked from commit c806e68f5647109350ec546fee5b526962970fd2)
-
-This fixes a bug which caused on-line resizing of filesystems with a
-1k blocksize to fail. The root cause of this bug was the fact that if
-an uninitalized bitmap block gets read in by userspace (which
-e2fsprogs does try to avoid, but can happen when the blocksize is less
-than the pagesize and an adjacent blocks is read into memory)
-ext4_read_block_bitmap() was erroneously depending on the buffer
-uptodate flag to decide whether it needed to initialize the bitmap
-block in memory --- i.e., to set the standard set of blocks in use by
-a block group (superblock, bitmaps, inode table, etc.). Essentially,
-ext4_read_block_bitmap() assumed it was the only routine that might
-try to read a block containing a block bitmap, which is simply not
-true.
-
-To fix this, ext4_read_block_bitmap() and ext4_read_inode_bitmap()
-must always initialize uninitialized bitmap blocks. Once a block or
-inode is allocated out of that bitmap, it will be marked as
-initialized in the block group descriptor, so in general this won't
-result any extra unnecessary work.
-
-Signed-off-by: Frederic Bohe <frederic.bohe@bull.net>
-Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- fs/ext4/balloc.c | 4 +++-
- fs/ext4/ialloc.c | 4 +++-
- fs/ext4/mballoc.c | 4 +++-
- 3 files changed, 9 insertions(+), 3 deletions(-)
-
---- a/fs/ext4/balloc.c
-+++ b/fs/ext4/balloc.c
-@@ -318,9 +318,11 @@ ext4_read_block_bitmap(struct super_bloc
- block_group, bitmap_blk);
- return NULL;
- }
-- if (bh_uptodate_or_lock(bh))
-+ if (buffer_uptodate(bh) &&
-+ !(desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)))
- return bh;
-
-+ lock_buffer(bh);
- spin_lock(sb_bgl_lock(EXT4_SB(sb), block_group));
- if (desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) {
- ext4_init_block_bitmap(sb, bh, block_group, desc);
---- a/fs/ext4/ialloc.c
-+++ b/fs/ext4/ialloc.c
-@@ -115,9 +115,11 @@ ext4_read_inode_bitmap(struct super_bloc
- block_group, bitmap_blk);
- return NULL;
- }
-- if (bh_uptodate_or_lock(bh))
-+ if (buffer_uptodate(bh) &&
-+ !(desc->bg_flags & cpu_to_le16(EXT4_BG_INODE_UNINIT)))
- return bh;
-
-+ lock_buffer(bh);
- spin_lock(sb_bgl_lock(EXT4_SB(sb), block_group));
- if (desc->bg_flags & cpu_to_le16(EXT4_BG_INODE_UNINIT)) {
- ext4_init_inode_bitmap(sb, bh, block_group, desc);
---- a/fs/ext4/mballoc.c
-+++ b/fs/ext4/mballoc.c
-@@ -784,9 +784,11 @@ static int ext4_mb_init_cache(struct pag
- if (bh[i] == NULL)
- goto out;
-
-- if (bh_uptodate_or_lock(bh[i]))
-+ if (buffer_uptodate(bh[i]) &&
-+ !(desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)))
- continue;
-
-+ lock_buffer(bh[i]);
- spin_lock(sb_bgl_lock(EXT4_SB(sb), first_group + i));
- if (desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) {
- ext4_init_block_bitmap(sb, bh[i],
firewire-fw-sbp2-another-ipod-mini-quirk-entry.patch
ib-mlx4-fix-mtt-leakage-in-resize-cq.patch
net-fix-soft-lockups-oom-issues-w-unix-garbage-collector.patch
-libata-improve-phantom-device-detection.patch
cifs-fix-cifs-reconnection-flags.patch
cifs-remove-unused-list-add-new-cifs-sock-list-to-prepare-for-mount-umount-fix.patch
cifs-clean-up-server-protocol-handling.patch
ext4-elevate-write-count-for-migrate-ioctl.patch
ext4-renumber-ext4_ioc_migrate.patch
ext4-jbd2-avoid-warn-messages-when-failing-to-write-to-the-superblock.patch
-ext4-fix-initialization-of-uninit-bitmap-blocks.patch
jbd2-abort-instead-of-waiting-for-nonexistent-transaction.patch
jbd2-fix-buffer-head-leak-when-writing-the-commit-block.patch
ext4-fix-xattr-deadlock.patch