Re: xfs_io bmap confused

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

 



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?

Thanks.

_______________________________________________
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