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