From: Lukas Czerner Date: Tue, 13 May 2014 02:21:43 +0000 (-0400) Subject: ext4: use EXT_MAX_BLOCKS in ext4_es_can_be_merged() X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=0baaea64009d5edbfee36a949017f7c68926fafc;p=linux-beck.git ext4: use EXT_MAX_BLOCKS in ext4_es_can_be_merged() In ext4_es_can_be_merged() when checking whether we can merge two extents we should use EXT_MAX_BLOCKS instead of defining it manually. Also if it is really the case we should notify userspace because clearly there is a bug in extent status tree implementation since this should never happen. Signed-off-by: Lukas Czerner Signed-off-by: "Theodore Ts'o" Reviewed-by: Zheng Liu --- diff --git a/fs/ext4/extents_status.c b/fs/ext4/extents_status.c index 98c90f5834ee..3f5c188953a4 100644 --- a/fs/ext4/extents_status.c +++ b/fs/ext4/extents_status.c @@ -344,8 +344,14 @@ static int ext4_es_can_be_merged(struct extent_status *es1, if (ext4_es_status(es1) != ext4_es_status(es2)) return 0; - if (((__u64) es1->es_len) + es2->es_len > 0xFFFFFFFFULL) + if (((__u64) es1->es_len) + es2->es_len > EXT_MAX_BLOCKS) { + pr_warn("ES assertion failed when merging extents. " + "The sum of lengths of es1 (%d) and es2 (%d) " + "is bigger than allowed file size (%d)\n", + es1->es_len, es2->es_len, EXT_MAX_BLOCKS); + WARN_ON(1); return 0; + } if (((__u64) es1->es_lblk) + es1->es_len != es2->es_lblk) return 0;