sparse file handling bug in XFS

Eric Sandeen sandeen at sandeen.net
Thu Jun 16 11:08:22 CDT 2011


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.

-Eric




More information about the xfs mailing list