diff options
| author | Moore, Eric <Eric.Moore@lsil.com> | 2006-01-25 20:05:12 -0500 |
|---|---|---|
| committer | James Bottomley <jejb@mulgrave.(none)> | 2006-01-31 15:39:38 -0500 |
| commit | 7d3eecf7b2195c64d26f7e7d105d00e5a6dd702e (patch) | |
| tree | 9de227b1c38f68e6c7312e85028ebb734457c7cd /drivers/message | |
| parent | c73787eecdbe4691d4e3f989052db8b552e1ac34 (diff) | |
[SCSI] fusion: target reset when drive is being removed
The issuing of the target reset
used in device hot removal case so the
firmware queue is flushed out off outstanding
commands.
Signed-off-by: Eric Moore <Eric.Moore@lsil.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/message')
| -rw-r--r-- | drivers/message/fusion/mptsas.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c index 8e77837c07..190bd940bb 100644 --- a/drivers/message/fusion/mptsas.c +++ b/drivers/message/fusion/mptsas.c | |||
| @@ -324,6 +324,7 @@ mptsas_slave_destroy(struct scsi_device *sdev) | |||
| 324 | struct sas_rphy *rphy; | 324 | struct sas_rphy *rphy; |
| 325 | struct mptsas_portinfo *p; | 325 | struct mptsas_portinfo *p; |
| 326 | int i; | 326 | int i; |
| 327 | VirtDevice *vdev; | ||
| 327 | 328 | ||
| 328 | /* | 329 | /* |
| 329 | * Handle hotplug removal case. | 330 | * Handle hotplug removal case. |
| @@ -347,8 +348,29 @@ mptsas_slave_destroy(struct scsi_device *sdev) | |||
| 347 | out: | 348 | out: |
| 348 | mutex_unlock(&hd->ioc->sas_topology_mutex); | 349 | mutex_unlock(&hd->ioc->sas_topology_mutex); |
| 349 | /* | 350 | /* |
| 350 | * TODO: Issue target reset to flush firmware outstanding commands. | 351 | * Issue target reset to flush firmware outstanding commands. |
| 351 | */ | 352 | */ |
| 353 | vdev = sdev->hostdata; | ||
| 354 | if (vdev->configured_lun){ | ||
| 355 | if (mptscsih_TMHandler(hd, | ||
| 356 | MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET, | ||
| 357 | vdev->bus_id, | ||
| 358 | vdev->target_id, | ||
| 359 | 0, 0, 5 /* 5 second timeout */) | ||
| 360 | < 0){ | ||
| 361 | |||
| 362 | /* The TM request failed! | ||
| 363 | * Fatal error case. | ||
| 364 | */ | ||
| 365 | printk(MYIOC_s_WARN_FMT | ||
| 366 | "Error processing TaskMgmt id=%d TARGET_RESET\n", | ||
| 367 | hd->ioc->name, | ||
| 368 | vdev->target_id); | ||
| 369 | |||
| 370 | hd->tmPending = 0; | ||
| 371 | hd->tmState = TM_STATE_NONE; | ||
| 372 | } | ||
| 373 | } | ||
| 352 | mptscsih_slave_destroy(sdev); | 374 | mptscsih_slave_destroy(sdev); |
| 353 | } | 375 | } |
| 354 | 376 | ||
