Commit ddf59a35e98aa12255ed64c892271339504cc65c

Authored by Eric Moore
Committed by James Bottomley
1 parent 993e0da7b7

[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 }