diff options
Diffstat (limited to 'drivers/scsi/mpt2sas/mpt2sas_ctl.c')
-rw-r--r-- | drivers/scsi/mpt2sas/mpt2sas_ctl.c | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/drivers/scsi/mpt2sas/mpt2sas_ctl.c b/drivers/scsi/mpt2sas/mpt2sas_ctl.c index ba6ab170bdf0..14e473d1fa7b 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_ctl.c +++ b/drivers/scsi/mpt2sas/mpt2sas_ctl.c | |||
@@ -473,7 +473,7 @@ _ctl_poll(struct file *filep, poll_table *wait) | |||
473 | } | 473 | } |
474 | 474 | ||
475 | /** | 475 | /** |
476 | * _ctl_do_task_abort - assign an active smid to the abort_task | 476 | * _ctl_set_task_mid - assign an active smid to tm request |
477 | * @ioc: per adapter object | 477 | * @ioc: per adapter object |
478 | * @karg - (struct mpt2_ioctl_command) | 478 | * @karg - (struct mpt2_ioctl_command) |
479 | * @tm_request - pointer to mf from user space | 479 | * @tm_request - pointer to mf from user space |
@@ -482,7 +482,7 @@ _ctl_poll(struct file *filep, poll_table *wait) | |||
482 | * during failure, the reply frame is filled. | 482 | * during failure, the reply frame is filled. |
483 | */ | 483 | */ |
484 | static int | 484 | static int |
485 | _ctl_do_task_abort(struct MPT2SAS_ADAPTER *ioc, struct mpt2_ioctl_command *karg, | 485 | _ctl_set_task_mid(struct MPT2SAS_ADAPTER *ioc, struct mpt2_ioctl_command *karg, |
486 | Mpi2SCSITaskManagementRequest_t *tm_request) | 486 | Mpi2SCSITaskManagementRequest_t *tm_request) |
487 | { | 487 | { |
488 | u8 found = 0; | 488 | u8 found = 0; |
@@ -494,6 +494,14 @@ _ctl_do_task_abort(struct MPT2SAS_ADAPTER *ioc, struct mpt2_ioctl_command *karg, | |||
494 | Mpi2SCSITaskManagementReply_t *tm_reply; | 494 | Mpi2SCSITaskManagementReply_t *tm_reply; |
495 | u32 sz; | 495 | u32 sz; |
496 | u32 lun; | 496 | u32 lun; |
497 | char *desc = NULL; | ||
498 | |||
499 | if (tm_request->TaskType == MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK) | ||
500 | desc = "abort_task"; | ||
501 | else if (tm_request->TaskType == MPI2_SCSITASKMGMT_TASKTYPE_QUERY_TASK) | ||
502 | desc = "query_task"; | ||
503 | else | ||
504 | return 0; | ||
497 | 505 | ||
498 | lun = scsilun_to_int((struct scsi_lun *)tm_request->LUN); | 506 | lun = scsilun_to_int((struct scsi_lun *)tm_request->LUN); |
499 | 507 | ||
@@ -517,13 +525,13 @@ _ctl_do_task_abort(struct MPT2SAS_ADAPTER *ioc, struct mpt2_ioctl_command *karg, | |||
517 | spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); | 525 | spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); |
518 | 526 | ||
519 | if (!found) { | 527 | if (!found) { |
520 | dctlprintk(ioc, printk(MPT2SAS_DEBUG_FMT "ABORT_TASK: " | 528 | dctlprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s: " |
521 | "DevHandle(0x%04x), lun(%d), no active mid!!\n", ioc->name, | 529 | "handle(0x%04x), lun(%d), no active mid!!\n", ioc->name, |
522 | tm_request->DevHandle, lun)); | 530 | desc, tm_request->DevHandle, lun)); |
523 | tm_reply = ioc->ctl_cmds.reply; | 531 | tm_reply = ioc->ctl_cmds.reply; |
524 | tm_reply->DevHandle = tm_request->DevHandle; | 532 | tm_reply->DevHandle = tm_request->DevHandle; |
525 | tm_reply->Function = MPI2_FUNCTION_SCSI_TASK_MGMT; | 533 | tm_reply->Function = MPI2_FUNCTION_SCSI_TASK_MGMT; |
526 | tm_reply->TaskType = MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK; | 534 | tm_reply->TaskType = tm_request->TaskType; |
527 | tm_reply->MsgLength = sizeof(Mpi2SCSITaskManagementReply_t)/4; | 535 | tm_reply->MsgLength = sizeof(Mpi2SCSITaskManagementReply_t)/4; |
528 | tm_reply->VP_ID = tm_request->VP_ID; | 536 | tm_reply->VP_ID = tm_request->VP_ID; |
529 | tm_reply->VF_ID = tm_request->VF_ID; | 537 | tm_reply->VF_ID = tm_request->VF_ID; |
@@ -535,9 +543,9 @@ _ctl_do_task_abort(struct MPT2SAS_ADAPTER *ioc, struct mpt2_ioctl_command *karg, | |||
535 | return 1; | 543 | return 1; |
536 | } | 544 | } |
537 | 545 | ||
538 | dctlprintk(ioc, printk(MPT2SAS_DEBUG_FMT "ABORT_TASK: " | 546 | dctlprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s: " |
539 | "DevHandle(0x%04x), lun(%d), smid(%d)\n", ioc->name, | 547 | "handle(0x%04x), lun(%d), task_mid(%d)\n", ioc->name, |
540 | tm_request->DevHandle, lun, tm_request->TaskMID)); | 548 | desc, tm_request->DevHandle, lun, tm_request->TaskMID)); |
541 | return 0; | 549 | return 0; |
542 | } | 550 | } |
543 | 551 | ||
@@ -739,8 +747,10 @@ _ctl_do_mpt_command(struct MPT2SAS_ADAPTER *ioc, | |||
739 | (Mpi2SCSITaskManagementRequest_t *)mpi_request; | 747 | (Mpi2SCSITaskManagementRequest_t *)mpi_request; |
740 | 748 | ||
741 | if (tm_request->TaskType == | 749 | if (tm_request->TaskType == |
742 | MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK) { | 750 | MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK || |
743 | if (_ctl_do_task_abort(ioc, &karg, tm_request)) { | 751 | tm_request->TaskType == |
752 | MPI2_SCSITASKMGMT_TASKTYPE_QUERY_TASK) { | ||
753 | if (_ctl_set_task_mid(ioc, &karg, tm_request)) { | ||
744 | mpt2sas_base_free_smid(ioc, smid); | 754 | mpt2sas_base_free_smid(ioc, smid); |
745 | goto out; | 755 | goto out; |
746 | } | 756 | } |