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?