Re: [v1 2/2] device-dax: "Hotremove" persistent memory that is used like normal RAM

From: Dan Williams
Date: Sat Apr 20 2019 - 12:36:55 EST


On Sat, Apr 20, 2019 at 9:30 AM Pavel Tatashin
<pasha.tatashin@xxxxxxxxxx> wrote:
>
> > > +
> > > + /* Walk and offline every singe memory_block of the dax region. */
> > > + lock_device_hotplug();
> > > + rc = walk_memory_range(start_pfn, end_pfn, dev, offline_memblock_cb);
> > > + unlock_device_hotplug();
> > > + if (rc)
> > > + return rc;
> >
> > This potential early return is the reason why memory hotremove is not
> > reliable vs the driver-core. If this walk fails to offline the memory
> > it will still be online, but the driver-core has no consideration for
> > device-unbind failing. The ubind will proceed while the memory stays
> > pinned.
>
> Hi Dan,
>
> Thank you for looking at this. Are you saying, that if drv.remove()
> returns a failure it is simply ignored, and unbind proceeds?

Yeah, that's the problem. I've looked at making unbind able to fail,
but that can lead to general bad behavior in device-drivers. I.e. why
spend time unwinding allocated resources when the driver can simply
fail unbind? About the best a driver can do is make unbind wait on
some event, but any return results in device-unbind.