Skip to content

Commit

Permalink
hpsa: Convert SCSI LLD ->queuecommand() for host_lock less operation
Browse files Browse the repository at this point in the history
There isn't anything in hpsa that requires the host lock to be held
during queuecommand.

Signed-off-by: Don Brace <don.brace@pmcs.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Reviewed-by: Stephen M. Cameron <stephenmcameron@gmail.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
  • Loading branch information
Nicholas Bellinger authored and Christoph Hellwig committed Nov 20, 2014
1 parent 2f371c9 commit 763aadb
Showing 1 changed file with 7 additions and 9 deletions.
16 changes: 7 additions & 9 deletions drivers/scsi/hpsa.c
Original file line number Diff line number Diff line change
Expand Up @@ -3881,8 +3881,11 @@ static int hpsa_scsi_ioaccel_raid_map(struct ctlr_info *h,
dev->scsi3addr);
}

static int hpsa_scsi_queue_command_lck(struct scsi_cmnd *cmd,
void (*done)(struct scsi_cmnd *))
/*
* Running in struct Scsi_Host->host_lock less mode using LLD internal
* struct ctlr_info *h->lock w/ spin_lock_irqsave() protection.
*/
static int hpsa_scsi_queue_command(struct Scsi_Host *sh, struct scsi_cmnd *cmd)
{
struct ctlr_info *h;
struct hpsa_scsi_dev_t *dev;
Expand All @@ -3895,14 +3898,14 @@ static int hpsa_scsi_queue_command_lck(struct scsi_cmnd *cmd,
dev = cmd->device->hostdata;
if (!dev) {
cmd->result = DID_NO_CONNECT << 16;
done(cmd);
cmd->scsi_done(cmd);
return 0;
}
memcpy(scsi3addr, dev->scsi3addr, sizeof(scsi3addr));

if (unlikely(lockup_detected(h))) {
cmd->result = DID_ERROR << 16;
done(cmd);
cmd->scsi_done(cmd);
return 0;
}
c = cmd_alloc(h);
Expand All @@ -3912,9 +3915,6 @@ static int hpsa_scsi_queue_command_lck(struct scsi_cmnd *cmd,
}

/* Fill in the command list header */

cmd->scsi_done = done; /* save this for use by completion code */

/* save c in case we have to abort it */
cmd->host_scribble = (unsigned char *) c;

Expand Down Expand Up @@ -4005,8 +4005,6 @@ static int hpsa_scsi_queue_command_lck(struct scsi_cmnd *cmd,
return 0;
}

static DEF_SCSI_QCMD(hpsa_scsi_queue_command)

static int do_not_scan_if_controller_locked_up(struct ctlr_info *h)
{
unsigned long flags;
Expand Down

0 comments on commit 763aadb

Please sign in to comment.