On Thu, Jun 29, 2017 at 3:59 PM, Vishal Verma <vishal.l.verma@xxxxxxxxx> wrote: > btt_rw_page was not propagating errors frm btt_do_bvec, resulting in any > IO errors via the rw_page path going unnoticed. the pmem driver recently > fixed this in e10624f pmem: fail io-requests to known bad blocks > but same problem in BTT went neglected. > > Fixes: 5212e11 nd_btt: atomic sector updates > Cc: <stable@xxxxxxxxxxxxxxx> > Cc: Toshi Kani <toshi.kani@xxxxxxx> > Cc: Dan Williams <dan.j.williams@xxxxxxxxx> > Cc: Jeff Moyer <jmoyer@xxxxxxxxxx> > Signed-off-by: Vishal Verma <vishal.l.verma@xxxxxxxxx> > --- > drivers/nvdimm/btt.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/drivers/nvdimm/btt.c b/drivers/nvdimm/btt.c > index 7ca11df..4e56e72 100644 > --- a/drivers/nvdimm/btt.c > +++ b/drivers/nvdimm/btt.c > @@ -1248,10 +1248,13 @@ static int btt_rw_page(struct block_device *bdev, sector_t sector, > struct page *page, bool is_write) > { > struct btt *btt = bdev->bd_disk->private_data; > + int rc; > > - btt_do_bvec(btt, NULL, page, PAGE_SIZE, 0, is_write, sector); > - page_endio(page, is_write, 0); > - return 0; > + rc = btt_do_bvec(btt, NULL, page, PAGE_SIZE, 0, is_write, sector); > + if (rc == 0) > + page_endio(page, is_write, 0); > + > + return rc; > } Looks obviously correct, applied.