After the DAX configuration locking was converted to rwsems, successful
lock acquisition leaves rc set to zero in mapping_store(). If the requested
range size is misaligned, the allocation is skipped and the zero rc is
converted to len. The sysfs write therefore reports success without
allocating the requested range.
Call alloc_dev_dax_range() unconditionally and let its full range
validation return -EINVAL for a misaligned start or size.
Fixes: c05ae9d85b47 ("dax/bus.c: replace driver-core lock usage by a local
rwsem")
Assisted-by: LLM
Signed-off-by: Muchun Song <[email protected]>
---
drivers/dax/bus.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c
index 54e4bbc98218..f232001ff5b7 100644
--- a/drivers/dax/bus.c
+++ b/drivers/dax/bus.c
@@ -1276,8 +1276,7 @@ static ssize_t mapping_store(struct device *dev, struct
device_attribute *attr,
}
to_alloc = range_len(&r);
- if (size_is_aligned(dev_dax, to_alloc))
- rc = alloc_dev_dax_range(dev_dax, r.start, to_alloc);
+ rc = alloc_dev_dax_range(dev_dax, r.start, to_alloc);
up_write(&dax_dev_rwsem);
up_write(&dax_region_rwsem);
--
2.54.0