lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Mon, 26 Jul 2021 08:08:55 +0200 From: Pankaj Gupta <pankaj.gupta.linux@...il.com> To: nvdimm@...ts.linux.dev, linux-kernel@...r.kernel.org Cc: dan.j.williams@...el.com, jmoyer@...hat.com, david@...hat.com, mst@...hat.com, cohuck@...hat.com, vishal.l.verma@...el.com, dave.jiang@...el.com, ira.weiny@...el.com, pankaj.gupta.linux@...il.com, Pankaj Gupta <pankaj.gupta@...os.com> Subject: [RFC v2 2/2] pmem: Enable pmem_submit_bio for asynchronous flush From: Pankaj Gupta <pankaj.gupta@...os.com> Return from "pmem_submit_bio" when asynchronous flush is in process in other context. Signed-off-by: Pankaj Gupta <pankaj.gupta@...os.com> --- drivers/nvdimm/pmem.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c index 1e0615b8565e..3ca1fa88a5e7 100644 --- a/drivers/nvdimm/pmem.c +++ b/drivers/nvdimm/pmem.c @@ -201,8 +201,13 @@ static blk_qc_t pmem_submit_bio(struct bio *bio) struct pmem_device *pmem = bio->bi_bdev->bd_disk->private_data; struct nd_region *nd_region = to_region(pmem); - if (bio->bi_opf & REQ_PREFLUSH) - ret = nvdimm_flush(nd_region, bio); + if ((bio->bi_opf & REQ_PREFLUSH) && + nvdimm_flush(nd_region, bio)) { + + /* asynchronous flush completes in other context */ + if (nd_region->flush) + return BLK_QC_T_NONE; + } do_acct = blk_queue_io_stat(bio->bi_bdev->bd_disk->queue); if (do_acct) @@ -222,11 +227,13 @@ static blk_qc_t pmem_submit_bio(struct bio *bio) if (do_acct) bio_end_io_acct(bio, start); - if (bio->bi_opf & REQ_FUA) + if (bio->bi_opf & REQ_FUA) { ret = nvdimm_flush(nd_region, bio); - if (ret) - bio->bi_status = errno_to_blk_status(ret); + /* asynchronous flush completes in other context */ + if (nd_region->flush) + return BLK_QC_T_NONE; + } bio_endio(bio); return BLK_QC_T_NONE; -- 2.25.1
Powered by blists - more mailing lists