xref: /aosp_15_r20/external/e2fsprogs/lib/ext2fs/fiemap.h (revision 6a54128f25917bfc36a8a6e9d722c04a0b4641b6)
1*6a54128fSAndroid Build Coastguard Worker /*
2*6a54128fSAndroid Build Coastguard Worker  * FS_IOC_FIEMAP ioctl infrastructure.
3*6a54128fSAndroid Build Coastguard Worker  *
4*6a54128fSAndroid Build Coastguard Worker  * Some portions copyright (C) 2007 Cluster File Systems, Inc
5*6a54128fSAndroid Build Coastguard Worker  *
6*6a54128fSAndroid Build Coastguard Worker  * Authors: Mark Fasheh <[email protected]>
7*6a54128fSAndroid Build Coastguard Worker  *          Kalpak Shah <[email protected]>
8*6a54128fSAndroid Build Coastguard Worker  *          Andreas Dilger <[email protected]>
9*6a54128fSAndroid Build Coastguard Worker  */
10*6a54128fSAndroid Build Coastguard Worker 
11*6a54128fSAndroid Build Coastguard Worker #ifndef _LINUX_FIEMAP_H
12*6a54128fSAndroid Build Coastguard Worker #define _LINUX_FIEMAP_H
13*6a54128fSAndroid Build Coastguard Worker 
14*6a54128fSAndroid Build Coastguard Worker struct fiemap_extent {
15*6a54128fSAndroid Build Coastguard Worker 	__u64 fe_logical;  /* logical offset in bytes for the start of
16*6a54128fSAndroid Build Coastguard Worker 			    * the extent from the beginning of the file */
17*6a54128fSAndroid Build Coastguard Worker 	__u64 fe_physical; /* physical offset in bytes for the start
18*6a54128fSAndroid Build Coastguard Worker 			    * of the extent from the beginning of the disk */
19*6a54128fSAndroid Build Coastguard Worker 	__u64 fe_length;   /* length in bytes for this extent */
20*6a54128fSAndroid Build Coastguard Worker 	__u64 fe_reserved64[2];
21*6a54128fSAndroid Build Coastguard Worker 	__u32 fe_flags;    /* FIEMAP_EXTENT_* flags for this extent */
22*6a54128fSAndroid Build Coastguard Worker 	__u32 fe_reserved[3];
23*6a54128fSAndroid Build Coastguard Worker };
24*6a54128fSAndroid Build Coastguard Worker 
25*6a54128fSAndroid Build Coastguard Worker struct fiemap {
26*6a54128fSAndroid Build Coastguard Worker 	__u64 fm_start;		/* logical offset (inclusive) at
27*6a54128fSAndroid Build Coastguard Worker 				 * which to start mapping (in) */
28*6a54128fSAndroid Build Coastguard Worker 	__u64 fm_length;	/* logical length of mapping which
29*6a54128fSAndroid Build Coastguard Worker 				 * userspace wants (in) */
30*6a54128fSAndroid Build Coastguard Worker 	__u32 fm_flags;		/* FIEMAP_FLAG_* flags for request (in/out) */
31*6a54128fSAndroid Build Coastguard Worker 	__u32 fm_mapped_extents;/* number of extents that were mapped (out) */
32*6a54128fSAndroid Build Coastguard Worker 	__u32 fm_extent_count;  /* size of fm_extents array (in) */
33*6a54128fSAndroid Build Coastguard Worker 	__u32 fm_reserved;
34*6a54128fSAndroid Build Coastguard Worker #if __GNUC_PREREQ (4, 8)
35*6a54128fSAndroid Build Coastguard Worker #pragma GCC diagnostic push
36*6a54128fSAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wpedantic"
37*6a54128fSAndroid Build Coastguard Worker #endif
38*6a54128fSAndroid Build Coastguard Worker 	struct fiemap_extent fm_extents[0]; /* array of mapped extents (out) */
39*6a54128fSAndroid Build Coastguard Worker #if __GNUC_PREREQ (4, 8)
40*6a54128fSAndroid Build Coastguard Worker #pragma GCC diagnostic pop
41*6a54128fSAndroid Build Coastguard Worker #endif
42*6a54128fSAndroid Build Coastguard Worker };
43*6a54128fSAndroid Build Coastguard Worker 
44*6a54128fSAndroid Build Coastguard Worker #if defined(__linux__) && !defined(FS_IOC_FIEMAP)
45*6a54128fSAndroid Build Coastguard Worker #define FS_IOC_FIEMAP	_IOWR('f', 11, struct fiemap)
46*6a54128fSAndroid Build Coastguard Worker #endif
47*6a54128fSAndroid Build Coastguard Worker 
48*6a54128fSAndroid Build Coastguard Worker #if defined(__linux__) && !defined(FS_IOC_GETSTATE)
49*6a54128fSAndroid Build Coastguard Worker #define EXT4_IOC_GETSTATE		_IOW('f', 41, __u32)
50*6a54128fSAndroid Build Coastguard Worker #endif
51*6a54128fSAndroid Build Coastguard Worker 
52*6a54128fSAndroid Build Coastguard Worker #if defined(__linux__) && !defined(EXT4_IOC_GET_ES_CACHE)
53*6a54128fSAndroid Build Coastguard Worker #define EXT4_IOC_GET_ES_CACHE		_IOWR('f', 42, struct fiemap)
54*6a54128fSAndroid Build Coastguard Worker #endif
55*6a54128fSAndroid Build Coastguard Worker 
56*6a54128fSAndroid Build Coastguard Worker #if defined(__linux__) && !defined(EXT4_STATE_FLAG_EXT_PRECACHED)
57*6a54128fSAndroid Build Coastguard Worker #define EXT4_STATE_FLAG_EXT_PRECACHED	0x00000001
58*6a54128fSAndroid Build Coastguard Worker #endif
59*6a54128fSAndroid Build Coastguard Worker 
60*6a54128fSAndroid Build Coastguard Worker #define FIEMAP_MAX_OFFSET	(~0ULL)
61*6a54128fSAndroid Build Coastguard Worker 
62*6a54128fSAndroid Build Coastguard Worker #define FIEMAP_FLAG_SYNC	0x00000001 /* sync file data before map */
63*6a54128fSAndroid Build Coastguard Worker #define FIEMAP_FLAG_XATTR	0x00000002 /* map extended attribute tree */
64*6a54128fSAndroid Build Coastguard Worker #define FIEMAP_FLAG_CACHE	0x00000004 /* request caching of the extents */
65*6a54128fSAndroid Build Coastguard Worker 
66*6a54128fSAndroid Build Coastguard Worker #define FIEMAP_FLAGS_COMPAT	(FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR)
67*6a54128fSAndroid Build Coastguard Worker 
68*6a54128fSAndroid Build Coastguard Worker #define FIEMAP_EXTENT_LAST		0x00000001 /* Last extent in file. */
69*6a54128fSAndroid Build Coastguard Worker #define FIEMAP_EXTENT_UNKNOWN		0x00000002 /* Data location unknown. */
70*6a54128fSAndroid Build Coastguard Worker #define FIEMAP_EXTENT_DELALLOC		0x00000004 /* Location still pending.
71*6a54128fSAndroid Build Coastguard Worker 						    * Sets EXTENT_UNKNOWN. */
72*6a54128fSAndroid Build Coastguard Worker #define FIEMAP_EXTENT_ENCODED		0x00000008 /* Data can not be read
73*6a54128fSAndroid Build Coastguard Worker 						    * while fs is unmounted */
74*6a54128fSAndroid Build Coastguard Worker #define FIEMAP_EXTENT_DATA_ENCRYPTED	0x00000080 /* Data is encrypted by fs.
75*6a54128fSAndroid Build Coastguard Worker 						    * Sets EXTENT_NO_BYPASS. */
76*6a54128fSAndroid Build Coastguard Worker #define FIEMAP_EXTENT_NOT_ALIGNED	0x00000100 /* Extent offsets may not be
77*6a54128fSAndroid Build Coastguard Worker 						    * block aligned. */
78*6a54128fSAndroid Build Coastguard Worker #define FIEMAP_EXTENT_DATA_INLINE	0x00000200 /* Data mixed with metadata.
79*6a54128fSAndroid Build Coastguard Worker 						    * Sets EXTENT_NOT_ALIGNED.*/
80*6a54128fSAndroid Build Coastguard Worker #define FIEMAP_EXTENT_DATA_TAIL		0x00000400 /* Multiple files in block.
81*6a54128fSAndroid Build Coastguard Worker 						    * Sets EXTENT_NOT_ALIGNED.*/
82*6a54128fSAndroid Build Coastguard Worker #define FIEMAP_EXTENT_UNWRITTEN		0x00000800 /* Space allocated, but
83*6a54128fSAndroid Build Coastguard Worker 						    * no data (i.e. zero). */
84*6a54128fSAndroid Build Coastguard Worker #define FIEMAP_EXTENT_MERGED		0x00001000 /* File does not natively
85*6a54128fSAndroid Build Coastguard Worker 						    * support extents. Result
86*6a54128fSAndroid Build Coastguard Worker 						    * merged for efficiency. */
87*6a54128fSAndroid Build Coastguard Worker #define FIEMAP_EXTENT_SHARED		0x00002000 /* Space shared with other
88*6a54128fSAndroid Build Coastguard Worker 						    * files. */
89*6a54128fSAndroid Build Coastguard Worker 
90*6a54128fSAndroid Build Coastguard Worker #define EXT4_FIEMAP_EXTENT_HOLE		0x08000000 /* Entry in extent status
91*6a54128fSAndroid Build Coastguard Worker 						      cache for a hole*/
92*6a54128fSAndroid Build Coastguard Worker 
93*6a54128fSAndroid Build Coastguard Worker #endif /* _LINUX_FIEMAP_H */
94