On Thu, Sep 24, 2026 at 10:50:34AM +0800, Muchun Song wrote: > After the DAX configuration locking was converted to rwsems, successful > lock acquisition leaves rc set to zero in mapping_store(). Two error > paths can return this stale value: an unbound region driver and a > misaligned range size. The sysfs write therefore reports success without > allocating the requested range. > > Return -ENXIO when the region driver is not bound and -EINVAL when the > range size is misaligned.
Reviewed-by: Alison Schofield <[email protected]> Will modify subject line upon applying like so: dax/bus: Return errors for invalid mapping requests > > Fixes: c05ae9d85b47 ("dax/bus.c: replace driver-core lock usage by a local > rwsem") > Assisted-by: LLM > Signed-off-by: Muchun Song <[email protected]> > Reviewed-by: Dave Jiang <[email protected]> > --- > v3: > - Collect Reviewed-by from Dave Jiang > > v2: > - Return explicit errors before Device DAX range allocation > (suggested by Dave Jiang) > - Move the patch before range alignment validation for independent > backports (suggested by Dave Jiang) > --- > drivers/dax/bus.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c > index b809e1a264af..e40c25401cf0 100644 > --- a/drivers/dax/bus.c > +++ b/drivers/dax/bus.c > @@ -1192,7 +1192,7 @@ static ssize_t mapping_store(struct device *dev, struct > device_attribute *attr, > return rc; > if (!dax_region->dev->driver) { > up_write(&dax_region_rwsem); > - return rc; > + return -ENXIO; > } > rc = down_write_killable(&dax_dev_rwsem); > if (rc) { > @@ -1201,8 +1201,12 @@ static ssize_t mapping_store(struct device *dev, > struct device_attribute *attr, > } > > to_alloc = range_len(&r); > - if (alloc_is_aligned(dev_dax, to_alloc)) > + if (!alloc_is_aligned(dev_dax, to_alloc)) { > + dev_dbg(dev, "%s: size: %zu misaligned\n", __func__, to_alloc); > + rc = -EINVAL; > + } else { > rc = alloc_dev_dax_range(dev_dax, r.start, to_alloc); > + } > up_write(&dax_dev_rwsem); > up_write(&dax_region_rwsem); > > -- > 2.54.0 >

