Skip to content

Commit

Permalink
zram: return errors from read_from_bdev_sync
Browse files Browse the repository at this point in the history
Propagate read errors to the caller instead of dropping them on the floor,
and stop returning the somewhat dangerous 1 on success from
read_from_bdev*.

Link: https://lkml.kernel.org/r/20230411171459.567614-18-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>
  • Loading branch information
Christoph Hellwig authored and Andrew Morton committed Apr 18, 2023
1 parent 4e3c87b commit 1e9460d
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions drivers/block/zram/zram_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -770,6 +770,7 @@ struct zram_work {
struct zram *zram;
unsigned long entry;
struct page *page;
int error;
};

static void zram_sync_read(struct work_struct *work)
Expand All @@ -781,7 +782,7 @@ static void zram_sync_read(struct work_struct *work)
bio_init(&bio, zw->zram->bdev, &bv, 1, REQ_OP_READ);
bio.bi_iter.bi_sector = zw->entry * (PAGE_SIZE >> 9);
__bio_add_page(&bio, zw->page, PAGE_SIZE, 0);
submit_bio_wait(&bio);
zw->error = submit_bio_wait(&bio);
}

/*
Expand All @@ -803,7 +804,7 @@ static int read_from_bdev_sync(struct zram *zram, struct page *page,
flush_work(&work.work);
destroy_work_on_stack(&work.work);

return 1;
return work.error;
}

static int read_from_bdev(struct zram *zram, struct page *page,
Expand All @@ -816,7 +817,7 @@ static int read_from_bdev(struct zram *zram, struct page *page,
return read_from_bdev_sync(zram, page, entry);
}
read_from_bdev_async(zram, page, entry, parent);
return 1;
return 0;
}
#else
static inline void reset_bdev(struct zram *zram) {};
Expand Down

0 comments on commit 1e9460d

Please sign in to comment.