^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright (c) 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_EXPORT_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #define __XFS_EXPORT_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) * Common defines for code related to exporting XFS filesystems over NFS.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * The NFS fileid goes out on the wire as an array of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) * 32bit unsigned ints in host order. There are 5 possible
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) * formats.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * (1) fileid_type=0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) * (no fileid data; handled by the generic code)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * (2) fileid_type=0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * inode-num
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * generation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * (3) fileid_type=0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * inode-num
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * generation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * parent-inode-num
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * parent-generation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) * (4) fileid_type=0x81
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) * inode-num-lo32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) * inode-num-hi32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) * generation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) * (5) fileid_type=0x82
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) * inode-num-lo32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) * inode-num-hi32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) * generation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) * parent-inode-num-lo32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) * parent-inode-num-hi32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) * parent-generation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) * Note, the NFS filehandle also includes an fsid portion which
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) * may have an inode number in it. That number is hardcoded to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) * 32bits and there is no way for XFS to intercept it. In
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) * practice this means when exporting an XFS filesystem with 64bit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) * inodes you should either export the mountpoint (rather than
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) * a subdirectory) or use the "fsid" export option.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) struct xfs_fid64 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) u64 ino;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) u32 gen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) u64 parent_ino;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) u32 parent_gen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) /* This flag goes on the wire. Don't play with it. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #define XFS_FILEID_TYPE_64FLAG 0x80 /* NFS fileid has 64bit inodes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) #endif /* __XFS_EXPORT_H__ */