On Wed, 2014-02-05 at 04:39 -0800, Christoph Hellwig wrote: > Avoid hitting the host-wide free_list lock unless we need to put a command > back onto the freelist. This one looks like it can go independently on its own. > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- > drivers/scsi/scsi.c | 13 +++++++------ > 1 file changed, 7 insertions(+), 6 deletions(-) > > diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c > index ebcea6c..4139486 100644 > --- a/drivers/scsi/scsi.c > +++ b/drivers/scsi/scsi.c > @@ -320,15 +320,16 @@ void __scsi_put_command(struct Scsi_Host *shost, struct scsi_cmnd *cmd, > { > unsigned long flags; > > - /* changing locks here, don't need to restore the irq state */ > - spin_lock_irqsave(&shost->free_list_lock, flags); > if (unlikely(list_empty(&shost->free_list))) { > - list_add(&cmd->list, &shost->free_list); > - cmd = NULL; > + spin_lock_irqsave(&shost->free_list_lock, flags); > + if (list_empty(&shost->free_list)) { > + list_add(&cmd->list, &shost->free_list); > + cmd = NULL; > + } > + spin_unlock_irqrestore(&shost->free_list_lock, flags); > } > - spin_unlock_irqrestore(&shost->free_list_lock, flags); > > - if (likely(cmd != NULL)) > + if (cmd) Why do this? cmd is still likely to be not NULL, which helps the compiler optimise. James > scsi_pool_free_command(shost->cmd_pool, cmd); > > put_device(dev); > -- > 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html