mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
zram: do not forget to endio for partial discard requests
As reported by Qu Wenruo and Avinesh Kumar, the following
getconf PAGESIZE
65536
blkdiscard -p 4k /dev/zram0
takes literally forever to complete. zram doesn't support partial
discards and just returns immediately w/o doing any discard work in such
cases. The problem is that we forget to endio on our way out, so
blkdiscard sleeps forever in submit_bio_wait(). Fix this by jumping to
end_bio label, which does bio_endio().
Link: https://lore.kernel.org/20260331074255.777019-1-senozhatsky@chromium.org
Fixes: 0120dd6e4e ("zram: make zram_bio_discard more self-contained")
Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Reported-by: Qu Wenruo <wqu@suse.com>
Closes: https://lore.kernel.org/linux-block/92361cd3-fb8b-482e-bc89-15ff1acb9a59@suse.com
Tested-by: Qu Wenruo <wqu@suse.com>
Reported-by: Avinesh Kumar <avinesh.kumar@suse.com>
Closes: https://bugzilla.suse.com/show_bug.cgi?id=1256530
Reviewed-by: Christoph Hellwig <hch@lst.de>
Cc: Brian Geffon <bgeffon@google.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Minchan Kim <minchan@kernel.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
af69016dab
commit
e3668b3713
|
|
@ -2678,7 +2678,7 @@ static void zram_bio_discard(struct zram *zram, struct bio *bio)
|
|||
*/
|
||||
if (offset) {
|
||||
if (n <= (PAGE_SIZE - offset))
|
||||
return;
|
||||
goto end_bio;
|
||||
|
||||
n -= (PAGE_SIZE - offset);
|
||||
index++;
|
||||
|
|
@ -2693,6 +2693,7 @@ static void zram_bio_discard(struct zram *zram, struct bio *bio)
|
|||
n -= PAGE_SIZE;
|
||||
}
|
||||
|
||||
end_bio:
|
||||
bio_endio(bio);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user