Re: [PATCH 2/5] fusion: vmware bug fix prevent inifinite retries

James Bottomley
2007-01-06T16:28:45Z

On Sat, 2007-01-06 at 09:10 -0700, Matthew Wilcox wrote:
> On Sat, Jan 06, 2007 at 09:30:45AM -0600, James Bottomley wrote:
> > On Thu, 2007-01-04 at 20:46 -0700, Eric Moore wrote:
> > > - if (scsi_status == MPI_SCSI_STATUS_BUSY)
> > > + if (ioc->bus_type != SPI && scsi_status == MPI_SCSI_STATUS_BUSY)
> > > sc->result = (DID_BUS_BUSY << 16) | scsi_status;
> > > else
> > > sc->result = (DID_OK << 16) | scsi_status;
> >
> > DID_BUS_BUSY causes an immediate retry, but it does debit the retry
> > count, so it shouldn't cause "infinite retries" ... if it does, there's
> > something else wrong here.
>
> I wonder if this is the same bug I'm chasing (on ia64 machines,
> reproduced with both Montecito and Madison).

I don't think so ... the done() breaks the stack chain by queueing it up
for the softirq to complete. In order to get the recursion you see, we
have to go straight to requeue from dispatch_cmd.

At a rough guess I'd say what you're seeing could be a result of the
requeue in scsi_dispatch_cmd caused by the device being in SDEV_BLOCK.

James