[libata] remove SCSI host lock and serial number usage from ata_scsi_queuecmd

cmd->serial_number is never tested in any path we reach; therefore we may
remove the call to scsi_cmd_get_serial() inside DEF_SCSI_QCMD, the SCSI
host_lock acquisition surrounding it, and our own SCSI host_lock
unlock+relock cycle.

Signed-off-by: Jeff Garzik <jgarzik@redhat.com>

authored by Jeff Garzik and committed by Jeff Garzik 23e701e6 d33fdee4

+9 -12
+9 -12
drivers/ata/libata-scsi.c
··· 3166 3167 /** 3168 * ata_scsi_queuecmd - Issue SCSI cdb to libata-managed device 3169 * @cmd: SCSI command to be sent 3170 - * @done: Completion function, called when command is complete 3171 * 3172 * In some cases, this function translates SCSI commands into 3173 * ATA taskfiles, and queues the taskfiles to be sent to ··· 3177 * ATA and ATAPI devices appearing as SCSI devices. 3178 * 3179 * LOCKING: 3180 - * Releases scsi-layer-held lock, and obtains host lock. 3181 * 3182 * RETURNS: 3183 * Return value from __ata_scsi_queuecmd() if @cmd can be queued, 3184 * 0 otherwise. 3185 */ 3186 - static int ata_scsi_queuecmd_lck(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *)) 3187 { 3188 struct ata_port *ap; 3189 struct ata_device *dev; 3190 struct scsi_device *scsidev = cmd->device; 3191 - struct Scsi_Host *shost = scsidev->host; 3192 int rc = 0; 3193 3194 ap = ata_shost_to_port(shost); 3195 3196 - spin_unlock(shost->host_lock); 3197 - spin_lock(ap->lock); 3198 3199 ata_scsi_dump_cdb(ap, cmd); 3200 3201 dev = ata_scsi_find_dev(ap, scsidev); 3202 if (likely(dev)) 3203 - rc = __ata_scsi_queuecmd(cmd, done, dev); 3204 else { 3205 cmd->result = (DID_BAD_TARGET << 16); 3206 - done(cmd); 3207 } 3208 3209 - spin_unlock(ap->lock); 3210 - spin_lock(shost->host_lock); 3211 return rc; 3212 } 3213 - 3214 - DEF_SCSI_QCMD(ata_scsi_queuecmd) 3215 3216 /** 3217 * ata_scsi_simulate - simulate SCSI command on ATA device
··· 3166 3167 /** 3168 * ata_scsi_queuecmd - Issue SCSI cdb to libata-managed device 3169 + * @shost: SCSI host of command to be sent 3170 * @cmd: SCSI command to be sent 3171 * 3172 * In some cases, this function translates SCSI commands into 3173 * ATA taskfiles, and queues the taskfiles to be sent to ··· 3177 * ATA and ATAPI devices appearing as SCSI devices. 3178 * 3179 * LOCKING: 3180 + * ATA host lock 3181 * 3182 * RETURNS: 3183 * Return value from __ata_scsi_queuecmd() if @cmd can be queued, 3184 * 0 otherwise. 3185 */ 3186 + int ata_scsi_queuecmd(struct Scsi_Host *shost, struct scsi_cmnd *cmd) 3187 { 3188 struct ata_port *ap; 3189 struct ata_device *dev; 3190 struct scsi_device *scsidev = cmd->device; 3191 int rc = 0; 3192 + unsigned long irq_flags; 3193 3194 ap = ata_shost_to_port(shost); 3195 3196 + spin_lock_irqsave(ap->lock, irq_flags); 3197 3198 ata_scsi_dump_cdb(ap, cmd); 3199 3200 dev = ata_scsi_find_dev(ap, scsidev); 3201 if (likely(dev)) 3202 + rc = __ata_scsi_queuecmd(cmd, cmd->scsi_done, dev); 3203 else { 3204 cmd->result = (DID_BAD_TARGET << 16); 3205 + cmd->scsi_done(cmd); 3206 } 3207 3208 + spin_unlock_irqrestore(ap->lock, irq_flags); 3209 + 3210 return rc; 3211 } 3212 3213 /** 3214 * ata_scsi_simulate - simulate SCSI command on ATA device