aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/scsi
diff options
context:
space:
mode:
authorChristof Schmitt <christof.schmitt@de.ibm.com>2009-09-24 04:23:23 -0400
committerJames Bottomley <James.Bottomley@suse.de>2009-10-02 10:49:59 -0400
commit1f99bd4cbfa50be144aee24905befc1209d90d47 (patch)
tree623218f3c760153a5a5103f961cf1726af18ff9e /drivers/s390/scsi
parentc5afd81e5d7ebacc9dd23954e169ac79a34fe399 (diff)
[SCSI] zfcp: Fix oops during shutdown of offline device
With the change that the zfcp_adapter struct is only allocated when the device is set online, the shutdown handler has to check for a non-existing zfcp_adapter struct. On the other hand, this check is not necessary in the offline callback, since an online device has the zfcp_adapter allocated and we go through the offline callback before removing the ccw device. Reviewed-by: Felix Beck <felix.beck@de.ibm.com> Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/s390/scsi')
-rw-r--r--drivers/s390/scsi/zfcp_ccw.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/s390/scsi/zfcp_ccw.c b/drivers/s390/scsi/zfcp_ccw.c
index ef5282dcdbb..95644b71836 100644
--- a/drivers/s390/scsi/zfcp_ccw.c
+++ b/drivers/s390/scsi/zfcp_ccw.c
@@ -192,13 +192,9 @@ static int zfcp_ccw_set_offline(struct ccw_device *ccw_device)
192 192
193 mutex_lock(&zfcp_data.config_mutex); 193 mutex_lock(&zfcp_data.config_mutex);
194 adapter = dev_get_drvdata(&ccw_device->dev); 194 adapter = dev_get_drvdata(&ccw_device->dev);
195 if (!adapter)
196 goto out;
197
198 zfcp_erp_adapter_shutdown(adapter, 0, "ccsoff1", NULL); 195 zfcp_erp_adapter_shutdown(adapter, 0, "ccsoff1", NULL);
199 zfcp_erp_wait(adapter); 196 zfcp_erp_wait(adapter);
200 mutex_unlock(&zfcp_data.config_mutex); 197 mutex_unlock(&zfcp_data.config_mutex);
201out:
202 return 0; 198 return 0;
203} 199}
204 200
@@ -253,9 +249,13 @@ static void zfcp_ccw_shutdown(struct ccw_device *cdev)
253 249
254 mutex_lock(&zfcp_data.config_mutex); 250 mutex_lock(&zfcp_data.config_mutex);
255 adapter = dev_get_drvdata(&cdev->dev); 251 adapter = dev_get_drvdata(&cdev->dev);
252 if (!adapter)
253 goto out;
254
256 zfcp_erp_adapter_shutdown(adapter, 0, "ccshut1", NULL); 255 zfcp_erp_adapter_shutdown(adapter, 0, "ccshut1", NULL);
257 zfcp_erp_wait(adapter); 256 zfcp_erp_wait(adapter);
258 zfcp_erp_thread_kill(adapter); 257 zfcp_erp_thread_kill(adapter);
258out:
259 mutex_unlock(&zfcp_data.config_mutex); 259 mutex_unlock(&zfcp_data.config_mutex);
260} 260}
261 261