add patch cond_resched-in-work-heavy-group-loops
[ext4-patch-queue.git] / make-sanity-check-in-mballoc-more-strict
blob160fcc94bbf3c17132d1b4c1892c250e5518ab00
1 ext4: make sanity check in mballoc more strict
3 From: Jan Kara <jack@suse.cz>
5 The sanity check in mb_find_extent() only checked that returned extent
6 does not extend past blocksize * 8, however it should not extend past
7 EXT4_CLUSTERS_PER_GROUP(sb). This can happen when clusters_per_group <
8 blocksize * 8 and the tail of the bitmap is not properly filled by 1s
9 which happened e.g. when ancient kernels have grown the filesystem.
11 Signed-off-by: Jan Kara <jack@suse.cz>
12 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
13 Cc: stable@kernel.org
14 ---
15  fs/ext4/mballoc.c | 2 +-
16  1 file changed, 1 insertion(+), 1 deletion(-)
18 As a background: We have a customer who has filesystems (created & apparently
19 resized by 3.0 or older kernels) and which make current kernels eventually barf
20 with errors but e2fsck says everything is fine.  This patch makes mballoc code
21 detect issues earlier. I'll send appropriate e2fsck patch shortly.
23 diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
24 index 6fb76d408093..8ef5f12bbee2 100644
25 --- a/fs/ext4/mballoc.c
26 +++ b/fs/ext4/mballoc.c
27 @@ -1539,7 +1539,7 @@ static int mb_find_extent(struct ext4_buddy *e4b, int block,
28                 ex->fe_len += 1 << order;
29         }
31 -       if (ex->fe_start + ex->fe_len > (1 << (e4b->bd_blkbits + 3))) {
32 +       if (ex->fe_start + ex->fe_len > EXT4_CLUSTERS_PER_GROUP(e4b->bd_sb)) {
33                 /* Should never happen! (but apparently sometimes does?!?) */
34                 WARN_ON(1);
35                 ext4_error(e4b->bd_sb, "corruption or bug in mb_find_extent "
36 -- 
37 2.16.4