Re: How does ext2 implement sparse files?

From: Eric Dumazet
Date: Fri Feb 01 2008 - 06:08:32 EST


Shuduo Sang a Ãcrit :
On Feb 1, 2008 2:14 AM, Andi Kleen <andi@xxxxxxxxxxxxxx> wrote:
Lars Noschinski <lklml@xxxxxxxxxxxxxxxx> writes:

For an university project, we had to write a toy filesystem (ext2-like),
for which I would like to implement sparse file support. For this, I
digged through the ext2 source code; but I could not find the point,
where ext2 detects holes.

As far as I can see from fs/buffer.c, an hole is a buffer_head which is
not mapped, but uptodate. But I cannot find a relevant source line,
where ext2 makes usage of this information.
It does not explicitely detect holes; holey data is just never written
so no space for it is allocated.


does anybody know how to make a hole in a large file which already has
real content from user space application?
In my project I need this function to delete a piece of content from
an exist large effectively.
thanks.

Some OSes use fcntl() F_FREESP/F_FREESP64 to be able to free allocated space in files (ie make holes if supported by underlying fs)

AFAIK, linux can generically do this only at the end of a file (ftruncate()) , not at random points.

XFS has special support for FREESP (it comes from IRIX), implemented as an ioctl()

Check for XFS_IOC_FREESP and XFS_IOC_UNRESVSP in fs/xfs/xfs_fs.h





--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/