On Tue, Nov 13, 2007 at 02:30:02AM +0530, Kalpak Shah wrote: > Recently there was discussion about an "FIle Extent MAP"(FIEMAP) ioctl for > efficiently mapping the extents and holes of a file. This will be many > times more efficient than FIBMAP by cutting down the number of ioctls. Thanks for sending this out. > This patch adds the FIEMAP header file in include/linux. Any problem with defining the IOC_FIEMAP ioctl number in this header too? No EXT4 prefix so we keep things generic too, please. --Mark > Signed-off-by: Andreas Dilger <adilger@xxxxxxx> > Signed-off-by: Kalpak Shah <kalpak.shah@xxxxxxx> > > Index: linux-2.6.23.1/include/linux/fiemap.h > =================================================================== > --- /dev/null > +++ linux-2.6.23.1/include/linux/fiemap.h > @@ -0,0 +1,49 @@ > +/* > + * include/linux/fiemap.h > + * > + * Copyright (C) 2007 Sun Microsystems, Inc. > + * > + * Author: Kalpak Shah <kalpak.shah@xxxxxxx> > + * Andreas Dilger <adilger@xxxxxxx> > + */ > + > +#ifndef _LINUX_FIEMAP_H > +#define _LINUX_FIEMAP_H > + > +struct fiemap_extent { > + __u64 fe_offset; /* offset in bytes for the start of the extent */ > + __u64 fe_length; /* length in bytes for the extent */ > + __u32 fe_flags; /* returned FIEMAP_EXTENT_* flags for the extent */ > + __u32 fe_lun; /* logical device number for extent (starting at 0)*/ > +}; > + > +struct fiemap { > + __u64 fm_start; /* logical starting byte offset (in/out) */ > + __u64 fm_length; /* logical length of map (in/out) */ > + __u32 fm_flags; /* FIEMAP_FLAG_* flags for request (in/out) */ > + __u32 fm_extent_count; /* number of extents in fm_extents (in/out) */ > + __u64 fm_end_offset; /* logical offset of end of mapping in last ioctl */ > + struct fiemap_extent fm_extents[0]; > +}; > + > +#define FIEMAP_FLAG_SYNC 0x00000001 /* sync file data before map */ > +#define FIEMAP_FLAG_HSM_READ 0x00000002 /* get data from HSM before map */ > +#define FIEMAP_FLAG_NUM_EXTENTS 0x00000004 /* return only number of extents */ > +#define FIEMAP_FLAG_INCOMPAT 0xff000000 /* error for unknown flags in here */ > + > +#define FIEMAP_FLAG_LUN_OFFSET 0x01000000 /* use lun offsets, instead of > + * logical file offsets */ > + > +#define FIEMAP_EXTENT_HOLE 0x00000001 /* has no data or space allocation */ > +#define FIEMAP_EXTENT_UNWRITTEN 0x00000002 /* space allocated, but no data */ > +#define FIEMAP_EXTENT_UNMAPPED 0x00000004 /* has data but no space allocation*/ > +#define FIEMAP_EXTENT_ERROR 0x00000008 /* mapping error, errno in fe_start*/ > +#define FIEMAP_EXTENT_NO_DIRECT 0x00000010 /* cannot access data directly */ > +#define FIEMAP_EXTENT_LAST 0x00000020 /* last extent in the file */ > +#define FIEMAP_EXTENT_DELALLOC 0x00000040 /* has data but not yet written, > + * must have EXTENT_UNKNOWN set */ > +#define FIEMAP_EXTENT_SECONDARY 0x00000080 /* data (also) in secondary storage, > + * not in primary if EXTENT_UNKNOWN*/ > +#define FIEMAP_EXTENT_EOF 0x00000100 /* if fm_start+fm_len is beyond EOF*/ > + > +#endif /* _LINUX_FIEMAP_H */ > -- Mark Fasheh Senior Software Developer, Oracle mark.fasheh@xxxxxxxxxx - To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html