On Mon, 2024-04-29 at 18:25 -0700, Dan Williams wrote: > Vishal Verma wrote: > > Commit c05ae9d85b47 ("dax/bus.c: replace driver-core lock usage by a local rwsem") > > was a bit overzealous in eliminating device_lock() usage, and ended up > > removing a couple of lock acquisitions which were needed, and as a > > result, fix some of the conditional locking missteps that the above > > commit introduced in unregister_dax_dev() and unregister_dax_mapping(). > > I think it makes sense to tell the story a bit about why the > delete_store() conversion was problematic, because the > unregister_dev_dax() changes were just a knock-on effect to fixing the > delete_store() flow. > > Something like: > > --- > commit c05ae9d85b47 ("dax/bus.c: replace driver-core lock usage by a local rwsem") > aimed to undo device_lock() abuses for protecting changes to dax-driver > internal data-structures like the dax_region resource tree to > device-dax-instance range structures. However, the device_lock() was legitamately > enforcing that devices to be deleted were not current actively attached > to any driver nor assigned any capacity from the region. > --- > > ...you can fill in a couple notes about the knock-on fixups after that > was restored. Sounds good, updated! > > > > > @@ -560,15 +551,12 @@ static ssize_t delete_store(struct device *dev, struct device_attribute *attr, > > if (!victim) > > return -ENXIO; > > > > - rc = down_write_killable(&dax_region_rwsem); > > - if (rc) > > - return rc; > > - rc = down_write_killable(&dax_dev_rwsem); > > - if (rc) { > > - up_write(&dax_region_rwsem); > > - return rc; > > - } > > + device_lock(dev); > > + device_lock(victim); > > dev_dax = to_dev_dax(victim); > > + rc = down_write_killable(&dax_dev_rwsem); > > This begs the question, why down_write_killable(), but not > device_lock_interruptible()? Do you mean change the device_lock()s to device_lock_interruptible() in addition to the taking the rwsem (i.e. not instead of the rwsem..)? I guess I just restored what was there previously - but the interruptible variant makes sense, I can make that change. > > I do not expect any of this is long running so likely down_write() is > sufficient here, especially since the heaviest locks to acquire are > already held by the time rwsem is considered. > > Other than that this looks good to me: > > You can include my Reviewed-by on the next posting. Thanks for the review Dan!