1
2
3
4
5
6#ifndef __XFS_FS_H__
7#define __XFS_FS_H__
8
9
10
11
12
13
14
15
16
17
18#ifndef HAVE_DIOATTR
19struct dioattr {
20 __u32 d_mem;
21 __u32 d_miniosz;
22 __u32 d_maxiosz;
23};
24#endif
25
26
27
28
29
30
31
32
33#ifndef HAVE_GETBMAP
34struct getbmap {
35 __s64 bmv_offset;
36 __s64 bmv_block;
37 __s64 bmv_length;
38 __s32 bmv_count;
39 __s32 bmv_entries;
40};
41#endif
42
43
44
45
46
47
48
49
50
51
52#ifndef HAVE_GETBMAPX
53struct getbmapx {
54 __s64 bmv_offset;
55 __s64 bmv_block;
56 __s64 bmv_length;
57 __s32 bmv_count;
58 __s32 bmv_entries;
59 __s32 bmv_iflags;
60 __s32 bmv_oflags;
61 __s32 bmv_unused1;
62 __s32 bmv_unused2;
63};
64#endif
65
66
67#define BMV_IF_ATTRFORK 0x1
68#define BMV_IF_NO_DMAPI_READ 0x2
69#define BMV_IF_PREALLOC 0x4
70#define BMV_IF_DELALLOC 0x8
71#define BMV_IF_NO_HOLES 0x10
72#define BMV_IF_COWFORK 0x20
73#define BMV_IF_VALID \
74 (BMV_IF_ATTRFORK|BMV_IF_NO_DMAPI_READ|BMV_IF_PREALLOC| \
75 BMV_IF_DELALLOC|BMV_IF_NO_HOLES|BMV_IF_COWFORK)
76
77
78#define BMV_OF_PREALLOC 0x1
79#define BMV_OF_DELALLOC 0x2
80#define BMV_OF_LAST 0x4
81#define BMV_OF_SHARED 0x8
82
83
84#define XFS_FMR_OWN_FREE FMR_OWN_FREE
85#define XFS_FMR_OWN_UNKNOWN FMR_OWN_UNKNOWN
86#define XFS_FMR_OWN_FS FMR_OWNER('X', 1)
87#define XFS_FMR_OWN_LOG FMR_OWNER('X', 2)
88#define XFS_FMR_OWN_AG FMR_OWNER('X', 3)
89#define XFS_FMR_OWN_INOBT FMR_OWNER('X', 4)
90#define XFS_FMR_OWN_INODES FMR_OWNER('X', 5)
91#define XFS_FMR_OWN_REFC FMR_OWNER('X', 6)
92#define XFS_FMR_OWN_COW FMR_OWNER('X', 7)
93#define XFS_FMR_OWN_DEFECTIVE FMR_OWNER('X', 8)
94
95
96
97
98
99
100
101
102#ifndef HAVE_FSDMIDATA
103struct fsdmidata {
104 __u32 fsd_dmevmask;
105 __u16 fsd_padding;
106 __u16 fsd_dmstate;
107};
108#endif
109
110
111
112
113
114typedef struct xfs_flock64 {
115 __s16 l_type;
116 __s16 l_whence;
117 __s64 l_start;
118 __s64 l_len;
119 __s32 l_sysid;
120 __u32 l_pid;
121 __s32 l_pad[4];
122} xfs_flock64_t;
123
124
125
126
127typedef struct xfs_fsop_geom_v1 {
128 __u32 blocksize;
129 __u32 rtextsize;
130 __u32 agblocks;
131 __u32 agcount;
132 __u32 logblocks;
133 __u32 sectsize;
134 __u32 inodesize;
135 __u32 imaxpct;
136 __u64 datablocks;
137 __u64 rtblocks;
138 __u64 rtextents;
139 __u64 logstart;
140 unsigned char uuid[16];
141 __u32 sunit;
142 __u32 swidth;
143 __s32 version;
144 __u32 flags;
145 __u32 logsectsize;
146 __u32 rtsectsize;
147 __u32 dirblocksize;
148} xfs_fsop_geom_v1_t;
149
150
151
152
153typedef struct xfs_fsop_geom {
154 __u32 blocksize;
155 __u32 rtextsize;
156 __u32 agblocks;
157 __u32 agcount;
158 __u32 logblocks;
159 __u32 sectsize;
160 __u32 inodesize;
161 __u32 imaxpct;
162 __u64 datablocks;
163 __u64 rtblocks;
164 __u64 rtextents;
165 __u64 logstart;
166 unsigned char uuid[16];
167 __u32 sunit;
168 __u32 swidth;
169 __s32 version;
170 __u32 flags;
171 __u32 logsectsize;
172 __u32 rtsectsize;
173 __u32 dirblocksize;
174 __u32 logsunit;
175} xfs_fsop_geom_t;
176
177
178typedef struct xfs_fsop_counts {
179 __u64 freedata;
180 __u64 freertx;
181 __u64 freeino;
182 __u64 allocino;
183} xfs_fsop_counts_t;
184
185
186typedef struct xfs_fsop_resblks {
187 __u64 resblks;
188 __u64 resblks_avail;
189} xfs_fsop_resblks_t;
190
191#define XFS_FSOP_GEOM_VERSION 0
192
193#define XFS_FSOP_GEOM_FLAGS_ATTR 0x0001
194#define XFS_FSOP_GEOM_FLAGS_NLINK 0x0002
195#define XFS_FSOP_GEOM_FLAGS_QUOTA 0x0004
196#define XFS_FSOP_GEOM_FLAGS_IALIGN 0x0008
197#define XFS_FSOP_GEOM_FLAGS_DALIGN 0x0010
198#define XFS_FSOP_GEOM_FLAGS_SHARED 0x0020
199#define XFS_FSOP_GEOM_FLAGS_EXTFLG 0x0040
200#define XFS_FSOP_GEOM_FLAGS_DIRV2 0x0080
201#define XFS_FSOP_GEOM_FLAGS_LOGV2 0x0100
202#define XFS_FSOP_GEOM_FLAGS_SECTOR 0x0200
203#define XFS_FSOP_GEOM_FLAGS_ATTR2 0x0400
204#define XFS_FSOP_GEOM_FLAGS_PROJID32 0x0800
205#define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x1000
206#define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x4000
207#define XFS_FSOP_GEOM_FLAGS_V5SB 0x8000
208#define XFS_FSOP_GEOM_FLAGS_FTYPE 0x10000
209#define XFS_FSOP_GEOM_FLAGS_FINOBT 0x20000
210#define XFS_FSOP_GEOM_FLAGS_SPINODES 0x40000
211#define XFS_FSOP_GEOM_FLAGS_RMAPBT 0x80000
212#define XFS_FSOP_GEOM_FLAGS_REFLINK 0x100000
213
214
215
216
217
218
219#define XFS_MIN_AG_BLOCKS 64
220#define XFS_MIN_LOG_BLOCKS 512ULL
221#define XFS_MAX_LOG_BLOCKS (1024 * 1024ULL)
222#define XFS_MIN_LOG_BYTES (10 * 1024 * 1024ULL)
223
224
225
226
227
228#define XFS_MIN_AG_BYTES (1ULL << 24)
229#define XFS_MAX_AG_BYTES (1ULL << 40)
230
231
232#define XFS_MAX_LOG_BYTES \
233 ((2 * 1024 * 1024 * 1024ULL) - XFS_MIN_LOG_BYTES)
234
235
236#define XFS_MAX_DBLOCKS(s) ((xfs_rfsblock_t)(s)->sb_agcount * (s)->sb_agblocks)
237#define XFS_MIN_DBLOCKS(s) ((xfs_rfsblock_t)((s)->sb_agcount - 1) * \
238 (s)->sb_agblocks + XFS_MIN_AG_BLOCKS)
239
240
241
242
243typedef struct xfs_growfs_data {
244 __u64 newblocks;
245 __u32 imaxpct;
246} xfs_growfs_data_t;
247
248typedef struct xfs_growfs_log {
249 __u32 newblocks;
250 __u32 isint;
251} xfs_growfs_log_t;
252
253typedef struct xfs_growfs_rt {
254 __u64 newblocks;
255 __u32 extsize;
256} xfs_growfs_rt_t;
257
258
259
260
261
262typedef struct xfs_bstime {
263 time_t tv_sec;
264 __s32 tv_nsec;
265} xfs_bstime_t;
266
267typedef struct xfs_bstat {
268 __u64 bs_ino;
269 __u16 bs_mode;
270 __u16 bs_nlink;
271 __u32 bs_uid;
272 __u32 bs_gid;
273 __u32 bs_rdev;
274 __s32 bs_blksize;
275 __s64 bs_size;
276 xfs_bstime_t bs_atime;
277 xfs_bstime_t bs_mtime;
278 xfs_bstime_t bs_ctime;
279 int64_t bs_blocks;
280 __u32 bs_xflags;
281 __s32 bs_extsize;
282 __s32 bs_extents;
283 __u32 bs_gen;
284 __u16 bs_projid_lo;
285#define bs_projid bs_projid_lo
286 __u16 bs_forkoff;
287 __u16 bs_projid_hi;
288 unsigned char bs_pad[6];
289 __u32 bs_cowextsize;
290 __u32 bs_dmevmask;
291 __u16 bs_dmstate;
292 __u16 bs_aextents;
293} xfs_bstat_t;
294
295
296
297
298
299
300static inline uint32_t
301bstat_get_projid(struct xfs_bstat *bs)
302{
303 return (uint32_t)bs->bs_projid_hi << 16 | bs->bs_projid_lo;
304}
305
306
307
308
309typedef struct xfs_fsop_bulkreq {
310 __u64 __user *lastip;
311 __s32 icount;
312 void __user *ubuffer;
313 __s32 __user *ocount;
314} xfs_fsop_bulkreq_t;
315
316
317
318
319
320typedef struct xfs_inogrp {
321 __u64 xi_startino;
322 __s32 xi_alloccount;
323 __u64 xi_allocmask;
324} xfs_inogrp_t;
325
326
327
328
329
330typedef struct xfs_error_injection {
331 __s32 fd;
332 __s32 errtag;
333} xfs_error_injection_t;
334
335
336
337
338
339#define XFS_EOFBLOCKS_VERSION 1
340struct xfs_fs_eofblocks {
341 __u32 eof_version;
342 __u32 eof_flags;
343 uid_t eof_uid;
344 gid_t eof_gid;
345 prid_t eof_prid;
346 __u32 pad32;
347 __u64 eof_min_file_size;
348 __u64 pad64[12];
349};
350
351
352#define XFS_EOF_FLAGS_SYNC (1 << 0)
353#define XFS_EOF_FLAGS_UID (1 << 1)
354#define XFS_EOF_FLAGS_GID (1 << 2)
355#define XFS_EOF_FLAGS_PRID (1 << 3)
356#define XFS_EOF_FLAGS_MINFILESIZE (1 << 4)
357#define XFS_EOF_FLAGS_UNION (1 << 5)
358
359
360#define XFS_EOF_FLAGS_VALID \
361 (XFS_EOF_FLAGS_SYNC | \
362 XFS_EOF_FLAGS_UID | \
363 XFS_EOF_FLAGS_GID | \
364 XFS_EOF_FLAGS_PRID | \
365 XFS_EOF_FLAGS_MINFILESIZE)
366
367
368
369
370
371typedef struct xfs_fsop_handlereq {
372 __u32 fd;
373 void __user *path;
374 __u32 oflags;
375 void __user *ihandle;
376 __u32 ihandlen;
377 void __user *ohandle;
378 __u32 __user *ohandlen;
379} xfs_fsop_handlereq_t;
380
381
382
383
384
385
386
387
388typedef struct xfs_fsop_setdm_handlereq {
389 struct xfs_fsop_handlereq hreq;
390 struct fsdmidata __user *data;
391} xfs_fsop_setdm_handlereq_t;
392
393typedef struct xfs_attrlist_cursor {
394 __u32 opaque[4];
395} xfs_attrlist_cursor_t;
396
397typedef struct xfs_fsop_attrlist_handlereq {
398 struct xfs_fsop_handlereq hreq;
399 struct xfs_attrlist_cursor pos;
400 __u32 flags;
401 __u32 buflen;
402 void __user *buffer;
403} xfs_fsop_attrlist_handlereq_t;
404
405typedef struct xfs_attr_multiop {
406 __u32 am_opcode;
407#define ATTR_OP_GET 1
408#define ATTR_OP_SET 2
409#define ATTR_OP_REMOVE 3
410 __s32 am_error;
411 void __user *am_attrname;
412 void __user *am_attrvalue;
413 __u32 am_length;
414 __u32 am_flags;
415} xfs_attr_multiop_t;
416
417typedef struct xfs_fsop_attrmulti_handlereq {
418 struct xfs_fsop_handlereq hreq;
419 __u32 opcount;
420 struct xfs_attr_multiop __user *ops;
421} xfs_fsop_attrmulti_handlereq_t;
422
423
424
425
426typedef struct { __u32 val[2]; } xfs_fsid_t;
427
428typedef struct xfs_fid {
429 __u16 fid_len;
430 __u16 fid_pad;
431 __u32 fid_gen;
432 __u64 fid_ino;
433} xfs_fid_t;
434
435typedef struct xfs_handle {
436 union {
437 __s64 align;
438 xfs_fsid_t _ha_fsid;
439 } ha_u;
440 xfs_fid_t ha_fid;
441} xfs_handle_t;
442#define ha_fsid ha_u._ha_fsid
443
444
445
446
447typedef struct xfs_swapext
448{
449 int64_t sx_version;
450#define XFS_SX_VERSION 0
451 int64_t sx_fdtarget;
452 int64_t sx_fdtmp;
453 xfs_off_t sx_offset;
454 xfs_off_t sx_length;
455 char sx_pad[16];
456 xfs_bstat_t sx_stat;
457} xfs_swapext_t;
458
459
460
461
462#define XFS_FSOP_GOING_FLAGS_DEFAULT 0x0
463#define XFS_FSOP_GOING_FLAGS_LOGFLUSH 0x1
464#define XFS_FSOP_GOING_FLAGS_NOLOGFLUSH 0x2
465
466
467struct xfs_scrub_metadata {
468 __u32 sm_type;
469 __u32 sm_flags;
470 __u64 sm_ino;
471 __u32 sm_gen;
472 __u32 sm_agno;
473 __u64 sm_reserved[5];
474};
475
476
477
478
479
480
481#define XFS_SCRUB_TYPE_PROBE 0
482#define XFS_SCRUB_TYPE_SB 1
483#define XFS_SCRUB_TYPE_AGF 2
484#define XFS_SCRUB_TYPE_AGFL 3
485#define XFS_SCRUB_TYPE_AGI 4
486#define XFS_SCRUB_TYPE_BNOBT 5
487#define XFS_SCRUB_TYPE_CNTBT 6
488#define XFS_SCRUB_TYPE_INOBT 7
489#define XFS_SCRUB_TYPE_FINOBT 8
490#define XFS_SCRUB_TYPE_RMAPBT 9
491#define XFS_SCRUB_TYPE_REFCNTBT 10
492#define XFS_SCRUB_TYPE_INODE 11
493#define XFS_SCRUB_TYPE_BMBTD 12
494#define XFS_SCRUB_TYPE_BMBTA 13
495#define XFS_SCRUB_TYPE_BMBTC 14
496#define XFS_SCRUB_TYPE_DIR 15
497#define XFS_SCRUB_TYPE_XATTR 16
498#define XFS_SCRUB_TYPE_SYMLINK 17
499#define XFS_SCRUB_TYPE_PARENT 18
500#define XFS_SCRUB_TYPE_RTBITMAP 19
501#define XFS_SCRUB_TYPE_RTSUM 20
502#define XFS_SCRUB_TYPE_UQUOTA 21
503#define XFS_SCRUB_TYPE_GQUOTA 22
504#define XFS_SCRUB_TYPE_PQUOTA 23
505
506
507#define XFS_SCRUB_TYPE_NR 24
508
509
510#define XFS_SCRUB_IFLAG_REPAIR (1 << 0)
511
512
513#define XFS_SCRUB_OFLAG_CORRUPT (1 << 1)
514
515
516
517
518
519#define XFS_SCRUB_OFLAG_PREEN (1 << 2)
520
521
522#define XFS_SCRUB_OFLAG_XFAIL (1 << 3)
523
524
525#define XFS_SCRUB_OFLAG_XCORRUPT (1 << 4)
526
527
528#define XFS_SCRUB_OFLAG_INCOMPLETE (1 << 5)
529
530
531#define XFS_SCRUB_OFLAG_WARNING (1 << 6)
532
533
534
535
536
537#define XFS_SCRUB_OFLAG_NO_REPAIR_NEEDED (1 << 7)
538
539#define XFS_SCRUB_FLAGS_IN (XFS_SCRUB_IFLAG_REPAIR)
540#define XFS_SCRUB_FLAGS_OUT (XFS_SCRUB_OFLAG_CORRUPT | \
541 XFS_SCRUB_OFLAG_PREEN | \
542 XFS_SCRUB_OFLAG_XFAIL | \
543 XFS_SCRUB_OFLAG_XCORRUPT | \
544 XFS_SCRUB_OFLAG_INCOMPLETE | \
545 XFS_SCRUB_OFLAG_WARNING | \
546 XFS_SCRUB_OFLAG_NO_REPAIR_NEEDED)
547#define XFS_SCRUB_FLAGS_ALL (XFS_SCRUB_FLAGS_IN | XFS_SCRUB_FLAGS_OUT)
548
549
550
551
552#ifdef XATTR_LIST_MAX
553# define XFS_XATTR_LIST_MAX XATTR_LIST_MAX
554#else
555# define XFS_XATTR_LIST_MAX 65536
556#endif
557
558
559
560
561
562#define XFS_IOC_GETXFLAGS FS_IOC_GETFLAGS
563#define XFS_IOC_SETXFLAGS FS_IOC_SETFLAGS
564#define XFS_IOC_GETVERSION FS_IOC_GETVERSION
565
566
567
568
569
570
571#define XFS_IOC_ALLOCSP _IOW ('X', 10, struct xfs_flock64)
572#define XFS_IOC_FREESP _IOW ('X', 11, struct xfs_flock64)
573#define XFS_IOC_DIOINFO _IOR ('X', 30, struct dioattr)
574#define XFS_IOC_FSGETXATTR FS_IOC_FSGETXATTR
575#define XFS_IOC_FSSETXATTR FS_IOC_FSSETXATTR
576#define XFS_IOC_ALLOCSP64 _IOW ('X', 36, struct xfs_flock64)
577#define XFS_IOC_FREESP64 _IOW ('X', 37, struct xfs_flock64)
578#define XFS_IOC_GETBMAP _IOWR('X', 38, struct getbmap)
579#define XFS_IOC_FSSETDM _IOW ('X', 39, struct fsdmidata)
580#define XFS_IOC_RESVSP _IOW ('X', 40, struct xfs_flock64)
581#define XFS_IOC_UNRESVSP _IOW ('X', 41, struct xfs_flock64)
582#define XFS_IOC_RESVSP64 _IOW ('X', 42, struct xfs_flock64)
583#define XFS_IOC_UNRESVSP64 _IOW ('X', 43, struct xfs_flock64)
584#define XFS_IOC_GETBMAPA _IOWR('X', 44, struct getbmap)
585#define XFS_IOC_FSGETXATTRA _IOR ('X', 45, struct fsxattr)
586
587
588#define XFS_IOC_GETBMAPX _IOWR('X', 56, struct getbmap)
589#define XFS_IOC_ZERO_RANGE _IOW ('X', 57, struct xfs_flock64)
590#define XFS_IOC_FREE_EOFBLOCKS _IOR ('X', 58, struct xfs_fs_eofblocks)
591
592#define XFS_IOC_SCRUB_METADATA _IOWR('X', 60, struct xfs_scrub_metadata)
593
594
595
596
597#define XFS_IOC_FSGEOMETRY_V1 _IOR ('X', 100, struct xfs_fsop_geom_v1)
598#define XFS_IOC_FSBULKSTAT _IOWR('X', 101, struct xfs_fsop_bulkreq)
599#define XFS_IOC_FSBULKSTAT_SINGLE _IOWR('X', 102, struct xfs_fsop_bulkreq)
600#define XFS_IOC_FSINUMBERS _IOWR('X', 103, struct xfs_fsop_bulkreq)
601#define XFS_IOC_PATH_TO_FSHANDLE _IOWR('X', 104, struct xfs_fsop_handlereq)
602#define XFS_IOC_PATH_TO_HANDLE _IOWR('X', 105, struct xfs_fsop_handlereq)
603#define XFS_IOC_FD_TO_HANDLE _IOWR('X', 106, struct xfs_fsop_handlereq)
604#define XFS_IOC_OPEN_BY_HANDLE _IOWR('X', 107, struct xfs_fsop_handlereq)
605#define XFS_IOC_READLINK_BY_HANDLE _IOWR('X', 108, struct xfs_fsop_handlereq)
606#define XFS_IOC_SWAPEXT _IOWR('X', 109, struct xfs_swapext)
607#define XFS_IOC_FSGROWFSDATA _IOW ('X', 110, struct xfs_growfs_data)
608#define XFS_IOC_FSGROWFSLOG _IOW ('X', 111, struct xfs_growfs_log)
609#define XFS_IOC_FSGROWFSRT _IOW ('X', 112, struct xfs_growfs_rt)
610#define XFS_IOC_FSCOUNTS _IOR ('X', 113, struct xfs_fsop_counts)
611#define XFS_IOC_SET_RESBLKS _IOWR('X', 114, struct xfs_fsop_resblks)
612#define XFS_IOC_GET_RESBLKS _IOR ('X', 115, struct xfs_fsop_resblks)
613#define XFS_IOC_ERROR_INJECTION _IOW ('X', 116, struct xfs_error_injection)
614#define XFS_IOC_ERROR_CLEARALL _IOW ('X', 117, struct xfs_error_injection)
615
616
617#define XFS_IOC_FREEZE _IOWR('X', 119, int)
618#define XFS_IOC_THAW _IOWR('X', 120, int)
619
620#define XFS_IOC_FSSETDM_BY_HANDLE _IOW ('X', 121, struct xfs_fsop_setdm_handlereq)
621#define XFS_IOC_ATTRLIST_BY_HANDLE _IOW ('X', 122, struct xfs_fsop_attrlist_handlereq)
622#define XFS_IOC_ATTRMULTI_BY_HANDLE _IOW ('X', 123, struct xfs_fsop_attrmulti_handlereq)
623#define XFS_IOC_FSGEOMETRY _IOR ('X', 124, struct xfs_fsop_geom)
624#define XFS_IOC_GOINGDOWN _IOR ('X', 125, uint32_t)
625
626
627
628#ifndef HAVE_BBMACROS
629
630
631
632
633
634#define BBSHIFT 9
635#define BBSIZE (1<<BBSHIFT)
636#define BBMASK (BBSIZE-1)
637#define BTOBB(bytes) (((__u64)(bytes) + BBSIZE - 1) >> BBSHIFT)
638#define BTOBBT(bytes) ((__u64)(bytes) >> BBSHIFT)
639#define BBTOB(bbs) ((bbs) << BBSHIFT)
640#endif
641
642#endif
643