On 6/7/26 12:34 PM, John Groves wrote:
> From: John Groves <[email protected]>
> 
> Convert the WARN_ON to a fatal error when pgmap_phys > phys. This
> condition means the remapped region starts after the device's data
> region, which is an impossible state. Previously the probe continued
> with data_offset=0, leaving virt_addr silently misaligned. Now probe
> returns -EINVAL with a diagnostic message.
> 
> Fixes: 759455848df0b ("dax: Save the kva from memremap")
> 
> Reviewed-by: Alison Schofield <[email protected]>
> Signed-off-by: John Groves <[email protected]>

Reviewed-by: Dave Jiang <[email protected]>

> ---
>  drivers/dax/fsdev.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/dax/fsdev.c b/drivers/dax/fsdev.c
> index af9ef80c05c6d..dcb512625ce65 100644
> --- a/drivers/dax/fsdev.c
> +++ b/drivers/dax/fsdev.c
> @@ -320,8 +320,12 @@ static int fsdev_dax_probe(struct dev_dax *dev_dax)
>               u64 phys = dev_dax->ranges[0].range.start;
>               u64 pgmap_phys = pgmap[0].range.start;
>  
> -             if (!WARN_ON(pgmap_phys > phys))
> -                     data_offset = phys - pgmap_phys;
> +             if (pgmap_phys > phys) {
> +                     dev_err(dev, "pgmap start %#llx exceeds data start 
> %#llx\n",
> +                             pgmap_phys, phys);
> +                     return -EINVAL;
> +             }
> +             data_offset = phys - pgmap_phys;
>  
>               pr_debug("%s: offset detected phys=%llx pgmap_phys=%llx 
> offset=%llx\n",
>                      __func__, phys, pgmap_phys, data_offset);


Reply via email to