"Verma, Vishal L" <vishal.l.verma@xxxxxxxxx> writes: > 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? I think it's good to check kmem explicitly here. -- Best Regards, Huang, Ying