mirror of https://gitee.com/openkylin/linux.git
[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>
This commit is contained in:
parent
1a68de5c08
commit
322e079f1b
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue