aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/scsi/zfcp_scsi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/scsi/zfcp_scsi.c')
-rw-r--r--drivers/s390/scsi/zfcp_scsi.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c
index fffd12399010..3b5d48c61534 100644
--- a/drivers/s390/scsi/zfcp_scsi.c
+++ b/drivers/s390/scsi/zfcp_scsi.c
@@ -558,9 +558,8 @@ static int
558zfcp_task_management_function(struct zfcp_unit *unit, u8 tm_flags) 558zfcp_task_management_function(struct zfcp_unit *unit, u8 tm_flags)
559{ 559{
560 struct zfcp_adapter *adapter = unit->port->adapter; 560 struct zfcp_adapter *adapter = unit->port->adapter;
561 int retval;
562 int status;
563 struct zfcp_fsf_req *fsf_req; 561 struct zfcp_fsf_req *fsf_req;
562 int retval = 0;
564 563
565 /* issue task management function */ 564 /* issue task management function */
566 fsf_req = zfcp_fsf_send_fcp_command_task_management 565 fsf_req = zfcp_fsf_send_fcp_command_task_management
@@ -574,18 +573,16 @@ zfcp_task_management_function(struct zfcp_unit *unit, u8 tm_flags)
574 goto out; 573 goto out;
575 } 574 }
576 575
577 retval = zfcp_fsf_req_wait_and_cleanup(fsf_req, 576 __wait_event(fsf_req->completion_wq,
578 ZFCP_UNINTERRUPTIBLE, &status); 577 fsf_req->status & ZFCP_STATUS_FSFREQ_COMPLETED);
579 /* 578
580 * check completion status of task management function 579 /* check completion status of task management function */
581 * (status should always be valid since no signals permitted) 580 if (fsf_req->status & ZFCP_STATUS_FSFREQ_TMFUNCFAILED)
582 */
583 if (status & ZFCP_STATUS_FSFREQ_TMFUNCFAILED)
584 retval = -EIO; 581 retval = -EIO;
585 else if (status & ZFCP_STATUS_FSFREQ_TMFUNCNOTSUPP) 582 else if (fsf_req->status & ZFCP_STATUS_FSFREQ_TMFUNCNOTSUPP)
586 retval = -ENOTSUPP; 583 retval = -ENOTSUPP;
587 else 584
588 retval = 0; 585 zfcp_fsf_req_free(fsf_req);
589 out: 586 out:
590 return retval; 587 return retval;
591} 588}