| From 48702e2fabc3951de803d51cb9b9898cd628381a Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 28 Nov 2024 17:00:56 +0800 |
| Subject: brd: decrease the number of allocated pages which discarded |
| |
| From: Zhang Xianwei <zhang.xianwei8@zte.com.cn> |
| |
| [ Upstream commit 82734209bedd65a8b508844bab652b464379bfdd ] |
| |
| The number of allocated pages which discarded will not decrease. |
| Fix it. |
| |
| Fixes: 9ead7efc6f3f ("brd: implement discard support") |
| |
| Signed-off-by: Zhang Xianwei <zhang.xianwei8@zte.com.cn> |
| Reviewed-by: Ming Lei <ming.lei@redhat.com> |
| Link: https://lore.kernel.org/r/20241128170056565nPKSz2vsP8K8X2uk2iaDG@zte.com.cn |
| Signed-off-by: Jens Axboe <axboe@kernel.dk> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/block/brd.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/block/brd.c b/drivers/block/brd.c |
| index 5a95671d81515..292f127cae0ab 100644 |
| --- a/drivers/block/brd.c |
| +++ b/drivers/block/brd.c |
| @@ -231,8 +231,10 @@ static void brd_do_discard(struct brd_device *brd, sector_t sector, u32 size) |
| xa_lock(&brd->brd_pages); |
| while (size >= PAGE_SIZE && aligned_sector < rd_size * 2) { |
| page = __xa_erase(&brd->brd_pages, aligned_sector >> PAGE_SECTORS_SHIFT); |
| - if (page) |
| + if (page) { |
| __free_page(page); |
| + brd->brd_nr_pages--; |
| + } |
| aligned_sector += PAGE_SECTORS; |
| size -= PAGE_SIZE; |
| } |
| -- |
| 2.43.0 |
| |