zram: don't return errors from read_from_bdev_async

bio_alloc will never return a NULL bio when it is allowed to sleep, and
adding a single page to bio with a single vector also can't fail, so
switch to the asserting __bio_add_page variant and drop the error returns.

Link: https://lkml.kernel.org/r/20230411171459.567614-16-hch@lst.de
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Acked-by: Minchan Kim <minchan@kernel.org>
Cc: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Christoph Hellwig 2023-04-11 19:14:57 +02:00 committed by Andrew Morton
parent fd45af53e2
commit 0cd97a0372
1 changed files with 4 additions and 12 deletions

View File

@ -585,24 +585,16 @@ static void zram_page_end_io(struct bio *bio)
bio_put(bio); bio_put(bio);
} }
/* static void read_from_bdev_async(struct zram *zram, struct page *page,
* Returns 1 if the submission is successful.
*/
static int read_from_bdev_async(struct zram *zram, struct page *page,
unsigned long entry, struct bio *parent) unsigned long entry, struct bio *parent)
{ {
struct bio *bio; struct bio *bio;
bio = bio_alloc(zram->bdev, 1, parent ? parent->bi_opf : REQ_OP_READ, bio = bio_alloc(zram->bdev, 1, parent ? parent->bi_opf : REQ_OP_READ,
GFP_NOIO); GFP_NOIO);
if (!bio)
return -ENOMEM;
bio->bi_iter.bi_sector = entry * (PAGE_SIZE >> 9); bio->bi_iter.bi_sector = entry * (PAGE_SIZE >> 9);
if (!bio_add_page(bio, page, PAGE_SIZE, 0)) { __bio_add_page(bio, page, PAGE_SIZE, 0);
bio_put(bio);
return -EIO;
}
if (!parent) if (!parent)
bio->bi_end_io = zram_page_end_io; bio->bi_end_io = zram_page_end_io;
@ -610,7 +602,6 @@ static int read_from_bdev_async(struct zram *zram, struct page *page,
bio_chain(bio, parent); bio_chain(bio, parent);
submit_bio(bio); submit_bio(bio);
return 1;
} }
#define PAGE_WB_SIG "page_index=" #define PAGE_WB_SIG "page_index="
@ -840,7 +831,8 @@ static int read_from_bdev(struct zram *zram, struct page *page,
return -EIO; return -EIO;
return read_from_bdev_sync(zram, page, entry, parent); return read_from_bdev_sync(zram, page, entry, parent);
} }
return read_from_bdev_async(zram, page, entry, parent); read_from_bdev_async(zram, page, entry, parent);
return 1;
} }
#else #else
static inline void reset_bdev(struct zram *zram) {}; static inline void reset_bdev(struct zram *zram) {};