Re: [PATCH] blk-mq: NVMe 512B/4K+T10 DIF/DIX format returns I/O error on dd with split op

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 05/10/2017 07:54 AM, wenxiong@xxxxxxxxxxxxxxxxxx wrote:
> From: Wen Xiong <wenxiong@xxxxxxxxxxxxxxxxxx>
> 
> 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




[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux