Re: sparse file handling bug in XFS

Eric Sandeen
2011-06-16T16:08:25Z

On 6/16/11 9:49 AM, Sean Noonan wrote:
> Sparse files do not stay sparse.
> Here's the simplest test case I've got so far. I don't think it can get much simpler than this.
>
> This did not exist in 2.6.36. It appeared by 2.6.38-rc8. It continued into 2.6.38.2. It continues to exist on 3.0.0-rc3.
>
> # for x in gogo xfs; do date | dd of=sparse-file bs=1k seek=4096; stat sparse-file; done

Funky; if we do xfs_bmap, it shows the right nr of blocks allocated:

# for x in gogo xfs; do date | dd of=sparse-file bs=1k seek=4096; stat sparse-file | grep Blocks; xfs_bmap -v sparse-file; done
Size: 4194333 Blocks: 8 IO Block: 4096 regular file
sparse-file:
EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL
0: [0..8191]: hole 8192
1: [8192..8199]: 450475168..450475175 2 (18736320..18736327) 8

Size: 4194333 Blocks: 8192 IO Block: 4096 regular file
sparse-file:
EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL
0: [0..8191]: hole 8192
1: [8192..8199]: 459367952..459367959 2 (27629104..27629111) 8

And if we unmount & remount it's right again:

# stat sparse-file | grep Blocks
Size: 4194333 Blocks: 8 IO Block: 4096 regular file

so they do remain sparse, but stat tells us the wrong thing. I think it has
to do with the count of delayed blocks but I'll try to look into it.