| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* | 
| Nathan Scott | 7b71876 | 2005-11-02 14:58:39 +1100 | [diff] [blame] | 2 |  * Copyright (c) 2004-2005 Silicon Graphics, Inc. | 
 | 3 |  * All Rights Reserved. | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 4 |  * | 
| Nathan Scott | 7b71876 | 2005-11-02 14:58:39 +1100 | [diff] [blame] | 5 |  * This program is free software; you can redistribute it and/or | 
 | 6 |  * modify it under the terms of the GNU General Public License as | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 7 |  * published by the Free Software Foundation. | 
 | 8 |  * | 
| Nathan Scott | 7b71876 | 2005-11-02 14:58:39 +1100 | [diff] [blame] | 9 |  * This program is distributed in the hope that it would be useful, | 
 | 10 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 | 11 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
 | 12 |  * GNU General Public License for more details. | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 13 |  * | 
| Nathan Scott | 7b71876 | 2005-11-02 14:58:39 +1100 | [diff] [blame] | 14 |  * You should have received a copy of the GNU General Public License | 
 | 15 |  * along with this program; if not, write the Free Software Foundation, | 
 | 16 |  * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 17 |  */ | 
| Nathan Scott | 7b71876 | 2005-11-02 14:58:39 +1100 | [diff] [blame] | 18 | #ifndef __XFS_IOCTL32_H__ | 
 | 19 | #define __XFS_IOCTL32_H__ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 20 |  | 
| sandeen@sandeen.net | ffae263 | 2008-11-25 21:20:07 -0600 | [diff] [blame] | 21 | #include <linux/compat.h> | 
 | 22 |  | 
| sandeen@sandeen.net | ffae263 | 2008-11-25 21:20:07 -0600 | [diff] [blame] | 23 | /* | 
 | 24 |  * on 32-bit arches, ioctl argument structures may have different sizes | 
 | 25 |  * and/or alignment.  We define compat structures which match the | 
 | 26 |  * 32-bit sizes/alignments here, and their associated ioctl numbers. | 
 | 27 |  * | 
 | 28 |  * xfs_ioctl32.c contains routines to copy these structures in and out. | 
 | 29 |  */ | 
 | 30 |  | 
 | 31 | /* stock kernel-level ioctls we support */ | 
 | 32 | #define XFS_IOC_GETXFLAGS_32	FS_IOC32_GETFLAGS | 
 | 33 | #define XFS_IOC_SETXFLAGS_32	FS_IOC32_SETFLAGS | 
 | 34 | #define XFS_IOC_GETVERSION_32	FS_IOC32_GETVERSION | 
 | 35 |  | 
 | 36 | /* | 
 | 37 |  * On intel, even if sizes match, alignment and/or padding may differ. | 
 | 38 |  */ | 
 | 39 | #if defined(CONFIG_IA64) || defined(CONFIG_X86_64) | 
 | 40 | #define BROKEN_X86_ALIGNMENT | 
 | 41 | #define __compat_packed __attribute__((packed)) | 
 | 42 | #else | 
 | 43 | #define __compat_packed | 
 | 44 | #endif | 
 | 45 |  | 
 | 46 | typedef struct compat_xfs_bstime { | 
 | 47 | 	compat_time_t	tv_sec;		/* seconds		*/ | 
 | 48 | 	__s32		tv_nsec;	/* and nanoseconds	*/ | 
 | 49 | } compat_xfs_bstime_t; | 
 | 50 |  | 
 | 51 | typedef struct compat_xfs_bstat { | 
 | 52 | 	__u64		bs_ino;		/* inode number			*/ | 
 | 53 | 	__u16		bs_mode;	/* type and mode		*/ | 
 | 54 | 	__u16		bs_nlink;	/* number of links		*/ | 
 | 55 | 	__u32		bs_uid;		/* user id			*/ | 
 | 56 | 	__u32		bs_gid;		/* group id			*/ | 
 | 57 | 	__u32		bs_rdev;	/* device value			*/ | 
 | 58 | 	__s32		bs_blksize;	/* block size			*/ | 
 | 59 | 	__s64		bs_size;	/* file size			*/ | 
 | 60 | 	compat_xfs_bstime_t bs_atime;	/* access time			*/ | 
 | 61 | 	compat_xfs_bstime_t bs_mtime;	/* modify time			*/ | 
 | 62 | 	compat_xfs_bstime_t bs_ctime;	/* inode change time		*/ | 
 | 63 | 	int64_t		bs_blocks;	/* number of blocks		*/ | 
 | 64 | 	__u32		bs_xflags;	/* extended flags		*/ | 
 | 65 | 	__s32		bs_extsize;	/* extent size			*/ | 
 | 66 | 	__s32		bs_extents;	/* number of extents		*/ | 
 | 67 | 	__u32		bs_gen;		/* generation count		*/ | 
 | 68 | 	__u16		bs_projid;	/* project id			*/ | 
 | 69 | 	unsigned char	bs_pad[14];	/* pad space, unused		*/ | 
 | 70 | 	__u32		bs_dmevmask;	/* DMIG event mask		*/ | 
 | 71 | 	__u16		bs_dmstate;	/* DMIG state info		*/ | 
 | 72 | 	__u16		bs_aextents;	/* attribute number of extents	*/ | 
 | 73 | } __compat_packed compat_xfs_bstat_t; | 
 | 74 |  | 
 | 75 | typedef struct compat_xfs_fsop_bulkreq { | 
 | 76 | 	compat_uptr_t	lastip;		/* last inode # pointer		*/ | 
 | 77 | 	__s32		icount;		/* count of entries in buffer	*/ | 
 | 78 | 	compat_uptr_t	ubuffer;	/* user buffer for inode desc.	*/ | 
 | 79 | 	compat_uptr_t	ocount;		/* output count pointer		*/ | 
 | 80 | } compat_xfs_fsop_bulkreq_t; | 
 | 81 |  | 
 | 82 | #define XFS_IOC_FSBULKSTAT_32 \ | 
 | 83 | 	_IOWR('X', 101, struct compat_xfs_fsop_bulkreq) | 
 | 84 | #define XFS_IOC_FSBULKSTAT_SINGLE_32 \ | 
 | 85 | 	_IOWR('X', 102, struct compat_xfs_fsop_bulkreq) | 
 | 86 | #define XFS_IOC_FSINUMBERS_32 \ | 
 | 87 | 	_IOWR('X', 103, struct compat_xfs_fsop_bulkreq) | 
 | 88 |  | 
 | 89 | typedef struct compat_xfs_fsop_handlereq { | 
 | 90 | 	__u32		fd;		/* fd for FD_TO_HANDLE		*/ | 
 | 91 | 	compat_uptr_t	path;		/* user pathname		*/ | 
 | 92 | 	__u32		oflags;		/* open flags			*/ | 
 | 93 | 	compat_uptr_t	ihandle;	/* user supplied handle		*/ | 
 | 94 | 	__u32		ihandlen;	/* user supplied length		*/ | 
 | 95 | 	compat_uptr_t	ohandle;	/* user buffer for handle	*/ | 
 | 96 | 	compat_uptr_t	ohandlen;	/* user buffer length		*/ | 
 | 97 | } compat_xfs_fsop_handlereq_t; | 
 | 98 |  | 
 | 99 | #define XFS_IOC_PATH_TO_FSHANDLE_32 \ | 
 | 100 | 	_IOWR('X', 104, struct compat_xfs_fsop_handlereq) | 
 | 101 | #define XFS_IOC_PATH_TO_HANDLE_32 \ | 
 | 102 | 	_IOWR('X', 105, struct compat_xfs_fsop_handlereq) | 
 | 103 | #define XFS_IOC_FD_TO_HANDLE_32 \ | 
 | 104 | 	_IOWR('X', 106, struct compat_xfs_fsop_handlereq) | 
 | 105 | #define XFS_IOC_OPEN_BY_HANDLE_32 \ | 
 | 106 | 	_IOWR('X', 107, struct compat_xfs_fsop_handlereq) | 
 | 107 | #define XFS_IOC_READLINK_BY_HANDLE_32 \ | 
 | 108 | 	_IOWR('X', 108, struct compat_xfs_fsop_handlereq) | 
 | 109 |  | 
| sandeen@sandeen.net | e94fc4a | 2008-11-25 21:20:09 -0600 | [diff] [blame] | 110 | /* The bstat field in the swapext struct needs translation */ | 
 | 111 | typedef struct compat_xfs_swapext { | 
 | 112 | 	__int64_t		sx_version;	/* version */ | 
 | 113 | 	__int64_t		sx_fdtarget;	/* fd of target file */ | 
 | 114 | 	__int64_t		sx_fdtmp;	/* fd of tmp file */ | 
 | 115 | 	xfs_off_t		sx_offset;	/* offset into file */ | 
 | 116 | 	xfs_off_t		sx_length;	/* leng from offset */ | 
 | 117 | 	char			sx_pad[16];	/* pad space, unused */ | 
 | 118 | 	compat_xfs_bstat_t	sx_stat;	/* stat of target b4 copy */ | 
 | 119 | } __compat_packed compat_xfs_swapext_t; | 
 | 120 |  | 
 | 121 | #define XFS_IOC_SWAPEXT_32	_IOWR('X', 109, struct compat_xfs_swapext) | 
 | 122 |  | 
| sandeen@sandeen.net | ebeecd2 | 2008-11-25 21:20:14 -0600 | [diff] [blame] | 123 | typedef struct compat_xfs_fsop_attrlist_handlereq { | 
 | 124 | 	struct compat_xfs_fsop_handlereq hreq; /* handle interface structure */ | 
 | 125 | 	struct xfs_attrlist_cursor	pos; /* opaque cookie, list offset */ | 
 | 126 | 	__u32				flags;	/* which namespace to use */ | 
 | 127 | 	__u32				buflen;	/* length of buffer supplied */ | 
 | 128 | 	compat_uptr_t			buffer;	/* returned names */ | 
 | 129 | } __compat_packed compat_xfs_fsop_attrlist_handlereq_t; | 
 | 130 |  | 
 | 131 | /* Note: actually this is read/write */ | 
 | 132 | #define XFS_IOC_ATTRLIST_BY_HANDLE_32 \ | 
 | 133 | 	_IOW('X', 122, struct compat_xfs_fsop_attrlist_handlereq) | 
 | 134 |  | 
| sandeen@sandeen.net | 2875097 | 2008-11-25 21:20:15 -0600 | [diff] [blame] | 135 | /* am_opcodes defined in xfs_fs.h */ | 
 | 136 | typedef struct compat_xfs_attr_multiop { | 
 | 137 | 	__u32		am_opcode; | 
 | 138 | 	__s32		am_error; | 
 | 139 | 	compat_uptr_t	am_attrname; | 
 | 140 | 	compat_uptr_t	am_attrvalue; | 
 | 141 | 	__u32		am_length; | 
 | 142 | 	__u32		am_flags; | 
 | 143 | } compat_xfs_attr_multiop_t; | 
 | 144 |  | 
 | 145 | typedef struct compat_xfs_fsop_attrmulti_handlereq { | 
 | 146 | 	struct compat_xfs_fsop_handlereq hreq; /* handle interface structure */ | 
 | 147 | 	__u32				opcount;/* count of following multiop */ | 
 | 148 | 	/* ptr to compat_xfs_attr_multiop */ | 
 | 149 | 	compat_uptr_t			ops; /* attr_multi data */ | 
 | 150 | } compat_xfs_fsop_attrmulti_handlereq_t; | 
 | 151 |  | 
 | 152 | #define XFS_IOC_ATTRMULTI_BY_HANDLE_32 \ | 
 | 153 | 	_IOW('X', 123, struct compat_xfs_fsop_attrmulti_handlereq) | 
 | 154 |  | 
| sandeen@sandeen.net | 710d62a | 2008-11-25 21:20:16 -0600 | [diff] [blame] | 155 | typedef struct compat_xfs_fsop_setdm_handlereq { | 
 | 156 | 	struct compat_xfs_fsop_handlereq hreq;	/* handle information   */ | 
 | 157 | 	/* ptr to struct fsdmidata */ | 
 | 158 | 	compat_uptr_t			data;	/* DMAPI data   */ | 
 | 159 | } compat_xfs_fsop_setdm_handlereq_t; | 
 | 160 |  | 
 | 161 | #define XFS_IOC_FSSETDM_BY_HANDLE_32 \ | 
 | 162 | 	_IOW('X', 121, struct compat_xfs_fsop_setdm_handlereq) | 
 | 163 |  | 
| sandeen@sandeen.net | ffae263 | 2008-11-25 21:20:07 -0600 | [diff] [blame] | 164 | #ifdef BROKEN_X86_ALIGNMENT | 
 | 165 | /* on ia32 l_start is on a 32-bit boundary */ | 
 | 166 | typedef struct compat_xfs_flock64 { | 
 | 167 | 	__s16		l_type; | 
 | 168 | 	__s16		l_whence; | 
 | 169 | 	__s64		l_start	__attribute__((packed)); | 
 | 170 | 			/* len == 0 means until end of file */ | 
 | 171 | 	__s64		l_len __attribute__((packed)); | 
 | 172 | 	__s32		l_sysid; | 
 | 173 | 	__u32		l_pid; | 
 | 174 | 	__s32		l_pad[4];	/* reserve area */ | 
 | 175 | } compat_xfs_flock64_t; | 
 | 176 |  | 
 | 177 | #define XFS_IOC_ALLOCSP_32	_IOW('X', 10, struct compat_xfs_flock64) | 
 | 178 | #define XFS_IOC_FREESP_32	_IOW('X', 11, struct compat_xfs_flock64) | 
 | 179 | #define XFS_IOC_ALLOCSP64_32	_IOW('X', 36, struct compat_xfs_flock64) | 
 | 180 | #define XFS_IOC_FREESP64_32	_IOW('X', 37, struct compat_xfs_flock64) | 
 | 181 | #define XFS_IOC_RESVSP_32	_IOW('X', 40, struct compat_xfs_flock64) | 
 | 182 | #define XFS_IOC_UNRESVSP_32	_IOW('X', 41, struct compat_xfs_flock64) | 
 | 183 | #define XFS_IOC_RESVSP64_32	_IOW('X', 42, struct compat_xfs_flock64) | 
 | 184 | #define XFS_IOC_UNRESVSP64_32	_IOW('X', 43, struct compat_xfs_flock64) | 
 | 185 |  | 
 | 186 | typedef struct compat_xfs_fsop_geom_v1 { | 
 | 187 | 	__u32		blocksize;	/* filesystem (data) block size */ | 
 | 188 | 	__u32		rtextsize;	/* realtime extent size		*/ | 
 | 189 | 	__u32		agblocks;	/* fsblocks in an AG		*/ | 
 | 190 | 	__u32		agcount;	/* number of allocation groups	*/ | 
 | 191 | 	__u32		logblocks;	/* fsblocks in the log		*/ | 
 | 192 | 	__u32		sectsize;	/* (data) sector size, bytes	*/ | 
 | 193 | 	__u32		inodesize;	/* inode size in bytes		*/ | 
 | 194 | 	__u32		imaxpct;	/* max allowed inode space(%)	*/ | 
 | 195 | 	__u64		datablocks;	/* fsblocks in data subvolume	*/ | 
 | 196 | 	__u64		rtblocks;	/* fsblocks in realtime subvol	*/ | 
 | 197 | 	__u64		rtextents;	/* rt extents in realtime subvol*/ | 
 | 198 | 	__u64		logstart;	/* starting fsblock of the log	*/ | 
 | 199 | 	unsigned char	uuid[16];	/* unique id of the filesystem	*/ | 
 | 200 | 	__u32		sunit;		/* stripe unit, fsblocks	*/ | 
 | 201 | 	__u32		swidth;		/* stripe width, fsblocks	*/ | 
 | 202 | 	__s32		version;	/* structure version		*/ | 
 | 203 | 	__u32		flags;		/* superblock version flags	*/ | 
 | 204 | 	__u32		logsectsize;	/* log sector size, bytes	*/ | 
 | 205 | 	__u32		rtsectsize;	/* realtime sector size, bytes	*/ | 
 | 206 | 	__u32		dirblocksize;	/* directory block size, bytes	*/ | 
 | 207 | } __attribute__((packed)) compat_xfs_fsop_geom_v1_t; | 
 | 208 |  | 
 | 209 | #define XFS_IOC_FSGEOMETRY_V1_32  \ | 
 | 210 | 	_IOR('X', 100, struct compat_xfs_fsop_geom_v1) | 
 | 211 |  | 
 | 212 | typedef struct compat_xfs_inogrp { | 
 | 213 | 	__u64		xi_startino;	/* starting inode number	*/ | 
 | 214 | 	__s32		xi_alloccount;	/* # bits set in allocmask	*/ | 
 | 215 | 	__u64		xi_allocmask;	/* mask of allocated inodes	*/ | 
 | 216 | } __attribute__((packed)) compat_xfs_inogrp_t; | 
 | 217 |  | 
| sandeen@sandeen.net | 471d591 | 2008-11-25 21:20:10 -0600 | [diff] [blame] | 218 | /* These growfs input structures have padding on the end, so must translate */ | 
 | 219 | typedef struct compat_xfs_growfs_data { | 
 | 220 | 	__u64		newblocks;	/* new data subvol size, fsblocks */ | 
 | 221 | 	__u32		imaxpct;	/* new inode space percentage limit */ | 
 | 222 | } __attribute__((packed)) compat_xfs_growfs_data_t; | 
 | 223 |  | 
 | 224 | typedef struct compat_xfs_growfs_rt { | 
 | 225 | 	__u64		newblocks;	/* new realtime size, fsblocks */ | 
 | 226 | 	__u32		extsize;	/* new realtime extent size, fsblocks */ | 
 | 227 | } __attribute__((packed)) compat_xfs_growfs_rt_t; | 
 | 228 |  | 
 | 229 | #define XFS_IOC_FSGROWFSDATA_32 _IOW('X', 110, struct compat_xfs_growfs_data) | 
 | 230 | #define XFS_IOC_FSGROWFSRT_32   _IOW('X', 112, struct compat_xfs_growfs_rt) | 
 | 231 |  | 
| sandeen@sandeen.net | ffae263 | 2008-11-25 21:20:07 -0600 | [diff] [blame] | 232 | #endif /* BROKEN_X86_ALIGNMENT */ | 
 | 233 |  | 
| Nathan Scott | 7b71876 | 2005-11-02 14:58:39 +1100 | [diff] [blame] | 234 | #endif /* __XFS_IOCTL32_H__ */ |