103 lines
2.8 KiB
C
103 lines
2.8 KiB
C
/* FS_IOC_FIEMAP ioctl infrastructure.
|
|
Some portions copyright (C) 2007 Cluster File Systems, Inc
|
|
Authors: Mark Fasheh <mfasheh@suse.com>
|
|
Kalpak Shah <kalpak.shah@sun.com>
|
|
Andreas Dilger <adilger@sun.com>. */
|
|
|
|
/* Copy from kernel, modified to respect GNU code style by Jie Liu. */
|
|
|
|
#ifndef _LINUX_FIEMAP_H
|
|
# define _LINUX_FIEMAP_H
|
|
|
|
# include <stdint.h>
|
|
|
|
struct fiemap_extent
|
|
{
|
|
/* Logical offset in bytes for the start of the extent
|
|
from the beginning of the file. */
|
|
uint64_t fe_logical;
|
|
|
|
/* Physical offset in bytes for the start of the extent
|
|
from the beginning of the disk. */
|
|
uint64_t fe_physical;
|
|
|
|
/* Length in bytes for this extent. */
|
|
uint64_t fe_length;
|
|
|
|
uint64_t fe_reserved64[2];
|
|
|
|
/* FIEMAP_EXTENT_* flags for this extent. */
|
|
uint32_t fe_flags;
|
|
|
|
uint32_t fe_reserved[3];
|
|
};
|
|
|
|
struct fiemap
|
|
{
|
|
/* Logical offset(inclusive) at which to start mapping(in). */
|
|
uint64_t fm_start;
|
|
|
|
/* Logical length of mapping which userspace wants(in). */
|
|
uint64_t fm_length;
|
|
|
|
/* FIEMAP_FLAG_* flags for request(in/out). */
|
|
uint32_t fm_flags;
|
|
|
|
/* Number of extents that were mapped(out). */
|
|
uint32_t fm_mapped_extents;
|
|
|
|
/* Size of fm_extents array(in). */
|
|
uint32_t fm_extent_count;
|
|
|
|
uint32_t fm_reserved;
|
|
|
|
/* Array of mapped extents(out). */
|
|
struct fiemap_extent fm_extents[FLEXIBLE_ARRAY_MEMBER];
|
|
};
|
|
|
|
/* The maximum offset can be mapped for a file. */
|
|
# define FIEMAP_MAX_OFFSET (~0ULL)
|
|
|
|
/* Sync file data before map. */
|
|
# define FIEMAP_FLAG_SYNC 0x00000001
|
|
|
|
/* Map extented attribute tree. */
|
|
# define FIEMAP_FLAG_XATTR 0x00000002
|
|
|
|
# define FIEMAP_FLAGS_COMPAT (FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR)
|
|
|
|
/* Last extent in file. */
|
|
# define FIEMAP_EXTENT_LAST 0x00000001
|
|
|
|
/* Data location unknown. */
|
|
# define FIEMAP_EXTENT_UNKNOWN 0x00000002
|
|
|
|
/* Location still pending, Sets EXTENT_UNKNOWN. */
|
|
# define FIEMAP_EXTENT_DELALLOC 0x00000004
|
|
|
|
/* Data cannot be read while fs is unmounted. */
|
|
# define FIEMAP_EXTENT_ENCODED 0x00000008
|
|
|
|
/* Data is encrypted by fs. Sets EXTENT_NO_BYPASS. */
|
|
# define FIEMAP_EXTENT_DATA_ENCRYPTED 0x00000080
|
|
|
|
/* Extent offsets may not be block aligned. */
|
|
# define FIEMAP_EXTENT_NOT_ALIGNED 0x00000100
|
|
|
|
/* Data mixed with metadata. Sets EXTENT_NOT_ALIGNED. */
|
|
# define FIEMAP_EXTENT_DATA_INLINE 0x00000200
|
|
|
|
/* Multiple files in block. Set EXTENT_NOT_ALIGNED. */
|
|
# define FIEMAP_EXTENT_DATA_TAIL 0x00000400
|
|
|
|
/* Space allocated, but not data (i.e., zero). */
|
|
# define FIEMAP_EXTENT_UNWRITTEN 0x00000800
|
|
|
|
/* File does not natively support extents. Result merged for efficiency. */
|
|
# define FIEMAP_EXTENT_MERGED 0x00001000
|
|
|
|
/* Space shared with other files. */
|
|
# define FIEMAP_EXTENT_SHARED 0x00002000
|
|
|
|
#endif
|