On Tue, 2 Sep 2008, Pavel Machek wrote: > > > > You'd make scsi driver writers' life easier if you made sure no autosuspends > > > > happen while they recover from errors. After all, you have no idea which > > > > commands will get through while the bus is in disarray. > > > > > > Well, they have to handle other commands while bus has problems, > > > anyway, right? So I'm not creating any _new_ problems for them. > > > > > > Pavel > > > > > > I am afraid this is not true. > > I guess you are right. > ...but this should fix it, no? [incremental to previous] > Pavel > > diff --git a/drivers/scsi/scsi_pm.c b/drivers/scsi/scsi_pm.c > index 3c184fe..7e5ea0d 100644 > --- a/drivers/scsi/scsi_pm.c > +++ b/drivers/scsi/scsi_pm.c > @@ -10,6 +10,7 @@ #define DEBUG > #include <scsi/scsi.h> > #include <scsi/scsi_device.h> > #include <scsi/scsi_host.h> > +#include <scsi/scsi_eh.h> > > #include <linux/delay.h> > > @@ -128,8 +129,11 @@ static int autosuspend_check(struct scsi > if (!(sdev->sdev_state == SDEV_RUNNING || > sdev->sdev_state == SDEV_QUIESCE)) > return -ENODEV; > + if (!scsi_block_when_processing_errors(sdev)) > + return -EBUSY; > > suspend_time = sdev->last_busy + sdev->autosuspend_delay; > + /* FIXME: what if suspend_time - jiffies == -EPERM by some strange chance */ > if (time_before(jiffies, suspend_time)) > return suspend_time - jiffies; > return 0; If I'm not mistaken, while error hanlding is in progress we always have shost->shost_state equal to either SHOST_RECOVERY or SHOST_CANCEL_RECOVERY. This is a better test to use. Alan Stern _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm