On 05/10/2017 07:54 AM, [email protected] wrote:
> From: Wen Xiong <[email protected]>
> 
> When formatting NVMe to 512B/4K + T10 DIf/DIX, dd with split op returns
> "Input/output error". Looks block layer split the bio after calling
> bio_integrity_prep(bio). This patch fixes the issue.
> 
> Below is how we debug this issue:
> (1)format nvme to 4K block # size with type 2 DIF
> (2)dd with block size bigger than 1024k.
> oflag=direct
> dd: error writing '/dev/nvme0n1': Input/output error
> 
> We added some debug code in nvme device driver. It showed us the first
> op and the second op have the same bi and pi address. This is not
> correct.
> 
> 1st op: nvme0n1 Op:Wr slba 0x505 length 0x100, PI ctrl=0x1400,
>       dsmgmt=0x0, AT=0x0 & RT=0x505
>       Guard 0x00b1, AT 0x0000, RT physical 0x00000505 RT virtual 0x00002828
> 
> 2nd op: nvme0n1 Op:Wr slba 0x605 length 0x1, PI ctrl=0x1400, dsmgmt=0x0,
>       AT=0x0 & RT=0x605  ==> This op fails and subsequent 5 retires..
>       Guard 0x00b1, AT 0x0000, RT physical 0x00000605 RT virtual 0x00002828
> 
> With the fix, It showed us both of the first op and the second op have
> correct bi and pi address.
> 
> 1st op: nvme2n1 Op:Wr slba 0x505 length 0x100, PI ctrl=0x1400,
>       dsmgmt=0x0, AT=0x0 & RT=0x505
>       Guard 0x5ccb, AT 0x0000, RT physical 0x00000505 RT virtual
>       0x00002828
> 2nd op: nvme2n1 Op:Wr slba 0x605 length 0x1, PI ctrl=0x1400, dsmgmt=0x0,
>       AT=0x0 & RT=0x605
>       Guard 0xab4c, AT 0x0000, RT physical 0x00000605 RT virtual
>       0x00003028

Good catch, your fix looks correct to me.


-- 
Jens Axboe

Reply via email to