sbp2: proper treatment of DID_OK Sbp2 relied on DID_OK to be defined as 0. Always shift DID_OK into the right position anyway, and explicitly return DID_OK together with CHECK_CONDITION. Also comment on some #if 0 code. The patch does not change current behaviour. Signed-off-by: Stefan Richter --- drivers/ieee1394/sbp2.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) Index: linux-2.6.16-rc2/drivers/ieee1394/sbp2.c =================================================================== --- linux-2.6.16-rc2.orig/drivers/ieee1394/sbp2.c 2006-02-08 23:49:23.000000000 +0100 +++ linux-2.6.16-rc2/drivers/ieee1394/sbp2.c 2006-02-11 22:03:54.000000000 +0100 @@ -2423,7 +2423,7 @@ static void sbp2scsi_complete_command(st */ switch (scsi_status) { case SBP2_SCSI_STATUS_GOOD: - SCpnt->result = DID_OK; + SCpnt->result = DID_OK << 16; break; case SBP2_SCSI_STATUS_BUSY: @@ -2433,7 +2433,7 @@ static void sbp2scsi_complete_command(st case SBP2_SCSI_STATUS_CHECK_CONDITION: SBP2_DEBUG("SBP2_SCSI_STATUS_CHECK_CONDITION"); - SCpnt->result = CHECK_CONDITION << 1; + SCpnt->result = CHECK_CONDITION << 1 | DID_OK << 16; /* * Debug stuff @@ -2467,7 +2467,7 @@ static void sbp2scsi_complete_command(st /* * Take care of any sbp2 response data mucking here (RBC stuff, etc.) */ - if (SCpnt->result == DID_OK) { + if (SCpnt->result == DID_OK << 16) { sbp2_check_sbp2_response(scsi_id, SCpnt); } @@ -2485,6 +2485,8 @@ static void sbp2scsi_complete_command(st * If a unit attention occurs, return busy status so it gets * retried... it could have happened because of a 1394 bus reset * or hot-plug... + * XXX DID_BUS_BUSY is actually a bad idea because it will defy + * the scsi layer's retry logic. */ #if 0 if ((scsi_status == SBP2_SCSI_STATUS_CHECK_CONDITION) &&