Commit ddf59a35e98aa12255ed64c892271339504cc65c
Committed by
James Bottomley
1 parent
993e0da7b7
Exists in
master
and in
7 other branches
[SCSI] mpt2sas: add query task support for MPT2COMMAND ioctl
This patch will find an active mid for a query_task request via the ioctl path. This code is already there for task_abort, so this patch combining code using the same fuction _ctl_set_task_mid(), previously _ctl_do_task_abort(). Signed-off-by: Eric Moore <eric.moore@lsi.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Showing 1 changed file with 21 additions and 11 deletions Side-by-side Diff
drivers/scsi/mpt2sas/mpt2sas_ctl.c
... | ... | @@ -473,7 +473,7 @@ |
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 | 477 | * @ioc: per adapter object |
478 | 478 | * @karg - (struct mpt2_ioctl_command) |
479 | 479 | * @tm_request - pointer to mf from user space |
... | ... | @@ -482,7 +482,7 @@ |
482 | 482 | * during failure, the reply frame is filled. |
483 | 483 | */ |
484 | 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 | 486 | Mpi2SCSITaskManagementRequest_t *tm_request) |
487 | 487 | { |
488 | 488 | u8 found = 0; |
489 | 489 | |
... | ... | @@ -494,7 +494,15 @@ |
494 | 494 | Mpi2SCSITaskManagementReply_t *tm_reply; |
495 | 495 | u32 sz; |
496 | 496 | u32 lun; |
497 | + char *desc = NULL; | |
497 | 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; | |
505 | + | |
498 | 506 | lun = scsilun_to_int((struct scsi_lun *)tm_request->LUN); |
499 | 507 | |
500 | 508 | handle = le16_to_cpu(tm_request->DevHandle); |
501 | 509 | |
... | ... | @@ -517,13 +525,13 @@ |
517 | 525 | spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); |
518 | 526 | |
519 | 527 | if (!found) { |
520 | - dctlprintk(ioc, printk(MPT2SAS_DEBUG_FMT "ABORT_TASK: " | |
521 | - "DevHandle(0x%04x), lun(%d), no active mid!!\n", ioc->name, | |
522 | - tm_request->DevHandle, lun)); | |
528 | + dctlprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s: " | |
529 | + "handle(0x%04x), lun(%d), no active mid!!\n", ioc->name, | |
530 | + desc, tm_request->DevHandle, lun)); | |
523 | 531 | tm_reply = ioc->ctl_cmds.reply; |
524 | 532 | tm_reply->DevHandle = tm_request->DevHandle; |
525 | 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 | 535 | tm_reply->MsgLength = sizeof(Mpi2SCSITaskManagementReply_t)/4; |
528 | 536 | tm_reply->VP_ID = tm_request->VP_ID; |
529 | 537 | tm_reply->VF_ID = tm_request->VF_ID; |
... | ... | @@ -535,9 +543,9 @@ |
535 | 543 | return 1; |
536 | 544 | } |
537 | 545 | |
538 | - dctlprintk(ioc, printk(MPT2SAS_DEBUG_FMT "ABORT_TASK: " | |
539 | - "DevHandle(0x%04x), lun(%d), smid(%d)\n", ioc->name, | |
540 | - tm_request->DevHandle, lun, tm_request->TaskMID)); | |
546 | + dctlprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s: " | |
547 | + "handle(0x%04x), lun(%d), task_mid(%d)\n", ioc->name, | |
548 | + desc, tm_request->DevHandle, lun, tm_request->TaskMID)); | |
541 | 549 | return 0; |
542 | 550 | } |
543 | 551 | |
... | ... | @@ -739,8 +747,10 @@ |
739 | 747 | (Mpi2SCSITaskManagementRequest_t *)mpi_request; |
740 | 748 | |
741 | 749 | if (tm_request->TaskType == |
742 | - MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK) { | |
743 | - if (_ctl_do_task_abort(ioc, &karg, tm_request)) { | |
750 | + MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK || | |
751 | + tm_request->TaskType == | |
752 | + MPI2_SCSITASKMGMT_TASKTYPE_QUERY_TASK) { | |
753 | + if (_ctl_set_task_mid(ioc, &karg, tm_request)) { | |
744 | 754 | mpt2sas_base_free_smid(ioc, smid); |
745 | 755 | goto out; |
746 | 756 | } |