From: Zhang Yi Date: Thu, 24 Aug 2023 09:26:04 +0000 (+0800) Subject: ext4: correct the start block of counting reserved clusters X-Git-Tag: v6.1.68~409 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=80ddcf21e7e022b392d9ae8363c0353251a95034;p=platform%2Fkernel%2Flinux-starfive.git ext4: correct the start block of counting reserved clusters commit 40ea98396a3659062267d1fe5f99af4f7e4f05e3 upstream. When big allocate feature is enabled, we need to count and update reserved clusters before removing a delayed only extent_status entry. {init|count|get}_rsvd() have already done this, but the start block number of this counting isn't correct in the following case. lblk end | | v v ------------------------- | | orig_es ------------------------- ^ ^ len1 is 0 | len2 | If the start block of the orig_es entry founded is bigger than lblk, we passed lblk as start block to count_rsvd(), but the length is correct, finally, the range to be counted is offset. This patch fix this by passing the start blocks to 'orig_es->lblk + len1'. Signed-off-by: Zhang Yi Cc: stable@kernel.org Link: https://lore.kernel.org/r/20230824092619.1327976-2-yi.zhang@huaweicloud.com Signed-off-by: Theodore Ts'o Reviewed-by: Jan Kara Signed-off-by: Greg Kroah-Hartman --- diff --git a/fs/ext4/extents_status.c b/fs/ext4/extents_status.c index 44e8352..b57e497 100644 --- a/fs/ext4/extents_status.c +++ b/fs/ext4/extents_status.c @@ -1365,8 +1365,8 @@ retry: } } if (count_reserved) - count_rsvd(inode, lblk, orig_es.es_len - len1 - len2, - &orig_es, &rc); + count_rsvd(inode, orig_es.es_lblk + len1, + orig_es.es_len - len1 - len2, &orig_es, &rc); goto out_get_reserved; }