diff options
author | Matthew Wilcox <matthew@wil.cx> | 2005-11-29 23:08:40 -0500 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.(none)> | 2005-12-13 17:27:10 -0700 |
commit | 322e079f1b606e46b79bb8b8e6cf6110b5f2aa3f (patch) | |
tree | 541a03bb0d7ff2809069122e5b10431072124587 /drivers/scsi/sym53c8xx_2 | |
parent | 1a68de5c08be8c77c4ad208306187bd95107c7cd (diff) | |
download | lwn-322e079f1b606e46b79bb8b8e6cf6110b5f2aa3f.tar.gz lwn-322e079f1b606e46b79bb8b8e6cf6110b5f2aa3f.zip |
[SCSI] Negotiate correctly with async-only devices
When we got a device only capable of async, we would zero out goal->period
which would cause us to try PPR negotiations. Leave goal->period alone,
and check goal->offset before doing PPR. Kudos to Daniel Forsgren for
figuring this out.
Signed-off-by: Matthew Wilcox <matthew@wil.cx>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/sym53c8xx_2')
-rw-r--r-- | drivers/scsi/sym53c8xx_2/sym_hipd.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.c b/drivers/scsi/sym53c8xx_2/sym_hipd.c index a7420cad4547..1564ca203a3e 100644 --- a/drivers/scsi/sym53c8xx_2/sym_hipd.c +++ b/drivers/scsi/sym53c8xx_2/sym_hipd.c @@ -1405,7 +1405,6 @@ static void sym_check_goals(struct sym_hcb *np, struct scsi_target *starget, goal->iu = 0; goal->dt = 0; goal->qas = 0; - goal->period = 0; goal->offset = 0; return; } @@ -1465,7 +1464,8 @@ static int sym_prepare_nego(struct sym_hcb *np, struct sym_ccb *cp, u_char *msgp * Many devices implement PPR in a buggy way, so only use it if we * really want to. */ - if (goal->iu || goal->dt || goal->qas || (goal->period < 0xa)) { + if (goal->offset && + (goal->iu || goal->dt || goal->qas || (goal->period < 0xa))) { nego = NS_PPR; } else if (spi_width(starget) != goal->width) { nego = NS_WIDE; |