Re: xfs_io bmap confused

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

 



On Wed, 2015-07-08 at 16:40 -0700, Ming Lin wrote:
> On Wed, 2015-07-08 at 06:57 -0700, Ming Lin wrote:
> > On Wed, 2015-07-08 at 10:53 +0200, Christoph Hellwig wrote:
> > > On Wed, Jul 08, 2015 at 12:01:53AM -0700, Ming Lin wrote:
> > > > Hi list,
> > > >
> > > > I am testing some direct-io patches.
> > > > xfs_tests/xfs/080 failed.
> > > >
> > > > It's strange.
> > > > There is no hole in "rwtest.file",
> > > > but when read it at some offset it returns zero because of hole.
> > > >
> > > > root@block:~# xfs_io -c bmap /mnt/test/rwtest.file
> > > > /mnt/test/rwtest.file:
> > > >              0: [0..125671]: 160..125831
> > >
> > > Sounds like you see an unwritten extent.  What does xfs_bmap -pv show on
> > > the file?
> >
> > root@block:~# xfs_bmap -pv /mnt/test/rwtest.file
> > /mnt/test/rwtest.file:
> >  EXT: FILE-OFFSET       BLOCK-RANGE      AG AG-OFFSET        TOTAL FLAGS
> >    0: [0..743]:         160..903          0 (160..903)         744 00000
> >    1: [744..783]:       904..943          0 (904..943)          40 10000
> >    2: [784..951]:       944..1111         0 (944..1111)        168 00000
> >    3: [952..1023]:      1112..1183        0 (1112..1183)        72 10000
> >    4: [1024..1287]:     1184..1447        0 (1184..1447)       264 00000
> >    5: [1288..1383]:     1448..1543        0 (1448..1543)        96 10000
> 
> file offset 659456 is in EXT 5.
> I guess FLAGS 1 means it's an unwritten extent, right?
> 
> xfs_tests/xfs/080 basically does:
> 1. direct io write
> 2. then buffered read to check the previous dio write
> 
> Here is an example of error logs.
> 
> doio ( 3626) 16:13:23
> ---------------------
> *** DATA COMPARISON ERROR ***
> check_file(/mnt/test/rwtest.file, 239616, 81408, H:3626:block:doio*,
> 18, 0) failed
> 
> Comparison fd is 5, with open flags 0
> Corrupt regions follow - unprintable chars are represented as '.'
> -----------------------------------------------------------------
> corrupt bytes starting at file offset 241664
>     1st 32 expected bytes:  oio*H:3626:block:doio*H:3626:blo
>     1st 32 actual bytes:    ................................
> 
> Request number 981
>           fd 4 is file /mnt/test/rwtest.file - open flags are 040001
> O_WRONLY,O_DIRECT,
>           write done at file offset 239616 - pattern is H (0110)
>           number of requests is 1, strides per request is 1
>           i/o byte count = 81408
>           memory alignment is aligned
>           DIRECT I/O: offset % 512 = 0 length % 81408 = 0
>           mem alignment 0x200 xfer size: small: 512 large: 2147483136
> 
> syscall:  writev(4, (iov on stack), 1)
> 
> 
> The "expected bytes" was actually written to the disk successfully,
> but for some bug the xfs extent flag was not set correctly.
> The flag should be "XFS_EXT_NORM", but now it's "XFS_EXT_UNWRITTEN".
> 
> Could you share the code path the extent flag was updated?
> Is it also updated through direct io?

For XFS direct IO, are below the only 2 paths to convert unwritten
extent to written extent?

[   72.279043] Call Trace:
[   72.279719]  [<ffffffff8169c2f3>] dump_stack+0x4f/0x7b
[   72.280898]  [<ffffffff8127140f>] xfs_bmapi_convert_unwritten+0x73/0x176
[   72.282393]  [<ffffffff8127a233>] xfs_bmapi_write+0x2a0/0x7ee
[   72.283705]  [<ffffffff812b8ae8>] xfs_iomap_write_direct+0x23e/0x2f0
[   72.285132]  [<ffffffff8129ef88>] __xfs_get_blocks+0x14c/0xf6c
[   72.286456]  [<ffffffff8103d74b>] ? get_user_pages_fast+0xee/0x14c
[   72.287847]  [<ffffffff8129fdcf>] xfs_get_blocks_direct+0x14/0x16
[   72.289246]  [<ffffffff811879c6>] get_blocks+0x86/0x182
[   72.297467]  [<ffffffff8103d74b>] ? get_user_pages_fast+0xee/0x14c
[   72.298845]  [<ffffffff81187fe6>] __blockdev_direct_IO+0x372/0x666
[   72.300266]  [<ffffffff8129fdbb>] ? xfs_get_blocks+0x13/0x13
[   72.301555]  [<ffffffff8116f9ac>] ? __mnt_drop_write_file+0x12/0x14
[   72.302936]  [<ffffffff8116a017>] ? file_update_time+0xb5/0xcb
[   72.304279]  [<ffffffff8129d890>] xfs_vm_direct_IO+0x89/0x90
[   72.305555]  [<ffffffff8129d943>] ? xfs_setfilesize_trans_alloc+0xac/0xac
[   72.307064]  [<ffffffff8169ae5e>] xfs_file_dio_aio_write+0x2e0/0x449
[   72.308509]  [<ffffffff813e1028>] ? __clear_user+0x36/0x5b
[   72.309755]  [<ffffffff812af9c6>] xfs_file_write_iter+0x75/0x105
[   72.311107]  [<ffffffff81151524>] __vfs_write+0x97/0xc0
[   72.312347]  [<ffffffff81151b1f>] vfs_write+0xb5/0x16f
[   72.313526]  [<ffffffff811522c3>] SyS_write+0x4a/0x94
[   72.314683]  [<ffffffff816a4b17>] system_call_fastpath+0x12/0x6f


[   72.328096] Call Trace:
[   72.328786]  [<ffffffff8169c2f3>] dump_stack+0x4f/0x7b
[   72.330002]  [<ffffffff8127140f>] xfs_bmapi_convert_unwritten+0x73/0x176
[   72.331565]  [<ffffffff8126cd9d>] ? xfs_bmap_search_extents+0x60/0xd6
[   72.333059]  [<ffffffff812c96f1>] ? kmem_zone_alloc+0x6e/0xba
[   72.334412]  [<ffffffff8127a233>] xfs_bmapi_write+0x2a0/0x7ee
[   72.335777]  [<ffffffff812b9455>] xfs_iomap_write_unwritten+0x205/0x413
[   72.337300]  [<ffffffff8129d7e2>] xfs_end_io+0x50/0x75
[   72.338495]  [<ffffffff8129dab9>] xfs_end_io_direct_write+0x176/0x26c
[   72.339952]  [<ffffffff810d20a4>] ? delayacct_end+0x55/0x5e
[   72.341238]  [<ffffffff8118759d>] dio_complete+0x7c/0x134
[   72.342488]  [<ffffffff811882a7>] __blockdev_direct_IO+0x633/0x666
[   72.343908]  [<ffffffff8129fdbb>] ? xfs_get_blocks+0x13/0x13
[   72.345263]  [<ffffffff8129d890>] xfs_vm_direct_IO+0x89/0x90
[   72.346598]  [<ffffffff8129d943>] ? xfs_setfilesize_trans_alloc+0xac/0xac
[   72.348185]  [<ffffffff8169ae5e>] xfs_file_dio_aio_write+0x2e0/0x449
[   72.349652]  [<ffffffff813e1028>] ? __clear_user+0x36/0x5b
[   72.350950]  [<ffffffff812af9c6>] xfs_file_write_iter+0x75/0x105
[   72.352369]  [<ffffffff81151524>] __vfs_write+0x97/0xc0
[   72.353607]  [<ffffffff81151b1f>] vfs_write+0xb5/0x16f
[   72.354832]  [<ffffffff811522c3>] SyS_write+0x4a/0x94
[   72.356060]  [<ffffffff816a4b17>] system_call_fastpath+0x12/0x6f



_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs



[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux