On Wed, 2017-11-29 at 13:49 -0500, Ewan D. Milne wrote: > because a get inside a destructor would *always* be wrong, no? Hello Ewan, That's not what we are discussing. What can happen with the SCSI core is that get_device() is called concurrently with the destructor. get_device() can be called concurrently with the destructor because the destructore removes a device from the siblings list and because the SCSI core can call get_device() for devices it finds on the siblings list. Personally I think that design is superior compared to removing a SCSI device from the sibling list before the last put_device() call because the approach followed in the SCSI core leads to a simpler implementation. However, it seems like the current get_device() implementation does not yet support the SCSI core design ... Bart.