Re: [PATCH v5 2/2] dax/kmem: allow kmem to add memory with memmap_on_memory

From: Verma, Vishal L
Date: Tue Oct 17 2023 - 01:44:51 EST


On Tue, 2023-10-17 at 13:18 +0800, Huang, Ying wrote:
> "Verma, Vishal L" <vishal.l.verma@xxxxxxxxx> writes:
>
> > On Thu, 2023-10-05 at 14:16 -0700, Dan Williams wrote:
> > > Vishal Verma wrote:
> > > >
> > <..>
> >
> > > > +
> > > > +       rc = kstrtobool(buf, &val);
> > > > +       if (rc)
> > > > +               return rc;
> > >
> > > Perhaps:
> > >
> > > if (dev_dax->memmap_on_memory == val)
> > >         return len;
> > >
> > > ...and skip the check below when it is going to be a nop
> > >
> > > > +
> > > > +       device_lock(dax_region->dev);
> > > > +       if (!dax_region->dev->driver) {
> > >
> > > Is the polarity backwards here? I.e. if the device is already
> > > attached to
> > > the kmem driver it is too late to modify memmap_on_memory policy.
> >
> > Hm this sounded logical until I tried it. After a reconfigure-
> > device to
> > devdax (i.e. detach kmem), I get the -EBUSY if I invert this check.
>
> Can you try to unbind the device via sysfs by hand and retry?
>
I think what is happening maybe is while kmem gets detached, the device
goes back to another dax driver (hmem in my tests). So either way, the
check for if (driver) or if (!driver) won't distinguish between kmem
vs. something else.

Maybe we just remove this check? Or add an explicit kmem check somehow?