Commit d38954ed authored by Igor Konopko's avatar Igor Konopko Committed by Jens Axboe

lightnvm: pblk: set proper read status in bio

Currently in case of read errors, bi_status is not set properly which
leads to returning inproper data to layers above. This patch fix that
by setting proper status in case of read errors.

Also remove unnecessary warn_once(), which does not make sense
in that place, since user bio is not used for interation with drive
and thus bi_status will not be set here.
Signed-off-by: default avatarIgor Konopko <igor.j.konopko@intel.com>
Reviewed-by: default avatarJavier González <javier@javigon.com>
Reviewed-by: default avatarHans Holmberg <hans.holmberg@cnexlabs.com>
Signed-off-by: default avatarMatias Bjørling <mb@lightnvm.io>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 6e46b8b2
...@@ -175,11 +175,10 @@ static void pblk_read_check_rand(struct pblk *pblk, struct nvm_rq *rqd, ...@@ -175,11 +175,10 @@ static void pblk_read_check_rand(struct pblk *pblk, struct nvm_rq *rqd,
WARN_ONCE(j != rqd->nr_ppas, "pblk: corrupted random request\n"); WARN_ONCE(j != rqd->nr_ppas, "pblk: corrupted random request\n");
} }
static void pblk_end_user_read(struct bio *bio) static void pblk_end_user_read(struct bio *bio, int error)
{ {
#ifdef CONFIG_NVM_PBLK_DEBUG if (error && error != NVM_RSP_WARN_HIGHECC)
WARN_ONCE(bio->bi_status, "pblk: corrupted read bio\n"); bio_io_error(bio);
#endif
bio_endio(bio); bio_endio(bio);
} }
...@@ -219,7 +218,7 @@ static void pblk_end_io_read(struct nvm_rq *rqd) ...@@ -219,7 +218,7 @@ static void pblk_end_io_read(struct nvm_rq *rqd)
struct pblk_g_ctx *r_ctx = nvm_rq_to_pdu(rqd); struct pblk_g_ctx *r_ctx = nvm_rq_to_pdu(rqd);
struct bio *bio = (struct bio *)r_ctx->private; struct bio *bio = (struct bio *)r_ctx->private;
pblk_end_user_read(bio); pblk_end_user_read(bio, rqd->error);
__pblk_end_io_read(pblk, rqd, true); __pblk_end_io_read(pblk, rqd, true);
} }
...@@ -298,7 +297,7 @@ static void pblk_end_partial_read(struct nvm_rq *rqd) ...@@ -298,7 +297,7 @@ static void pblk_end_partial_read(struct nvm_rq *rqd)
rqd->bio = NULL; rqd->bio = NULL;
rqd->nr_ppas = nr_secs; rqd->nr_ppas = nr_secs;
bio_endio(bio); pblk_end_user_read(bio, rqd->error);
__pblk_end_io_read(pblk, rqd, false); __pblk_end_io_read(pblk, rqd, false);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment