[SCSI] zfcp: Allow running unit/LUN shutdown without acquiring reference
authorChristof Schmitt <christof.schmitt@de.ibm.com>
Wed, 8 Sep 2010 12:39:54 +0000 (14:39 +0200)
committerJames Bottomley <James.Bottomley@suse.de>
Fri, 17 Sep 2010 02:54:16 +0000 (22:54 -0400)
commitfdbd1c5e27dabfa950d4b0f52a20069aeaf67b9d
tree402ea45cf57a2fdcef7a6011a1c64bc7d43cc66e
parente4b9857fe628b453983cac89473a11a76a1f5786
[SCSI] zfcp: Allow running unit/LUN shutdown without acquiring reference

With the change for the LUN data to be part of the scsi_device, the
slave_destroy callback will be the final call to the
zfcp_erp_unit_shutdown function. The erp tries to acquire a reference
to run the action asynchronously and fail, if it cannot get the
reference. But calling scsi_device_get from slave_destroy will fail,
because the scsi_device is already in the state SDEV_DEL.

Introduce a new call into the zfcp erp to solve this: The function
zfcp_erp_unit_shutdown_wait will close the LUN and wait for the erp to
finish without acquiring an additional reference. The wait allows to
omit the reference; the caller waiting for the erp to finish already
has a reference that holds the struct in place.

Reviewed-by: Swen Schillig <swen@vnet.ibm.com>
Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/s390/scsi/zfcp_erp.c
drivers/s390/scsi/zfcp_ext.h