Hi Pankaj, ---- On Tue, 23 Jun 2026 17:46:20 +0800 Pankaj Gupta <[email protected]> wrote --- > > nvdimm_flush() currently converts any non-zero provider flush error to > > -EIO. That loses useful errno values from provider callbacks. > > > > A local virtio-pmem mkfs sanity test showed the masking clearly: > > > > wipefs: /dev/pmem0: cannot flush modified buffers: Input/output error > > mkfs.ext4: Input/output error while writing out and closing file system > > nd_region region0: dbg: nvdimm_flush rc=-5 > > > > The virtio-pmem callback can return -ENOMEM when async_pmem_flush() fails > > to allocate a child flush bio, but nvdimm_flush() hides that as -EIO before > > pmem_submit_bio() converts it to a block status. > > > > Return the provider callback error directly. The generic flush path still > > returns 0, and pmem_submit_bio() already handles errno-to-blk_status > > conversion for bio completion. > > > > Signed-off-by: Li Chen <[email protected]> > > --- > > v3->v4: > > - New patch. > > > > drivers/nvdimm/region_devs.c | 6 ++---- > > 1 file changed, 2 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c > > index e35c2e18518f0..0cd96503c0596 100644 > > --- a/drivers/nvdimm/region_devs.c > > +++ b/drivers/nvdimm/region_devs.c > > @@ -1114,10 +1114,8 @@ int nvdimm_flush(struct nd_region *nd_region, > > struct bio *bio) > > > > if (!nd_region->flush) > > rc = generic_nvdimm_flush(nd_region); > > - else { > > - if (nd_region->flush(nd_region, bio)) > > - rc = -EIO; > > - } > > + else > > + rc = nd_region->flush(nd_region, bio); > > IIRC this was introduced as a generic populate error type since a > failed flush can also propagate host-side errors, which may not be > relevant to the guest. > That said, we could still consider handling specific cases like > -ENOMEM, unless there is a better approach to address this.
Ah, yes, you are absolutely right. I went too far here. Regards, Li

