Home | History | Annotate | Download | only in xfs
      1 /*
      2  * Taken from Linux kernel tree (linux/fs/xfs)
      3  *
      4  * Copyright (c) 1995-2005 Silicon Graphics, Inc.
      5  * All Rights Reserved.
      6  *
      7  * Copyright (c) 2012 Paulo Alcantara <pcacjr (at) zytor.com>
      8  *
      9  * This program is free software; you can redistribute it and/or
     10  * modify it under the terms of the GNU Lesser General Public License
     11  * as published by the Free Software Foundation.
     12  *
     13  * This program is distributed in the hope that it would be useful,
     14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16  * GNU Lesser General Public License for more details.
     17  *
     18  * You should have received a copy of the GNU Lesser General Public License
     19  * along with this program; if not, write the Free Software Foundation,
     20  * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
     21  */
     22 
     23 #ifndef XFS_FS_H_
     24 #define XFS_FS_H_
     25 
     26 /*
     27  * SGI's XFS filesystem's major stuff (constants, structures)
     28  */
     29 
     30 /*
     31  * Direct I/O attribute record used with XFS_IOC_DIOINFO
     32  * d_miniosz is the min xfer size, xfer size multiple and file seek offset
     33  * alignment.
     34  */
     35 struct dioattr {
     36 	uint32_t		d_mem;		/* data buffer memory alignment */
     37 	uint32_t		d_miniosz;	/* min xfer size		*/
     38 	uint32_t		d_maxiosz;	/* max xfer size		*/
     39 };
     40 
     41 /*
     42  * Structure for XFS_IOC_FSGETXATTR[A] and XFS_IOC_FSSETXATTR.
     43  */
     44 struct fsxattr {
     45 	uint32_t		fsx_xflags;	/* xflags field value (get/set) */
     46 	uint32_t		fsx_extsize;	/* extsize field value (get/set)*/
     47 	uint32_t		fsx_nextents;	/* nextents field value (get)	*/
     48 	uint32_t		fsx_projid;	/* project identifier (get/set) */
     49 	unsigned char	fsx_pad[12];
     50 };
     51 
     52 /*
     53  * Flags for the bs_xflags/fsx_xflags field
     54  * There should be a one-to-one correspondence between these flags and the
     55  * XFS_DIFLAG_s.
     56  */
     57 #define XFS_XFLAG_REALTIME	0x00000001	/* data in realtime volume */
     58 #define XFS_XFLAG_PREALLOC	0x00000002	/* preallocated file extents */
     59 #define XFS_XFLAG_IMMUTABLE	0x00000008	/* file cannot be modified */
     60 #define XFS_XFLAG_APPEND	0x00000010	/* all writes append */
     61 #define XFS_XFLAG_SYNC		0x00000020	/* all writes synchronous */
     62 #define XFS_XFLAG_NOATIME	0x00000040	/* do not update access time */
     63 #define XFS_XFLAG_NODUMP	0x00000080	/* do not include in backups */
     64 #define XFS_XFLAG_RTINHERIT	0x00000100	/* create with rt bit set */
     65 #define XFS_XFLAG_PROJINHERIT	0x00000200	/* create with parents projid */
     66 #define XFS_XFLAG_NOSYMLINKS	0x00000400	/* disallow symlink creation */
     67 #define XFS_XFLAG_EXTSIZE	0x00000800	/* extent size allocator hint */
     68 #define XFS_XFLAG_EXTSZINHERIT	0x00001000	/* inherit inode extent size */
     69 #define XFS_XFLAG_NODEFRAG	0x00002000  	/* do not defragment */
     70 #define XFS_XFLAG_FILESTREAM	0x00004000	/* use filestream allocator */
     71 #define XFS_XFLAG_HASATTR	0x80000000	/* no DIFLAG for this	*/
     72 
     73 /*
     74  * Structure for XFS_IOC_GETBMAP.
     75  * On input, fill in bmv_offset and bmv_length of the first structure
     76  * to indicate the area of interest in the file, and bmv_entries with
     77  * the number of array elements given back.  The first structure is
     78  * updated on return to give the offset and length for the next call.
     79  */
     80 struct getbmap {
     81 	int64_t		bmv_offset;	/* file offset of segment in blocks */
     82 	int64_t		bmv_block;	/* starting block (64-bit daddr_t)  */
     83 	int64_t		bmv_length;	/* length of segment, blocks	    */
     84 	int32_t		bmv_count;	/* # of entries in array incl. 1st  */
     85 	int32_t		bmv_entries;	/* # of entries filled in (output)  */
     86 };
     87 
     88 /*
     89  *	Structure for XFS_IOC_GETBMAPX.	 Fields bmv_offset through bmv_entries
     90  *	are used exactly as in the getbmap structure.  The getbmapx structure
     91  *	has additional bmv_iflags and bmv_oflags fields. The bmv_iflags field
     92  *	is only used for the first structure.  It contains input flags
     93  *	specifying XFS_IOC_GETBMAPX actions.  The bmv_oflags field is filled
     94  *	in by the XFS_IOC_GETBMAPX command for each returned structure after
     95  *	the first.
     96  */
     97 struct getbmapx {
     98 	int64_t		bmv_offset;	/* file offset of segment in blocks */
     99 	int64_t		bmv_block;	/* starting block (64-bit daddr_t)  */
    100 	int64_t		bmv_length;	/* length of segment, blocks	    */
    101 	int32_t		bmv_count;	/* # of entries in array incl. 1st  */
    102 	int32_t		bmv_entries;	/* # of entries filled in (output). */
    103 	int32_t		bmv_iflags;	/* input flags (1st structure)	    */
    104 	int32_t		bmv_oflags;	/* output flags (after 1st structure)*/
    105 	int32_t		bmv_unused1;	/* future use			    */
    106 	int32_t		bmv_unused2;	/* future use			    */
    107 };
    108 
    109 /*	bmv_iflags values - set by XFS_IOC_GETBMAPX caller.	*/
    110 #define BMV_IF_ATTRFORK		0x1	/* return attr fork rather than data */
    111 #define BMV_IF_NO_DMAPI_READ	0x2	/* Do not generate DMAPI read event  */
    112 #define BMV_IF_PREALLOC		0x4	/* rtn status BMV_OF_PREALLOC if req */
    113 #define BMV_IF_DELALLOC		0x8	/* rtn status BMV_OF_DELALLOC if req */
    114 #define BMV_IF_NO_HOLES		0x10	/* Do not return holes */
    115 #define BMV_IF_VALID	\
    116 	(BMV_IF_ATTRFORK|BMV_IF_NO_DMAPI_READ|BMV_IF_PREALLOC|	\
    117 	 BMV_IF_DELALLOC|BMV_IF_NO_HOLES)
    118 
    119 /*	bmv_oflags values - returned for each non-header segment */
    120 #define BMV_OF_PREALLOC		0x1	/* segment = unwritten pre-allocation */
    121 #define BMV_OF_DELALLOC		0x2	/* segment = delayed allocation */
    122 #define BMV_OF_LAST		0x4	/* segment is the last in the file */
    123 
    124 /*
    125  * Structure for XFS_IOC_FSSETDM.
    126  * For use by backup and restore programs to set the XFS on-disk inode
    127  * fields di_dmevmask and di_dmstate.  These must be set to exactly and
    128  * only values previously obtained via xfs_bulkstat!  (Specifically the
    129  * xfs_bstat_t fields bs_dmevmask and bs_dmstate.)
    130  */
    131 struct fsdmidata {
    132 	uint32_t		fsd_dmevmask;	/* corresponds to di_dmevmask */
    133 	__u16		fsd_padding;
    134 	__u16		fsd_dmstate;	/* corresponds to di_dmstate  */
    135 };
    136 
    137 /*
    138  * File segment locking set data type for 64 bit access.
    139  * Also used for all the RESV/FREE interfaces.
    140  */
    141 typedef struct xfs_flock64 {
    142 	__s16		l_type;
    143 	__s16		l_whence;
    144 	int64_t		l_start;
    145 	int64_t		l_len;		/* len == 0 means until end of file */
    146 	int32_t		l_sysid;
    147 	uint32_t		l_pid;
    148 	int32_t		l_pad[4];	/* reserve area			    */
    149 } xfs_flock64_t;
    150 
    151 /*
    152  * Output for XFS_IOC_FSGEOMETRY_V1
    153  */
    154 typedef struct xfs_fsop_geom_v1 {
    155 	uint32_t		blocksize;	/* filesystem (data) block size */
    156 	uint32_t		rtextsize;	/* realtime extent size		*/
    157 	uint32_t		agblocks;	/* fsblocks in an AG		*/
    158 	uint32_t		agcount;	/* number of allocation groups	*/
    159 	uint32_t		logblocks;	/* fsblocks in the log		*/
    160 	uint32_t		sectsize;	/* (data) sector size, bytes	*/
    161 	uint32_t		inodesize;	/* inode size in bytes		*/
    162 	uint32_t		imaxpct;	/* max allowed inode space(%)	*/
    163 	uint64_t		datablocks;	/* fsblocks in data subvolume	*/
    164 	uint64_t		rtblocks;	/* fsblocks in realtime subvol	*/
    165 	uint64_t		rtextents;	/* rt extents in realtime subvol*/
    166 	uint64_t		logstart;	/* starting fsblock of the log	*/
    167 	unsigned char	uuid[16];	/* unique id of the filesystem	*/
    168 	uint32_t		sunit;		/* stripe unit, fsblocks	*/
    169 	uint32_t		swidth;		/* stripe width, fsblocks	*/
    170 	int32_t		version;	/* structure version		*/
    171 	uint32_t		flags;		/* superblock version flags	*/
    172 	uint32_t		logsectsize;	/* log sector size, bytes	*/
    173 	uint32_t		rtsectsize;	/* realtime sector size, bytes	*/
    174 	uint32_t		dirblocksize;	/* directory block size, bytes	*/
    175 } xfs_fsop_geom_v1_t;
    176 
    177 /*
    178  * Output for XFS_IOC_FSGEOMETRY
    179  */
    180 typedef struct xfs_fsop_geom {
    181 	uint32_t		blocksize;	/* filesystem (data) block size */
    182 	uint32_t		rtextsize;	/* realtime extent size		*/
    183 	uint32_t		agblocks;	/* fsblocks in an AG		*/
    184 	uint32_t		agcount;	/* number of allocation groups	*/
    185 	uint32_t		logblocks;	/* fsblocks in the log		*/
    186 	uint32_t		sectsize;	/* (data) sector size, bytes	*/
    187 	uint32_t		inodesize;	/* inode size in bytes		*/
    188 	uint32_t		imaxpct;	/* max allowed inode space(%)	*/
    189 	uint64_t		datablocks;	/* fsblocks in data subvolume	*/
    190 	uint64_t		rtblocks;	/* fsblocks in realtime subvol	*/
    191 	uint64_t		rtextents;	/* rt extents in realtime subvol*/
    192 	uint64_t		logstart;	/* starting fsblock of the log	*/
    193 	unsigned char	uuid[16];	/* unique id of the filesystem	*/
    194 	uint32_t		sunit;		/* stripe unit, fsblocks	*/
    195 	uint32_t		swidth;		/* stripe width, fsblocks	*/
    196 	int32_t		version;	/* structure version		*/
    197 	uint32_t		flags;		/* superblock version flags	*/
    198 	uint32_t		logsectsize;	/* log sector size, bytes	*/
    199 	uint32_t		rtsectsize;	/* realtime sector size, bytes	*/
    200 	uint32_t		dirblocksize;	/* directory block size, bytes	*/
    201 	uint32_t		logsunit;	/* log stripe unit, bytes */
    202 } xfs_fsop_geom_t;
    203 
    204 /* Output for XFS_FS_COUNTS */
    205 typedef struct xfs_fsop_counts {
    206 	uint64_t	freedata;	/* free data section blocks */
    207 	uint64_t	freertx;	/* free rt extents */
    208 	uint64_t	freeino;	/* free inodes */
    209 	uint64_t	allocino;	/* total allocated inodes */
    210 } xfs_fsop_counts_t;
    211 
    212 /* Input/Output for XFS_GET_RESBLKS and XFS_SET_RESBLKS */
    213 typedef struct xfs_fsop_resblks {
    214 	uint64_t  resblks;
    215 	uint64_t  resblks_avail;
    216 } xfs_fsop_resblks_t;
    217 
    218 #define XFS_FSOP_GEOM_VERSION	0
    219 
    220 #define XFS_FSOP_GEOM_FLAGS_ATTR	0x0001	/* attributes in use	*/
    221 #define XFS_FSOP_GEOM_FLAGS_NLINK	0x0002	/* 32-bit nlink values	*/
    222 #define XFS_FSOP_GEOM_FLAGS_QUOTA	0x0004	/* quotas enabled	*/
    223 #define XFS_FSOP_GEOM_FLAGS_IALIGN	0x0008	/* inode alignment	*/
    224 #define XFS_FSOP_GEOM_FLAGS_DALIGN	0x0010	/* large data alignment */
    225 #define XFS_FSOP_GEOM_FLAGS_SHARED	0x0020	/* read-only shared	*/
    226 #define XFS_FSOP_GEOM_FLAGS_EXTFLG	0x0040	/* special extent flag	*/
    227 #define XFS_FSOP_GEOM_FLAGS_DIRV2	0x0080	/* directory version 2	*/
    228 #define XFS_FSOP_GEOM_FLAGS_LOGV2	0x0100	/* log format version 2	*/
    229 #define XFS_FSOP_GEOM_FLAGS_SECTOR	0x0200	/* sector sizes >1BB	*/
    230 #define XFS_FSOP_GEOM_FLAGS_ATTR2	0x0400	/* inline attributes rework */
    231 #define XFS_FSOP_GEOM_FLAGS_DIRV2CI	0x1000	/* ASCII only CI names */
    232 #define XFS_FSOP_GEOM_FLAGS_LAZYSB	0x4000	/* lazy superblock counters */
    233 
    234 
    235 /*
    236  * Minimum and maximum sizes need for growth checks
    237  */
    238 #define XFS_MIN_AG_BLOCKS	64
    239 #define XFS_MIN_LOG_BLOCKS	512ULL
    240 #define XFS_MAX_LOG_BLOCKS	(1024 * 1024ULL)
    241 #define XFS_MIN_LOG_BYTES	(10 * 1024 * 1024ULL)
    242 
    243 /* keep the maximum size under 2^31 by a small amount */
    244 #define XFS_MAX_LOG_BYTES \
    245 	((2 * 1024 * 1024 * 1024ULL) - XFS_MIN_LOG_BYTES)
    246 
    247 /* Used for sanity checks on superblock */
    248 #define XFS_MAX_DBLOCKS(s) ((xfs_drfsbno_t)(s)->sb_agcount * (s)->sb_agblocks)
    249 #define XFS_MIN_DBLOCKS(s) ((xfs_drfsbno_t)((s)->sb_agcount - 1) *	\
    250 			 (s)->sb_agblocks + XFS_MIN_AG_BLOCKS)
    251 
    252 /*
    253  * Structures for XFS_IOC_FSGROWFSDATA, XFS_IOC_FSGROWFSLOG & XFS_IOC_FSGROWFSRT
    254  */
    255 typedef struct xfs_growfs_data {
    256 	uint64_t		newblocks;	/* new data subvol size, fsblocks */
    257 	uint32_t		imaxpct;	/* new inode space percentage limit */
    258 } xfs_growfs_data_t;
    259 
    260 typedef struct xfs_growfs_log {
    261 	uint32_t		newblocks;	/* new log size, fsblocks */
    262 	uint32_t		isint;		/* 1 if new log is internal */
    263 } xfs_growfs_log_t;
    264 
    265 typedef struct xfs_growfs_rt {
    266 	uint64_t		newblocks;	/* new realtime size, fsblocks */
    267 	uint32_t		extsize;	/* new realtime extent size, fsblocks */
    268 } xfs_growfs_rt_t;
    269 
    270 
    271 /*
    272  * Structures returned from ioctl XFS_IOC_FSBULKSTAT & XFS_IOC_FSBULKSTAT_SINGLE
    273  */
    274 typedef struct xfs_bstime {
    275 	time_t		tv_sec;		/* seconds		*/
    276 	int32_t		tv_nsec;	/* and nanoseconds	*/
    277 } xfs_bstime_t;
    278 
    279 typedef struct xfs_bstat {
    280 	uint64_t		bs_ino;		/* inode number			*/
    281 	__u16		bs_mode;	/* type and mode		*/
    282 	__u16		bs_nlink;	/* number of links		*/
    283 	uint32_t		bs_uid;		/* user id			*/
    284 	uint32_t		bs_gid;		/* group id			*/
    285 	uint32_t		bs_rdev;	/* device value			*/
    286 	int32_t		bs_blksize;	/* block size			*/
    287 	int64_t		bs_size;	/* file size			*/
    288 	xfs_bstime_t	bs_atime;	/* access time			*/
    289 	xfs_bstime_t	bs_mtime;	/* modify time			*/
    290 	xfs_bstime_t	bs_ctime;	/* inode change time		*/
    291 	int64_t		bs_blocks;	/* number of blocks		*/
    292 	uint32_t		bs_xflags;	/* extended flags		*/
    293 	int32_t		bs_extsize;	/* extent size			*/
    294 	int32_t		bs_extents;	/* number of extents		*/
    295 	uint32_t		bs_gen;		/* generation count		*/
    296 	__u16		bs_projid_lo;	/* lower part of project id	*/
    297 #define	bs_projid	bs_projid_lo	/* (previously just bs_projid)	*/
    298 	__u16		bs_forkoff;	/* inode fork offset in bytes	*/
    299 	__u16		bs_projid_hi;	/* higher part of project id	*/
    300 	unsigned char	bs_pad[10];	/* pad space, unused		*/
    301 	uint32_t		bs_dmevmask;	/* DMIG event mask		*/
    302 	__u16		bs_dmstate;	/* DMIG state info		*/
    303 	__u16		bs_aextents;	/* attribute number of extents	*/
    304 } xfs_bstat_t;
    305 
    306 /*
    307  * The user-level BulkStat Request interface structure.
    308  */
    309 typedef struct xfs_fsop_bulkreq {
    310 	uint64_t		__user *lastip;	/* last inode # pointer		*/
    311 	int32_t		icount;		/* count of entries in buffer	*/
    312 	void		__user *ubuffer;/* user buffer for inode desc.	*/
    313 	int32_t		__user *ocount;	/* output count pointer		*/
    314 } xfs_fsop_bulkreq_t;
    315 
    316 
    317 /*
    318  * Structures returned from xfs_inumbers routine (XFS_IOC_FSINUMBERS).
    319  */
    320 typedef struct xfs_inogrp {
    321 	uint64_t		xi_startino;	/* starting inode number	*/
    322 	int32_t		xi_alloccount;	/* # bits set in allocmask	*/
    323 	uint64_t		xi_allocmask;	/* mask of allocated inodes	*/
    324 } xfs_inogrp_t;
    325 
    326 
    327 /*
    328  * Error injection.
    329  */
    330 typedef struct xfs_error_injection {
    331 	int32_t		fd;
    332 	int32_t		errtag;
    333 } xfs_error_injection_t;
    334 
    335 
    336 /*
    337  * The user-level Handle Request interface structure.
    338  */
    339 typedef struct xfs_fsop_handlereq {
    340 	uint32_t		fd;		/* fd for FD_TO_HANDLE		*/
    341 	void		__user *path;	/* user pathname		*/
    342 	uint32_t		oflags;		/* open flags			*/
    343 	void		__user *ihandle;/* user supplied handle		*/
    344 	uint32_t		ihandlen;	/* user supplied length		*/
    345 	void		__user *ohandle;/* user buffer for handle	*/
    346 	uint32_t		__user *ohandlen;/* user buffer length		*/
    347 } xfs_fsop_handlereq_t;
    348 
    349 /*
    350  * Compound structures for passing args through Handle Request interfaces
    351  * xfs_fssetdm_by_handle, xfs_attrlist_by_handle, xfs_attrmulti_by_handle
    352  * - ioctls: XFS_IOC_FSSETDM_BY_HANDLE, XFS_IOC_ATTRLIST_BY_HANDLE, and
    353  *	     XFS_IOC_ATTRMULTI_BY_HANDLE
    354  */
    355 
    356 typedef struct xfs_fsop_setdm_handlereq {
    357 	struct xfs_fsop_handlereq	hreq;	/* handle information	*/
    358 	struct fsdmidata		__user *data;	/* DMAPI data	*/
    359 } xfs_fsop_setdm_handlereq_t;
    360 
    361 typedef struct xfs_attrlist_cursor {
    362 	uint32_t		opaque[4];
    363 } xfs_attrlist_cursor_t;
    364 
    365 typedef struct xfs_fsop_attrlist_handlereq {
    366 	struct xfs_fsop_handlereq	hreq; /* handle interface structure */
    367 	struct xfs_attrlist_cursor	pos; /* opaque cookie, list offset */
    368 	uint32_t				flags;	/* which namespace to use */
    369 	uint32_t				buflen;	/* length of buffer supplied */
    370 	void				__user *buffer;	/* returned names */
    371 } xfs_fsop_attrlist_handlereq_t;
    372 
    373 typedef struct xfs_attr_multiop {
    374 	uint32_t		am_opcode;
    375 #define ATTR_OP_GET	1	/* return the indicated attr's value */
    376 #define ATTR_OP_SET	2	/* set/create the indicated attr/value pair */
    377 #define ATTR_OP_REMOVE	3	/* remove the indicated attr */
    378 	int32_t		am_error;
    379 	void		__user *am_attrname;
    380 	void		__user *am_attrvalue;
    381 	uint32_t		am_length;
    382 	uint32_t		am_flags;
    383 } xfs_attr_multiop_t;
    384 
    385 typedef struct xfs_fsop_attrmulti_handlereq {
    386 	struct xfs_fsop_handlereq	hreq; /* handle interface structure */
    387 	uint32_t				opcount;/* count of following multiop */
    388 	struct xfs_attr_multiop		__user *ops; /* attr_multi data */
    389 } xfs_fsop_attrmulti_handlereq_t;
    390 
    391 /*
    392  * per machine unique filesystem identifier types.
    393  */
    394 typedef struct { uint32_t val[2]; } xfs_fsid_t; /* file system id type */
    395 
    396 typedef struct xfs_fid {
    397 	__u16	fid_len;		/* length of remainder	*/
    398 	__u16	fid_pad;
    399 	uint32_t	fid_gen;		/* generation number	*/
    400 	uint64_t	fid_ino;		/* 64 bits inode number */
    401 } xfs_fid_t;
    402 
    403 typedef struct xfs_handle {
    404 	union {
    405 		int64_t	    align;	/* force alignment of ha_fid	 */
    406 		xfs_fsid_t  _ha_fsid;	/* unique file system identifier */
    407 	} ha_u;
    408 	xfs_fid_t	ha_fid;		/* file system specific file ID	 */
    409 } xfs_handle_t;
    410 #define ha_fsid ha_u._ha_fsid
    411 
    412 #define XFS_HSIZE(handle)	(((char *) &(handle).ha_fid.fid_pad	 \
    413 				 - (char *) &(handle))			  \
    414 				 + (handle).ha_fid.fid_len)
    415 
    416 /*
    417  * Flags for going down operation
    418  */
    419 #define XFS_FSOP_GOING_FLAGS_DEFAULT		0x0	/* going down */
    420 #define XFS_FSOP_GOING_FLAGS_LOGFLUSH		0x1	/* flush log but not data */
    421 #define XFS_FSOP_GOING_FLAGS_NOLOGFLUSH		0x2	/* don't flush log nor data */
    422 
    423 /*
    424  * ioctl commands that are used by Linux filesystems
    425  */
    426 #define XFS_IOC_GETXFLAGS	FS_IOC_GETFLAGS
    427 #define XFS_IOC_SETXFLAGS	FS_IOC_SETFLAGS
    428 #define XFS_IOC_GETVERSION	FS_IOC_GETVERSION
    429 
    430 /*
    431  * ioctl commands that replace IRIX fcntl()'s
    432  * For 'documentation' purposed more than anything else,
    433  * the "cmd #" field reflects the IRIX fcntl number.
    434  */
    435 #define XFS_IOC_ALLOCSP		_IOW ('X', 10, struct xfs_flock64)
    436 #define XFS_IOC_FREESP		_IOW ('X', 11, struct xfs_flock64)
    437 #define XFS_IOC_DIOINFO		_IOR ('X', 30, struct dioattr)
    438 #define XFS_IOC_FSGETXATTR	_IOR ('X', 31, struct fsxattr)
    439 #define XFS_IOC_FSSETXATTR	_IOW ('X', 32, struct fsxattr)
    440 #define XFS_IOC_ALLOCSP64	_IOW ('X', 36, struct xfs_flock64)
    441 #define XFS_IOC_FREESP64	_IOW ('X', 37, struct xfs_flock64)
    442 #define XFS_IOC_GETBMAP		_IOWR('X', 38, struct getbmap)
    443 #define XFS_IOC_FSSETDM		_IOW ('X', 39, struct fsdmidata)
    444 #define XFS_IOC_RESVSP		_IOW ('X', 40, struct xfs_flock64)
    445 #define XFS_IOC_UNRESVSP	_IOW ('X', 41, struct xfs_flock64)
    446 #define XFS_IOC_RESVSP64	_IOW ('X', 42, struct xfs_flock64)
    447 #define XFS_IOC_UNRESVSP64	_IOW ('X', 43, struct xfs_flock64)
    448 #define XFS_IOC_GETBMAPA	_IOWR('X', 44, struct getbmap)
    449 #define XFS_IOC_FSGETXATTRA	_IOR ('X', 45, struct fsxattr)
    450 /*	XFS_IOC_SETBIOSIZE ---- deprecated 46	   */
    451 /*	XFS_IOC_GETBIOSIZE ---- deprecated 47	   */
    452 #define XFS_IOC_GETBMAPX	_IOWR('X', 56, struct getbmap)
    453 #define XFS_IOC_ZERO_RANGE	_IOW ('X', 57, struct xfs_flock64)
    454 
    455 /*
    456  * ioctl commands that replace IRIX syssgi()'s
    457  */
    458 #define XFS_IOC_FSGEOMETRY_V1	     _IOR ('X', 100, struct xfs_fsop_geom_v1)
    459 #define XFS_IOC_FSBULKSTAT	     _IOWR('X', 101, struct xfs_fsop_bulkreq)
    460 #define XFS_IOC_FSBULKSTAT_SINGLE    _IOWR('X', 102, struct xfs_fsop_bulkreq)
    461 #define XFS_IOC_FSINUMBERS	     _IOWR('X', 103, struct xfs_fsop_bulkreq)
    462 #define XFS_IOC_PATH_TO_FSHANDLE     _IOWR('X', 104, struct xfs_fsop_handlereq)
    463 #define XFS_IOC_PATH_TO_HANDLE	     _IOWR('X', 105, struct xfs_fsop_handlereq)
    464 #define XFS_IOC_FD_TO_HANDLE	     _IOWR('X', 106, struct xfs_fsop_handlereq)
    465 #define XFS_IOC_OPEN_BY_HANDLE	     _IOWR('X', 107, struct xfs_fsop_handlereq)
    466 #define XFS_IOC_READLINK_BY_HANDLE   _IOWR('X', 108, struct xfs_fsop_handlereq)
    467 #define XFS_IOC_SWAPEXT		     _IOWR('X', 109, struct xfs_swapext)
    468 #define XFS_IOC_FSGROWFSDATA	     _IOW ('X', 110, struct xfs_growfs_data)
    469 #define XFS_IOC_FSGROWFSLOG	     _IOW ('X', 111, struct xfs_growfs_log)
    470 #define XFS_IOC_FSGROWFSRT	     _IOW ('X', 112, struct xfs_growfs_rt)
    471 #define XFS_IOC_FSCOUNTS	     _IOR ('X', 113, struct xfs_fsop_counts)
    472 #define XFS_IOC_SET_RESBLKS	     _IOWR('X', 114, struct xfs_fsop_resblks)
    473 #define XFS_IOC_GET_RESBLKS	     _IOR ('X', 115, struct xfs_fsop_resblks)
    474 #define XFS_IOC_ERROR_INJECTION	     _IOW ('X', 116, struct xfs_error_injection)
    475 #define XFS_IOC_ERROR_CLEARALL	     _IOW ('X', 117, struct xfs_error_injection)
    476 /*	XFS_IOC_ATTRCTL_BY_HANDLE -- deprecated 118	 */
    477 /*	XFS_IOC_FREEZE		  -- FIFREEZE   119	 */
    478 /*	XFS_IOC_THAW		  -- FITHAW     120	 */
    479 #define XFS_IOC_FSSETDM_BY_HANDLE    _IOW ('X', 121, struct xfs_fsop_setdm_handlereq)
    480 #define XFS_IOC_ATTRLIST_BY_HANDLE   _IOW ('X', 122, struct xfs_fsop_attrlist_handlereq)
    481 #define XFS_IOC_ATTRMULTI_BY_HANDLE  _IOW ('X', 123, struct xfs_fsop_attrmulti_handlereq)
    482 #define XFS_IOC_FSGEOMETRY	     _IOR ('X', 124, struct xfs_fsop_geom)
    483 #define XFS_IOC_GOINGDOWN	     _IOR ('X', 125, __uint32_t)
    484 /*	XFS_IOC_GETFSUUID ---------- deprecated 140	 */
    485 
    486 
    487 #ifndef HAVE_BBMACROS
    488 /*
    489  * Block I/O parameterization.	A basic block (BB) is the lowest size of
    490  * filesystem allocation, and must equal 512.  Length units given to bio
    491  * routines are in BB's.
    492  */
    493 #define BBSHIFT		9
    494 #define BBSIZE		(1<<BBSHIFT)
    495 #define BBMASK		(BBSIZE-1)
    496 #define BTOBB(bytes)	(((uint64_t)(bytes) + BBSIZE - 1) >> BBSHIFT)
    497 #define BTOBBT(bytes)	((uint64_t)(bytes) >> BBSHIFT)
    498 #define BBTOB(bbs)	((bbs) << BBSHIFT)
    499 #endif
    500 
    501 #endif	/* XFS_FS_H_ */
    502