^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: LGPL-2.1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright (c) 1995-2005 Silicon Graphics, Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * All Rights Reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #ifndef __XFS_FS_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #define __XFS_FS_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * SGI's XFS filesystem's major stuff (constants, structures)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) * Direct I/O attribute record used with XFS_IOC_DIOINFO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * d_miniosz is the min xfer size, xfer size multiple and file seek offset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * alignment.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #ifndef HAVE_DIOATTR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) struct dioattr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) __u32 d_mem; /* data buffer memory alignment */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) __u32 d_miniosz; /* min xfer size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) __u32 d_maxiosz; /* max xfer size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * Structure for XFS_IOC_GETBMAP.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) * On input, fill in bmv_offset and bmv_length of the first structure
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) * to indicate the area of interest in the file, and bmv_entries with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) * the number of array elements given back. The first structure is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) * updated on return to give the offset and length for the next call.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #ifndef HAVE_GETBMAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) struct getbmap {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) __s64 bmv_offset; /* file offset of segment in blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) __s64 bmv_block; /* starting block (64-bit daddr_t) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) __s64 bmv_length; /* length of segment, blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) __s32 bmv_count; /* # of entries in array incl. 1st */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) __s32 bmv_entries; /* # of entries filled in (output) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) * Structure for XFS_IOC_GETBMAPX. Fields bmv_offset through bmv_entries
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) * are used exactly as in the getbmap structure. The getbmapx structure
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) * has additional bmv_iflags and bmv_oflags fields. The bmv_iflags field
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) * is only used for the first structure. It contains input flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) * specifying XFS_IOC_GETBMAPX actions. The bmv_oflags field is filled
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) * in by the XFS_IOC_GETBMAPX command for each returned structure after
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) * the first.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #ifndef HAVE_GETBMAPX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) struct getbmapx {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) __s64 bmv_offset; /* file offset of segment in blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) __s64 bmv_block; /* starting block (64-bit daddr_t) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) __s64 bmv_length; /* length of segment, blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) __s32 bmv_count; /* # of entries in array incl. 1st */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) __s32 bmv_entries; /* # of entries filled in (output). */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) __s32 bmv_iflags; /* input flags (1st structure) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) __s32 bmv_oflags; /* output flags (after 1st structure)*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) __s32 bmv_unused1; /* future use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) __s32 bmv_unused2; /* future use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) /* bmv_iflags values - set by XFS_IOC_GETBMAPX caller. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) #define BMV_IF_ATTRFORK 0x1 /* return attr fork rather than data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #define BMV_IF_NO_DMAPI_READ 0x2 /* Do not generate DMAPI read event */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) #define BMV_IF_PREALLOC 0x4 /* rtn status BMV_OF_PREALLOC if req */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #define BMV_IF_DELALLOC 0x8 /* rtn status BMV_OF_DELALLOC if req */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #define BMV_IF_NO_HOLES 0x10 /* Do not return holes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) #define BMV_IF_COWFORK 0x20 /* return CoW fork rather than data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) #define BMV_IF_VALID \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) (BMV_IF_ATTRFORK|BMV_IF_NO_DMAPI_READ|BMV_IF_PREALLOC| \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) BMV_IF_DELALLOC|BMV_IF_NO_HOLES|BMV_IF_COWFORK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) /* bmv_oflags values - returned for each non-header segment */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define BMV_OF_PREALLOC 0x1 /* segment = unwritten pre-allocation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #define BMV_OF_DELALLOC 0x2 /* segment = delayed allocation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #define BMV_OF_LAST 0x4 /* segment is the last in the file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) #define BMV_OF_SHARED 0x8 /* segment shared with another file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) /* fmr_owner special values for FS_IOC_GETFSMAP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) #define XFS_FMR_OWN_FREE FMR_OWN_FREE /* free space */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) #define XFS_FMR_OWN_UNKNOWN FMR_OWN_UNKNOWN /* unknown owner */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) #define XFS_FMR_OWN_FS FMR_OWNER('X', 1) /* static fs metadata */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) #define XFS_FMR_OWN_LOG FMR_OWNER('X', 2) /* journalling log */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) #define XFS_FMR_OWN_AG FMR_OWNER('X', 3) /* per-AG metadata */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) #define XFS_FMR_OWN_INOBT FMR_OWNER('X', 4) /* inode btree blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) #define XFS_FMR_OWN_INODES FMR_OWNER('X', 5) /* inodes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) #define XFS_FMR_OWN_REFC FMR_OWNER('X', 6) /* refcount tree */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #define XFS_FMR_OWN_COW FMR_OWNER('X', 7) /* cow staging */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) #define XFS_FMR_OWN_DEFECTIVE FMR_OWNER('X', 8) /* bad blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) * Structure for XFS_IOC_FSSETDM.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) * For use by backup and restore programs to set the XFS on-disk inode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) * fields di_dmevmask and di_dmstate. These must be set to exactly and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) * only values previously obtained via xfs_bulkstat! (Specifically the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) * struct xfs_bstat fields bs_dmevmask and bs_dmstate.)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #ifndef HAVE_FSDMIDATA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) struct fsdmidata {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) __u32 fsd_dmevmask; /* corresponds to di_dmevmask */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) __u16 fsd_padding;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) __u16 fsd_dmstate; /* corresponds to di_dmstate */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) * File segment locking set data type for 64 bit access.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) * Also used for all the RESV/FREE interfaces.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) typedef struct xfs_flock64 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) __s16 l_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) __s16 l_whence;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) __s64 l_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) __s64 l_len; /* len == 0 means until end of file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) __s32 l_sysid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) __u32 l_pid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) __s32 l_pad[4]; /* reserve area */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) } xfs_flock64_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) * Output for XFS_IOC_FSGEOMETRY_V1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) struct xfs_fsop_geom_v1 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) __u32 blocksize; /* filesystem (data) block size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) __u32 rtextsize; /* realtime extent size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) __u32 agblocks; /* fsblocks in an AG */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) __u32 agcount; /* number of allocation groups */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) __u32 logblocks; /* fsblocks in the log */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) __u32 sectsize; /* (data) sector size, bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) __u32 inodesize; /* inode size in bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) __u32 imaxpct; /* max allowed inode space(%) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) __u64 datablocks; /* fsblocks in data subvolume */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) __u64 rtblocks; /* fsblocks in realtime subvol */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) __u64 rtextents; /* rt extents in realtime subvol*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) __u64 logstart; /* starting fsblock of the log */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) unsigned char uuid[16]; /* unique id of the filesystem */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) __u32 sunit; /* stripe unit, fsblocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) __u32 swidth; /* stripe width, fsblocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) __s32 version; /* structure version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) __u32 flags; /* superblock version flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) __u32 logsectsize; /* log sector size, bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) __u32 rtsectsize; /* realtime sector size, bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) __u32 dirblocksize; /* directory block size, bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) * Output for XFS_IOC_FSGEOMETRY_V4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) struct xfs_fsop_geom_v4 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) __u32 blocksize; /* filesystem (data) block size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) __u32 rtextsize; /* realtime extent size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) __u32 agblocks; /* fsblocks in an AG */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) __u32 agcount; /* number of allocation groups */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) __u32 logblocks; /* fsblocks in the log */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) __u32 sectsize; /* (data) sector size, bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) __u32 inodesize; /* inode size in bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) __u32 imaxpct; /* max allowed inode space(%) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) __u64 datablocks; /* fsblocks in data subvolume */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) __u64 rtblocks; /* fsblocks in realtime subvol */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) __u64 rtextents; /* rt extents in realtime subvol*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) __u64 logstart; /* starting fsblock of the log */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) unsigned char uuid[16]; /* unique id of the filesystem */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) __u32 sunit; /* stripe unit, fsblocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) __u32 swidth; /* stripe width, fsblocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) __s32 version; /* structure version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) __u32 flags; /* superblock version flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) __u32 logsectsize; /* log sector size, bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) __u32 rtsectsize; /* realtime sector size, bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) __u32 dirblocksize; /* directory block size, bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) __u32 logsunit; /* log stripe unit, bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) * Output for XFS_IOC_FSGEOMETRY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) struct xfs_fsop_geom {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) __u32 blocksize; /* filesystem (data) block size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) __u32 rtextsize; /* realtime extent size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) __u32 agblocks; /* fsblocks in an AG */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) __u32 agcount; /* number of allocation groups */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) __u32 logblocks; /* fsblocks in the log */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) __u32 sectsize; /* (data) sector size, bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) __u32 inodesize; /* inode size in bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) __u32 imaxpct; /* max allowed inode space(%) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) __u64 datablocks; /* fsblocks in data subvolume */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) __u64 rtblocks; /* fsblocks in realtime subvol */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) __u64 rtextents; /* rt extents in realtime subvol*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) __u64 logstart; /* starting fsblock of the log */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) unsigned char uuid[16]; /* unique id of the filesystem */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) __u32 sunit; /* stripe unit, fsblocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) __u32 swidth; /* stripe width, fsblocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) __s32 version; /* structure version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) __u32 flags; /* superblock version flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) __u32 logsectsize; /* log sector size, bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) __u32 rtsectsize; /* realtime sector size, bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) __u32 dirblocksize; /* directory block size, bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) __u32 logsunit; /* log stripe unit, bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) uint32_t sick; /* o: unhealthy fs & rt metadata */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) uint32_t checked; /* o: checked fs & rt metadata */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) __u64 reserved[17]; /* reserved space */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) #define XFS_FSOP_GEOM_SICK_COUNTERS (1 << 0) /* summary counters */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) #define XFS_FSOP_GEOM_SICK_UQUOTA (1 << 1) /* user quota */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) #define XFS_FSOP_GEOM_SICK_GQUOTA (1 << 2) /* group quota */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) #define XFS_FSOP_GEOM_SICK_PQUOTA (1 << 3) /* project quota */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) #define XFS_FSOP_GEOM_SICK_RT_BITMAP (1 << 4) /* realtime bitmap */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) #define XFS_FSOP_GEOM_SICK_RT_SUMMARY (1 << 5) /* realtime summary */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) /* Output for XFS_FS_COUNTS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) typedef struct xfs_fsop_counts {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) __u64 freedata; /* free data section blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) __u64 freertx; /* free rt extents */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) __u64 freeino; /* free inodes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) __u64 allocino; /* total allocated inodes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) } xfs_fsop_counts_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) /* Input/Output for XFS_GET_RESBLKS and XFS_SET_RESBLKS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) typedef struct xfs_fsop_resblks {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) __u64 resblks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) __u64 resblks_avail;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) } xfs_fsop_resblks_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) #define XFS_FSOP_GEOM_VERSION 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) #define XFS_FSOP_GEOM_VERSION_V5 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) #define XFS_FSOP_GEOM_FLAGS_ATTR (1 << 0) /* attributes in use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) #define XFS_FSOP_GEOM_FLAGS_NLINK (1 << 1) /* 32-bit nlink values */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) #define XFS_FSOP_GEOM_FLAGS_QUOTA (1 << 2) /* quotas enabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) #define XFS_FSOP_GEOM_FLAGS_IALIGN (1 << 3) /* inode alignment */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) #define XFS_FSOP_GEOM_FLAGS_DALIGN (1 << 4) /* large data alignment */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) #define XFS_FSOP_GEOM_FLAGS_SHARED (1 << 5) /* read-only shared */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) #define XFS_FSOP_GEOM_FLAGS_EXTFLG (1 << 6) /* special extent flag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) #define XFS_FSOP_GEOM_FLAGS_DIRV2 (1 << 7) /* directory version 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) #define XFS_FSOP_GEOM_FLAGS_LOGV2 (1 << 8) /* log format version 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) #define XFS_FSOP_GEOM_FLAGS_SECTOR (1 << 9) /* sector sizes >1BB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) #define XFS_FSOP_GEOM_FLAGS_ATTR2 (1 << 10) /* inline attributes rework */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) #define XFS_FSOP_GEOM_FLAGS_PROJID32 (1 << 11) /* 32-bit project IDs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) #define XFS_FSOP_GEOM_FLAGS_DIRV2CI (1 << 12) /* ASCII only CI names */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) /* -- Do not use -- (1 << 13) SGI parent pointers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) #define XFS_FSOP_GEOM_FLAGS_LAZYSB (1 << 14) /* lazy superblock counters */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) #define XFS_FSOP_GEOM_FLAGS_V5SB (1 << 15) /* version 5 superblock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) #define XFS_FSOP_GEOM_FLAGS_FTYPE (1 << 16) /* inode directory types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) #define XFS_FSOP_GEOM_FLAGS_FINOBT (1 << 17) /* free inode btree */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) #define XFS_FSOP_GEOM_FLAGS_SPINODES (1 << 18) /* sparse inode chunks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) #define XFS_FSOP_GEOM_FLAGS_RMAPBT (1 << 19) /* reverse mapping btree */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) #define XFS_FSOP_GEOM_FLAGS_REFLINK (1 << 20) /* files can share blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) #define XFS_FSOP_GEOM_FLAGS_BIGTIME (1 << 21) /* 64-bit nsec timestamps */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) * Minimum and maximum sizes need for growth checks.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) * Block counts are in units of filesystem blocks, not basic blocks.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) #define XFS_MIN_AG_BLOCKS 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) #define XFS_MIN_LOG_BLOCKS 512ULL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) #define XFS_MAX_LOG_BLOCKS (1024 * 1024ULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) #define XFS_MIN_LOG_BYTES (10 * 1024 * 1024ULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) * Limits on sb_agblocks/sb_agblklog -- mkfs won't format AGs smaller than
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) * 16MB or larger than 1TB.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) #define XFS_MIN_AG_BYTES (1ULL << 24) /* 16 MB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) #define XFS_MAX_AG_BYTES (1ULL << 40) /* 1 TB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) /* keep the maximum size under 2^31 by a small amount */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) #define XFS_MAX_LOG_BYTES \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) ((2 * 1024 * 1024 * 1024ULL) - XFS_MIN_LOG_BYTES)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) /* Used for sanity checks on superblock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) #define XFS_MAX_DBLOCKS(s) ((xfs_rfsblock_t)(s)->sb_agcount * (s)->sb_agblocks)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) #define XFS_MIN_DBLOCKS(s) ((xfs_rfsblock_t)((s)->sb_agcount - 1) * \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) (s)->sb_agblocks + XFS_MIN_AG_BLOCKS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) * Output for XFS_IOC_AG_GEOMETRY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) struct xfs_ag_geometry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) uint32_t ag_number; /* i/o: AG number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) uint32_t ag_length; /* o: length in blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) uint32_t ag_freeblks; /* o: free space */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) uint32_t ag_icount; /* o: inodes allocated */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) uint32_t ag_ifree; /* o: inodes free */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) uint32_t ag_sick; /* o: sick things in ag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) uint32_t ag_checked; /* o: checked metadata in ag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) uint32_t ag_flags; /* i/o: flags for this ag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) uint64_t ag_reserved[12];/* o: zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) #define XFS_AG_GEOM_SICK_SB (1 << 0) /* superblock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) #define XFS_AG_GEOM_SICK_AGF (1 << 1) /* AGF header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) #define XFS_AG_GEOM_SICK_AGFL (1 << 2) /* AGFL header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) #define XFS_AG_GEOM_SICK_AGI (1 << 3) /* AGI header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) #define XFS_AG_GEOM_SICK_BNOBT (1 << 4) /* free space by block */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) #define XFS_AG_GEOM_SICK_CNTBT (1 << 5) /* free space by length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) #define XFS_AG_GEOM_SICK_INOBT (1 << 6) /* inode index */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) #define XFS_AG_GEOM_SICK_FINOBT (1 << 7) /* free inode index */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) #define XFS_AG_GEOM_SICK_RMAPBT (1 << 8) /* reverse mappings */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) #define XFS_AG_GEOM_SICK_REFCNTBT (1 << 9) /* reference counts */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) * Structures for XFS_IOC_FSGROWFSDATA, XFS_IOC_FSGROWFSLOG & XFS_IOC_FSGROWFSRT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) typedef struct xfs_growfs_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) __u64 newblocks; /* new data subvol size, fsblocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) __u32 imaxpct; /* new inode space percentage limit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) } xfs_growfs_data_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) typedef struct xfs_growfs_log {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) __u32 newblocks; /* new log size, fsblocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) __u32 isint; /* 1 if new log is internal */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) } xfs_growfs_log_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) typedef struct xfs_growfs_rt {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) __u64 newblocks; /* new realtime size, fsblocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) __u32 extsize; /* new realtime extent size, fsblocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) } xfs_growfs_rt_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) * Structures returned from ioctl XFS_IOC_FSBULKSTAT & XFS_IOC_FSBULKSTAT_SINGLE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) typedef struct xfs_bstime {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) __kernel_long_t tv_sec; /* seconds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) __s32 tv_nsec; /* and nanoseconds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) } xfs_bstime_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) struct xfs_bstat {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) __u64 bs_ino; /* inode number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) __u16 bs_mode; /* type and mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) __u16 bs_nlink; /* number of links */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) __u32 bs_uid; /* user id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) __u32 bs_gid; /* group id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) __u32 bs_rdev; /* device value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) __s32 bs_blksize; /* block size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) __s64 bs_size; /* file size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) xfs_bstime_t bs_atime; /* access time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) xfs_bstime_t bs_mtime; /* modify time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) xfs_bstime_t bs_ctime; /* inode change time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) int64_t bs_blocks; /* number of blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) __u32 bs_xflags; /* extended flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) __s32 bs_extsize; /* extent size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) __s32 bs_extents; /* number of extents */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) __u32 bs_gen; /* generation count */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) __u16 bs_projid_lo; /* lower part of project id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) #define bs_projid bs_projid_lo /* (previously just bs_projid) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) __u16 bs_forkoff; /* inode fork offset in bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) __u16 bs_projid_hi; /* higher part of project id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) uint16_t bs_sick; /* sick inode metadata */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) uint16_t bs_checked; /* checked inode metadata */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) unsigned char bs_pad[2]; /* pad space, unused */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) __u32 bs_cowextsize; /* cow extent size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) __u32 bs_dmevmask; /* DMIG event mask */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) __u16 bs_dmstate; /* DMIG state info */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) __u16 bs_aextents; /* attribute number of extents */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) /* New bulkstat structure that reports v5 features and fixes padding issues */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) struct xfs_bulkstat {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) uint64_t bs_ino; /* inode number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) uint64_t bs_size; /* file size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) uint64_t bs_blocks; /* number of blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) uint64_t bs_xflags; /* extended flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) int64_t bs_atime; /* access time, seconds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) int64_t bs_mtime; /* modify time, seconds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) int64_t bs_ctime; /* inode change time, seconds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) int64_t bs_btime; /* creation time, seconds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) uint32_t bs_gen; /* generation count */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) uint32_t bs_uid; /* user id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) uint32_t bs_gid; /* group id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) uint32_t bs_projectid; /* project id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) uint32_t bs_atime_nsec; /* access time, nanoseconds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) uint32_t bs_mtime_nsec; /* modify time, nanoseconds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) uint32_t bs_ctime_nsec; /* inode change time, nanoseconds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) uint32_t bs_btime_nsec; /* creation time, nanoseconds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) uint32_t bs_blksize; /* block size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) uint32_t bs_rdev; /* device value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) uint32_t bs_cowextsize_blks; /* cow extent size hint, blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) uint32_t bs_extsize_blks; /* extent size hint, blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) uint32_t bs_nlink; /* number of links */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) uint32_t bs_extents; /* number of extents */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) uint32_t bs_aextents; /* attribute number of extents */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) uint16_t bs_version; /* structure version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) uint16_t bs_forkoff; /* inode fork offset in bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) uint16_t bs_sick; /* sick inode metadata */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) uint16_t bs_checked; /* checked inode metadata */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) uint16_t bs_mode; /* type and mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) uint16_t bs_pad2; /* zeroed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) uint64_t bs_pad[7]; /* zeroed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) #define XFS_BULKSTAT_VERSION_V1 (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) #define XFS_BULKSTAT_VERSION_V5 (5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) /* bs_sick flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) #define XFS_BS_SICK_INODE (1 << 0) /* inode core */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) #define XFS_BS_SICK_BMBTD (1 << 1) /* data fork */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) #define XFS_BS_SICK_BMBTA (1 << 2) /* attr fork */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) #define XFS_BS_SICK_BMBTC (1 << 3) /* cow fork */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) #define XFS_BS_SICK_DIR (1 << 4) /* directory */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) #define XFS_BS_SICK_XATTR (1 << 5) /* extended attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) #define XFS_BS_SICK_SYMLINK (1 << 6) /* symbolic link remote target */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) #define XFS_BS_SICK_PARENT (1 << 7) /* parent pointers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) * Project quota id helpers (previously projid was 16bit only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) * and using two 16bit values to hold new 32bit projid was chosen
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) * to retain compatibility with "old" filesystems).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) static inline uint32_t
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) bstat_get_projid(const struct xfs_bstat *bs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) return (uint32_t)bs->bs_projid_hi << 16 | bs->bs_projid_lo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) * The user-level BulkStat Request interface structure.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) struct xfs_fsop_bulkreq {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) __u64 __user *lastip; /* last inode # pointer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) __s32 icount; /* count of entries in buffer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) void __user *ubuffer;/* user buffer for inode desc. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) __s32 __user *ocount; /* output count pointer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) * Structures returned from xfs_inumbers routine (XFS_IOC_FSINUMBERS).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) struct xfs_inogrp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) __u64 xi_startino; /* starting inode number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) __s32 xi_alloccount; /* # bits set in allocmask */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) __u64 xi_allocmask; /* mask of allocated inodes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) /* New inumbers structure that reports v5 features and fixes padding issues */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) struct xfs_inumbers {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) uint64_t xi_startino; /* starting inode number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) uint64_t xi_allocmask; /* mask of allocated inodes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) uint8_t xi_alloccount; /* # bits set in allocmask */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) uint8_t xi_version; /* version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) uint8_t xi_padding[6]; /* zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) #define XFS_INUMBERS_VERSION_V1 (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) #define XFS_INUMBERS_VERSION_V5 (5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) /* Header for bulk inode requests. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) struct xfs_bulk_ireq {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) uint64_t ino; /* I/O: start with this inode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) uint32_t flags; /* I/O: operation flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) uint32_t icount; /* I: count of entries in buffer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) uint32_t ocount; /* O: count of entries filled out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) uint32_t agno; /* I: see comment for IREQ_AGNO */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) uint64_t reserved[5]; /* must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) * Only return results from the specified @agno. If @ino is zero, start
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) * with the first inode of @agno.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) #define XFS_BULK_IREQ_AGNO (1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) * Return bulkstat information for a single inode, where @ino value is a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) * special value, not a literal inode number. See the XFS_BULK_IREQ_SPECIAL_*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) * values below. Not compatible with XFS_BULK_IREQ_AGNO.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) #define XFS_BULK_IREQ_SPECIAL (1 << 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) #define XFS_BULK_IREQ_FLAGS_ALL (XFS_BULK_IREQ_AGNO | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) XFS_BULK_IREQ_SPECIAL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) /* Operate on the root directory inode. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) #define XFS_BULK_IREQ_SPECIAL_ROOT (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) * ioctl structures for v5 bulkstat and inumbers requests
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) struct xfs_bulkstat_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) struct xfs_bulk_ireq hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) struct xfs_bulkstat bulkstat[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) #define XFS_BULKSTAT_REQ_SIZE(nr) (sizeof(struct xfs_bulkstat_req) + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) (nr) * sizeof(struct xfs_bulkstat))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) struct xfs_inumbers_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) struct xfs_bulk_ireq hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) struct xfs_inumbers inumbers[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) #define XFS_INUMBERS_REQ_SIZE(nr) (sizeof(struct xfs_inumbers_req) + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) (nr) * sizeof(struct xfs_inumbers))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) * Error injection.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) typedef struct xfs_error_injection {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) __s32 fd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) __s32 errtag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) } xfs_error_injection_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) * Speculative preallocation trimming.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) #define XFS_EOFBLOCKS_VERSION 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) struct xfs_fs_eofblocks {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) __u32 eof_version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) __u32 eof_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) uid_t eof_uid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) gid_t eof_gid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) prid_t eof_prid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) __u32 pad32;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) __u64 eof_min_file_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) __u64 pad64[12];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) /* eof_flags values */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) #define XFS_EOF_FLAGS_SYNC (1 << 0) /* sync/wait mode scan */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) #define XFS_EOF_FLAGS_UID (1 << 1) /* filter by uid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) #define XFS_EOF_FLAGS_GID (1 << 2) /* filter by gid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) #define XFS_EOF_FLAGS_PRID (1 << 3) /* filter by project id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) #define XFS_EOF_FLAGS_MINFILESIZE (1 << 4) /* filter by min file size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) #define XFS_EOF_FLAGS_UNION (1 << 5) /* union filter algorithm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) * kernel only, not included in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) * valid mask */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) #define XFS_EOF_FLAGS_VALID \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) (XFS_EOF_FLAGS_SYNC | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) XFS_EOF_FLAGS_UID | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) XFS_EOF_FLAGS_GID | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) XFS_EOF_FLAGS_PRID | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) XFS_EOF_FLAGS_MINFILESIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) * The user-level Handle Request interface structure.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) typedef struct xfs_fsop_handlereq {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) __u32 fd; /* fd for FD_TO_HANDLE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) void __user *path; /* user pathname */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) __u32 oflags; /* open flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) void __user *ihandle;/* user supplied handle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) __u32 ihandlen; /* user supplied length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) void __user *ohandle;/* user buffer for handle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) __u32 __user *ohandlen;/* user buffer length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) } xfs_fsop_handlereq_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) * Compound structures for passing args through Handle Request interfaces
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) * xfs_fssetdm_by_handle, xfs_attrlist_by_handle, xfs_attrmulti_by_handle
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) * - ioctls: XFS_IOC_FSSETDM_BY_HANDLE, XFS_IOC_ATTRLIST_BY_HANDLE, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) * XFS_IOC_ATTRMULTI_BY_HANDLE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) typedef struct xfs_fsop_setdm_handlereq {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) struct xfs_fsop_handlereq hreq; /* handle information */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) struct fsdmidata __user *data; /* DMAPI data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) } xfs_fsop_setdm_handlereq_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) * Flags passed in xfs_attr_multiop.am_flags for the attr ioctl interface.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) * NOTE: Must match the values declared in libattr without the XFS_IOC_ prefix.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) #define XFS_IOC_ATTR_ROOT 0x0002 /* use attrs in root namespace */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) #define XFS_IOC_ATTR_SECURE 0x0008 /* use attrs in security namespace */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) #define XFS_IOC_ATTR_CREATE 0x0010 /* fail if attr already exists */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) #define XFS_IOC_ATTR_REPLACE 0x0020 /* fail if attr does not exist */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) typedef struct xfs_attrlist_cursor {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) __u32 opaque[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) } xfs_attrlist_cursor_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) * Define how lists of attribute names are returned to userspace from the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) * XFS_IOC_ATTRLIST_BY_HANDLE ioctl. struct xfs_attrlist is the header at the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) * beginning of the returned buffer, and a each entry in al_offset contains the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) * relative offset of an xfs_attrlist_ent containing the actual entry.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) * NOTE: struct xfs_attrlist must match struct attrlist defined in libattr, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) * struct xfs_attrlist_ent must match struct attrlist_ent defined in libattr.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) struct xfs_attrlist {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) __s32 al_count; /* number of entries in attrlist */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) __s32 al_more; /* T/F: more attrs (do call again) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) __s32 al_offset[1]; /* byte offsets of attrs [var-sized] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) struct xfs_attrlist_ent { /* data from attr_list() */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) __u32 a_valuelen; /* number bytes in value of attr */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) char a_name[1]; /* attr name (NULL terminated) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) typedef struct xfs_fsop_attrlist_handlereq {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) struct xfs_fsop_handlereq hreq; /* handle interface structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) struct xfs_attrlist_cursor pos; /* opaque cookie, list offset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) __u32 flags; /* which namespace to use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) __u32 buflen; /* length of buffer supplied */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) void __user *buffer; /* returned names */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) } xfs_fsop_attrlist_handlereq_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) typedef struct xfs_attr_multiop {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) __u32 am_opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) #define ATTR_OP_GET 1 /* return the indicated attr's value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) #define ATTR_OP_SET 2 /* set/create the indicated attr/value pair */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) #define ATTR_OP_REMOVE 3 /* remove the indicated attr */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) __s32 am_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) void __user *am_attrname;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) void __user *am_attrvalue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) __u32 am_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) __u32 am_flags; /* XFS_IOC_ATTR_* */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) } xfs_attr_multiop_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) typedef struct xfs_fsop_attrmulti_handlereq {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) struct xfs_fsop_handlereq hreq; /* handle interface structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) __u32 opcount;/* count of following multiop */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) struct xfs_attr_multiop __user *ops; /* attr_multi data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) } xfs_fsop_attrmulti_handlereq_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) * per machine unique filesystem identifier types.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) typedef struct { __u32 val[2]; } xfs_fsid_t; /* file system id type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) typedef struct xfs_fid {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) __u16 fid_len; /* length of remainder */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) __u16 fid_pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) __u32 fid_gen; /* generation number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) __u64 fid_ino; /* 64 bits inode number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) } xfs_fid_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) typedef struct xfs_handle {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) __s64 align; /* force alignment of ha_fid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) xfs_fsid_t _ha_fsid; /* unique file system identifier */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) } ha_u;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) xfs_fid_t ha_fid; /* file system specific file ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) } xfs_handle_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) #define ha_fsid ha_u._ha_fsid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) * Structure passed to XFS_IOC_SWAPEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) typedef struct xfs_swapext
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) int64_t sx_version; /* version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) #define XFS_SX_VERSION 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) int64_t sx_fdtarget; /* fd of target file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) int64_t sx_fdtmp; /* fd of tmp file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) xfs_off_t sx_offset; /* offset into file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) xfs_off_t sx_length; /* leng from offset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) char sx_pad[16]; /* pad space, unused */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) struct xfs_bstat sx_stat; /* stat of target b4 copy */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) } xfs_swapext_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) * Flags for going down operation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) #define XFS_FSOP_GOING_FLAGS_DEFAULT 0x0 /* going down */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) #define XFS_FSOP_GOING_FLAGS_LOGFLUSH 0x1 /* flush log but not data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) #define XFS_FSOP_GOING_FLAGS_NOLOGFLUSH 0x2 /* don't flush log nor data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) /* metadata scrubbing */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) struct xfs_scrub_metadata {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) __u32 sm_type; /* What to check? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) __u32 sm_flags; /* flags; see below. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) __u64 sm_ino; /* inode number. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) __u32 sm_gen; /* inode generation. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) __u32 sm_agno; /* ag number. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) __u64 sm_reserved[5]; /* pad to 64 bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) * Metadata types and flags for scrub operation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) /* Scrub subcommands. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) #define XFS_SCRUB_TYPE_PROBE 0 /* presence test ioctl */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) #define XFS_SCRUB_TYPE_SB 1 /* superblock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) #define XFS_SCRUB_TYPE_AGF 2 /* AG free header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) #define XFS_SCRUB_TYPE_AGFL 3 /* AG free list */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) #define XFS_SCRUB_TYPE_AGI 4 /* AG inode header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) #define XFS_SCRUB_TYPE_BNOBT 5 /* freesp by block btree */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) #define XFS_SCRUB_TYPE_CNTBT 6 /* freesp by length btree */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) #define XFS_SCRUB_TYPE_INOBT 7 /* inode btree */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) #define XFS_SCRUB_TYPE_FINOBT 8 /* free inode btree */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) #define XFS_SCRUB_TYPE_RMAPBT 9 /* reverse mapping btree */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) #define XFS_SCRUB_TYPE_REFCNTBT 10 /* reference count btree */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) #define XFS_SCRUB_TYPE_INODE 11 /* inode record */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) #define XFS_SCRUB_TYPE_BMBTD 12 /* data fork block mapping */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) #define XFS_SCRUB_TYPE_BMBTA 13 /* attr fork block mapping */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) #define XFS_SCRUB_TYPE_BMBTC 14 /* CoW fork block mapping */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) #define XFS_SCRUB_TYPE_DIR 15 /* directory */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) #define XFS_SCRUB_TYPE_XATTR 16 /* extended attribute */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) #define XFS_SCRUB_TYPE_SYMLINK 17 /* symbolic link */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) #define XFS_SCRUB_TYPE_PARENT 18 /* parent pointers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) #define XFS_SCRUB_TYPE_RTBITMAP 19 /* realtime bitmap */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) #define XFS_SCRUB_TYPE_RTSUM 20 /* realtime summary */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) #define XFS_SCRUB_TYPE_UQUOTA 21 /* user quotas */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) #define XFS_SCRUB_TYPE_GQUOTA 22 /* group quotas */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) #define XFS_SCRUB_TYPE_PQUOTA 23 /* project quotas */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) #define XFS_SCRUB_TYPE_FSCOUNTERS 24 /* fs summary counters */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) /* Number of scrub subcommands. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) #define XFS_SCRUB_TYPE_NR 25
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) /* i: Repair this metadata. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) #define XFS_SCRUB_IFLAG_REPAIR (1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) /* o: Metadata object needs repair. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) #define XFS_SCRUB_OFLAG_CORRUPT (1 << 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) * o: Metadata object could be optimized. It's not corrupt, but
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) * we could improve on it somehow.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) #define XFS_SCRUB_OFLAG_PREEN (1 << 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) /* o: Cross-referencing failed. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) #define XFS_SCRUB_OFLAG_XFAIL (1 << 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) /* o: Metadata object disagrees with cross-referenced metadata. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) #define XFS_SCRUB_OFLAG_XCORRUPT (1 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) /* o: Scan was not complete. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) #define XFS_SCRUB_OFLAG_INCOMPLETE (1 << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) /* o: Metadata object looked funny but isn't corrupt. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) #define XFS_SCRUB_OFLAG_WARNING (1 << 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) * o: IFLAG_REPAIR was set but metadata object did not need fixing or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) * optimization and has therefore not been altered.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) #define XFS_SCRUB_OFLAG_NO_REPAIR_NEEDED (1 << 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) #define XFS_SCRUB_FLAGS_IN (XFS_SCRUB_IFLAG_REPAIR)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) #define XFS_SCRUB_FLAGS_OUT (XFS_SCRUB_OFLAG_CORRUPT | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) XFS_SCRUB_OFLAG_PREEN | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) XFS_SCRUB_OFLAG_XFAIL | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) XFS_SCRUB_OFLAG_XCORRUPT | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) XFS_SCRUB_OFLAG_INCOMPLETE | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) XFS_SCRUB_OFLAG_WARNING | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) XFS_SCRUB_OFLAG_NO_REPAIR_NEEDED)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) #define XFS_SCRUB_FLAGS_ALL (XFS_SCRUB_FLAGS_IN | XFS_SCRUB_FLAGS_OUT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) * ioctl limits
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) #ifdef XATTR_LIST_MAX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) # define XFS_XATTR_LIST_MAX XATTR_LIST_MAX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) # define XFS_XATTR_LIST_MAX 65536
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) * ioctl commands that are used by Linux filesystems
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) #define XFS_IOC_GETXFLAGS FS_IOC_GETFLAGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) #define XFS_IOC_SETXFLAGS FS_IOC_SETFLAGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) #define XFS_IOC_GETVERSION FS_IOC_GETVERSION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) * ioctl commands that replace IRIX fcntl()'s
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) * For 'documentation' purposed more than anything else,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) * the "cmd #" field reflects the IRIX fcntl number.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) #define XFS_IOC_ALLOCSP _IOW ('X', 10, struct xfs_flock64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) #define XFS_IOC_FREESP _IOW ('X', 11, struct xfs_flock64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) #define XFS_IOC_DIOINFO _IOR ('X', 30, struct dioattr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) #define XFS_IOC_FSGETXATTR FS_IOC_FSGETXATTR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) #define XFS_IOC_FSSETXATTR FS_IOC_FSSETXATTR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) #define XFS_IOC_ALLOCSP64 _IOW ('X', 36, struct xfs_flock64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) #define XFS_IOC_FREESP64 _IOW ('X', 37, struct xfs_flock64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) #define XFS_IOC_GETBMAP _IOWR('X', 38, struct getbmap)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) #define XFS_IOC_FSSETDM _IOW ('X', 39, struct fsdmidata)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) #define XFS_IOC_RESVSP _IOW ('X', 40, struct xfs_flock64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) #define XFS_IOC_UNRESVSP _IOW ('X', 41, struct xfs_flock64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) #define XFS_IOC_RESVSP64 _IOW ('X', 42, struct xfs_flock64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) #define XFS_IOC_UNRESVSP64 _IOW ('X', 43, struct xfs_flock64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) #define XFS_IOC_GETBMAPA _IOWR('X', 44, struct getbmap)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795) #define XFS_IOC_FSGETXATTRA _IOR ('X', 45, struct fsxattr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) /* XFS_IOC_SETBIOSIZE ---- deprecated 46 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) /* XFS_IOC_GETBIOSIZE ---- deprecated 47 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) #define XFS_IOC_GETBMAPX _IOWR('X', 56, struct getbmap)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) #define XFS_IOC_ZERO_RANGE _IOW ('X', 57, struct xfs_flock64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) #define XFS_IOC_FREE_EOFBLOCKS _IOR ('X', 58, struct xfs_fs_eofblocks)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) /* XFS_IOC_GETFSMAP ------ hoisted 59 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) #define XFS_IOC_SCRUB_METADATA _IOWR('X', 60, struct xfs_scrub_metadata)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803) #define XFS_IOC_AG_GEOMETRY _IOWR('X', 61, struct xfs_ag_geometry)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) * ioctl commands that replace IRIX syssgi()'s
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) #define XFS_IOC_FSGEOMETRY_V1 _IOR ('X', 100, struct xfs_fsop_geom_v1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) #define XFS_IOC_FSBULKSTAT _IOWR('X', 101, struct xfs_fsop_bulkreq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) #define XFS_IOC_FSBULKSTAT_SINGLE _IOWR('X', 102, struct xfs_fsop_bulkreq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) #define XFS_IOC_FSINUMBERS _IOWR('X', 103, struct xfs_fsop_bulkreq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) #define XFS_IOC_PATH_TO_FSHANDLE _IOWR('X', 104, struct xfs_fsop_handlereq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813) #define XFS_IOC_PATH_TO_HANDLE _IOWR('X', 105, struct xfs_fsop_handlereq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) #define XFS_IOC_FD_TO_HANDLE _IOWR('X', 106, struct xfs_fsop_handlereq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) #define XFS_IOC_OPEN_BY_HANDLE _IOWR('X', 107, struct xfs_fsop_handlereq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) #define XFS_IOC_READLINK_BY_HANDLE _IOWR('X', 108, struct xfs_fsop_handlereq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817) #define XFS_IOC_SWAPEXT _IOWR('X', 109, struct xfs_swapext)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818) #define XFS_IOC_FSGROWFSDATA _IOW ('X', 110, struct xfs_growfs_data)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) #define XFS_IOC_FSGROWFSLOG _IOW ('X', 111, struct xfs_growfs_log)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) #define XFS_IOC_FSGROWFSRT _IOW ('X', 112, struct xfs_growfs_rt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) #define XFS_IOC_FSCOUNTS _IOR ('X', 113, struct xfs_fsop_counts)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) #define XFS_IOC_SET_RESBLKS _IOWR('X', 114, struct xfs_fsop_resblks)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) #define XFS_IOC_GET_RESBLKS _IOR ('X', 115, struct xfs_fsop_resblks)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) #define XFS_IOC_ERROR_INJECTION _IOW ('X', 116, struct xfs_error_injection)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) #define XFS_IOC_ERROR_CLEARALL _IOW ('X', 117, struct xfs_error_injection)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826) /* XFS_IOC_ATTRCTL_BY_HANDLE -- deprecated 118 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828) #define XFS_IOC_FREEZE _IOWR('X', 119, int) /* aka FIFREEZE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) #define XFS_IOC_THAW _IOWR('X', 120, int) /* aka FITHAW */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) #define XFS_IOC_FSSETDM_BY_HANDLE _IOW ('X', 121, struct xfs_fsop_setdm_handlereq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) #define XFS_IOC_ATTRLIST_BY_HANDLE _IOW ('X', 122, struct xfs_fsop_attrlist_handlereq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833) #define XFS_IOC_ATTRMULTI_BY_HANDLE _IOW ('X', 123, struct xfs_fsop_attrmulti_handlereq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) #define XFS_IOC_FSGEOMETRY_V4 _IOR ('X', 124, struct xfs_fsop_geom_v4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835) #define XFS_IOC_GOINGDOWN _IOR ('X', 125, uint32_t)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836) #define XFS_IOC_FSGEOMETRY _IOR ('X', 126, struct xfs_fsop_geom)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) #define XFS_IOC_BULKSTAT _IOR ('X', 127, struct xfs_bulkstat_req)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) #define XFS_IOC_INUMBERS _IOR ('X', 128, struct xfs_inumbers_req)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) /* XFS_IOC_GETFSUUID ---------- deprecated 140 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) #ifndef HAVE_BBMACROS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844) * Block I/O parameterization. A basic block (BB) is the lowest size of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845) * filesystem allocation, and must equal 512. Length units given to bio
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) * routines are in BB's.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) #define BBSHIFT 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) #define BBSIZE (1<<BBSHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) #define BBMASK (BBSIZE-1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851) #define BTOBB(bytes) (((__u64)(bytes) + BBSIZE - 1) >> BBSHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852) #define BTOBBT(bytes) ((__u64)(bytes) >> BBSHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853) #define BBTOB(bbs) ((bbs) << BBSHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856) #endif /* __XFS_FS_H__ */