Skip to content

Commit

Permalink
[SCSI] scsi_transport_sas: move bsg destructor into sas_rphy_remove
Browse files Browse the repository at this point in the history
The recent change in sysfs, bcdde7e
"sysfs: make __sysfs_remove_dir() recursive" revealed an asymmetric
rphy device creation/deletion sequence in scsi_transport_sas:

  modprobe mpt2sas
    sas_rphy_add
      device_add A               rphy->dev
      device_add B               sas_device transport class
      device_add C               sas_end_device transport class
      device_add D               bsg class

  rmmod mpt2sas
    sas_rphy_delete
      sas_rphy_remove
        device_del B
        device_del C
        device_del A
          sysfs_remove_group     recursive sysfs dir removal
      sas_rphy_free
        device_del D             warning

  where device A is the parent of B, C, and D.

When sas_rphy_free tries to unregister the bsg request queue (device D
above), the ensuing sysfs cleanup discovers that its sysfs group has
already been removed and emits a warning, "sysfs group... not found for
kobject 'end_device-X:0'".

Since bsg creation is a side effect of sas_rphy_add, move its
complementary removal call into sas_rphy_remove. This imposes the
following tear-down order for the devices above: D, B, C, A.

Note the sas_device and sas_end_device transport class devices (B and C
above) are created and destroyed both via the list match traversal in
attribute_container_device_trigger, so the order in which they are
handled is fixed. This is fine as long as they are deleted before their
parent device.

Signed-off-by: Joe Lawrence <[email protected]>
Acked-by: Dan Williams <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
  • Loading branch information
Joe Lawrence authored and James Bottomley committed May 22, 2014
1 parent 0c8482a commit 6aa6caf
Showing 1 changed file with 1 addition and 2 deletions.
3 changes: 1 addition & 2 deletions drivers/scsi/scsi_transport_sas.c
Original file line number Diff line number Diff line change
Expand Up @@ -1621,8 +1621,6 @@ void sas_rphy_free(struct sas_rphy *rphy)
list_del(&rphy->list);
mutex_unlock(&sas_host->lock);

sas_bsg_remove(shost, rphy);

transport_destroy_device(dev);

put_device(dev);
Expand Down Expand Up @@ -1681,6 +1679,7 @@ sas_rphy_remove(struct sas_rphy *rphy)
}

sas_rphy_unlink(rphy);
sas_bsg_remove(NULL, rphy);
transport_remove_device(dev);
device_del(dev);
}
Expand Down

0 comments on commit 6aa6caf

Please sign in to comment.