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.