On Thu, Aug 01, 2013 at 03:14:00PM +0200, Tomas Henzl wrote: > From: Tomas Henzl <thenzl@xxxxxxxxxx> > > When the driver calls scsi_done and after that frees it's internal > preallocated memory it can happen that a new job is enqueud before > the memory is freed. The allocation fails and the message > "cmd_alloc returned NULL" is shown. > Patch below fixes it by moving cmd->scsi_done after cmd_free. > > Signed-off-by: Tomas Henzl <thenzl@xxxxxxxxxx> > --- > drivers/scsi/hpsa.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c > index d7df01e..48fa81e 100644 > --- a/drivers/scsi/hpsa.c > +++ b/drivers/scsi/hpsa.c > @@ -1180,8 +1180,8 @@ static void complete_scsi_command(struct CommandList *cp) > scsi_set_resid(cmd, ei->ResidualCnt); > > if (ei->CommandStatus == 0) { > - cmd->scsi_done(cmd); > cmd_free(h, cp); > + cmd->scsi_done(cmd); > return; > } > > @@ -1353,8 +1353,8 @@ static void complete_scsi_command(struct CommandList *cp) > dev_warn(&h->pdev->dev, "cp %p returned unknown status %x\n", > cp, ei->CommandStatus); > } > - cmd->scsi_done(cmd); > cmd_free(h, cp); > + cmd->scsi_done(cmd); > } > > static void hpsa_pci_unmap(struct pci_dev *pdev, > -- > 1.8.3.1 Oh, nice catch!!! Those mysterious and seemingly never reproducible legends of the "cmd_alloc returned NULL" message that would show up *extremely* infrequently are finally explained! Ack. -- steve -- 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