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 <[EMAIL PROTECTED]>
> Signed-off-by: Kalpak Shah <[EMAIL PROTECTED]> 
> 
> 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 <[EMAIL PROTECTED]>
> + *      Andreas Dilger <[EMAIL PROTECTED]>
> + */
> +
> +#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
[EMAIL PROTECTED]
-
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to