Re: "WRITE SAME failed. Manually zeroing" with 3w-xxxx driver
On Mon, Apr 29, 2013 at 9:13 AM, Martin K. Petersen wrote: >> "Florian" == Florian Westphal writes: > > Florian> After update to 3.8 dmesg is spammed with: kernel: [ > Florian> 280.272094] 3w-: scsi8: Unknown scsi opcode: 0x41 kernel: [ > Florian> 280.272107] sd 8:0:0:0: [sda] Unhandled error code kernel: > > Interesting. It looks like the 3ware handles this at the driver level > instead of passing the command through to the disk and letting it > fail. That in turn means that the logic we have in place to disable WS > when the disk does not support it does not get triggered. > > The driver should really fill out the sense buffer in that case. > > Could you please test the patch below? > > > Florian> This goes on and on. > > The second question is what it is that's issuing these zeroouts at boot? > Which filesystem are you using? What's your DM/MD config? > > -- > Martin K. Petersen Oracle Linux Engineering > > > 3w-: Create sense buffer for unsupported commands > > Make the driver return appropriate sense data when an unsupported > operation is queued. This will cause the SCSI layer to stop issuing the > offending command. > > Reported-by: Florian Westphal > CC: adam radford > Signed-off-by: Martin K. Petersen > > diff --git a/drivers/scsi/3w-.c b/drivers/scsi/3w-.c > index 56662ae..b9276d1 100644 > --- a/drivers/scsi/3w-.c > +++ b/drivers/scsi/3w-.c > @@ -216,6 +216,7 @@ > #include > #include > #include > +#include > #include "3w-.h" > > /* Globals */ > @@ -2009,7 +2010,8 @@ static int tw_scsi_queue_lck(struct scsi_cmnd *SCpnt, > void (*done)(struct scsi_c > printk(KERN_NOTICE "3w-: scsi%d: Unknown scsi > opcode: 0x%x\n", tw_dev->host->host_no, *command); > tw_dev->state[request_id] = TW_S_COMPLETED; > tw_state_request_finish(tw_dev, request_id); > - SCpnt->result = (DID_BAD_TARGET << 16); > + SCpnt->result = (DRIVER_SENSE << 24) | > SAM_STAT_CHECK_CONDITION; > + scsi_build_sense_buffer(1, SCpnt->sense_buffer, > ILLEGAL_REQUEST, 0x20, 0); > done(SCpnt); > retval = 0; > } Thanks Martin. This patch looks good. Acked-by: Adam Radford -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: "WRITE SAME failed. Manually zeroing" with 3w-xxxx driver
Martin K. Petersen wrote: > > "Florian" == Florian Westphal writes: > > Florian> After update to 3.8 dmesg is spammed with: kernel: [ > Florian> 280.272094] 3w-: scsi8: Unknown scsi opcode: 0x41 kernel: [ > Florian> 280.272107] sd 8:0:0:0: [sda] Unhandled error code kernel: > > Could you please test the patch below? Works. Only one WRITE_SAME error at boot, max_write_same_blocks in sysfs is 0, which wasn't the case before. > The second question is what it is that's issuing these zeroouts at boot? > Which filesystem are you using? What's your DM/MD config? ext4, no DM/MD is used. I guess the zeroouts are from postgres, but i'm not sure. > 3w-: Create sense buffer for unsupported commands > > Make the driver return appropriate sense data when an unsupported > operation is queued. This will cause the SCSI layer to stop issuing the > offending command. > > Reported-by: Florian Westphal > CC: adam radford > Signed-off-by: Martin K. Petersen Tested-by: Florian Westphal Thanks again. -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: "WRITE SAME failed. Manually zeroing" with 3w-xxxx driver
Martin K. Petersen wrote: > Florian> After update to 3.8 dmesg is spammed with: kernel: [ > Florian> 280.272094] 3w-: scsi8: Unknown scsi opcode: 0x41 kernel: [ > Florian> 280.272107] sd 8:0:0:0: [sda] Unhandled error code kernel: > > Interesting. It looks like the 3ware handles this at the driver level > instead of passing the command through to the disk and letting it > fail. That in turn means that the logic we have in place to disable WS > when the disk does not support it does not get triggered. > > The driver should really fill out the sense buffer in that case. > > Could you please test the patch below? Sure, I'll report back tomorrow. Thanks for the quick response, Florian -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: "WRITE SAME failed. Manually zeroing" with 3w-xxxx driver
> "Florian" == Florian Westphal writes: Florian> After update to 3.8 dmesg is spammed with: kernel: [ Florian> 280.272094] 3w-: scsi8: Unknown scsi opcode: 0x41 kernel: [ Florian> 280.272107] sd 8:0:0:0: [sda] Unhandled error code kernel: Interesting. It looks like the 3ware handles this at the driver level instead of passing the command through to the disk and letting it fail. That in turn means that the logic we have in place to disable WS when the disk does not support it does not get triggered. The driver should really fill out the sense buffer in that case. Could you please test the patch below? Florian> This goes on and on. The second question is what it is that's issuing these zeroouts at boot? Which filesystem are you using? What's your DM/MD config? -- Martin K. Petersen Oracle Linux Engineering 3w-: Create sense buffer for unsupported commands Make the driver return appropriate sense data when an unsupported operation is queued. This will cause the SCSI layer to stop issuing the offending command. Reported-by: Florian Westphal CC: adam radford Signed-off-by: Martin K. Petersen diff --git a/drivers/scsi/3w-.c b/drivers/scsi/3w-.c index 56662ae..b9276d1 100644 --- a/drivers/scsi/3w-.c +++ b/drivers/scsi/3w-.c @@ -216,6 +216,7 @@ #include #include #include +#include #include "3w-.h" /* Globals */ @@ -2009,7 +2010,8 @@ static int tw_scsi_queue_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_c printk(KERN_NOTICE "3w-: scsi%d: Unknown scsi opcode: 0x%x\n", tw_dev->host->host_no, *command); tw_dev->state[request_id] = TW_S_COMPLETED; tw_state_request_finish(tw_dev, request_id); - SCpnt->result = (DID_BAD_TARGET << 16); + SCpnt->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION; + scsi_build_sense_buffer(1, SCpnt->sense_buffer, ILLEGAL_REQUEST, 0x20, 0); done(SCpnt); retval = 0; } -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html