diff options
author | sandeen@sandeen.net <sandeen@sandeen.net> | 2008-11-25 22:20:07 -0500 |
---|---|---|
committer | Lachlan McIlroy <lachlan@redback.melbourne.sgi.com> | 2008-12-02 01:08:44 -0500 |
commit | ffae263a640b736a7206a0d7bd14ab44eb58cd28 (patch) | |
tree | 50befe3c25e6f01459d9968a4139f171e2e097b0 /fs/xfs/linux-2.6/xfs_ioctl32.h | |
parent | 743bb4650da9e2595d6cedd01c680b5b9398c74a (diff) |
[XFS] Move compat ioctl structs & numbers into xfs_ioctl32.h
This makes the c file less cluttered and a bit more
readable. Consistently name the ioctl number
macros with "_32" and the compatibility stuctures
with "_compat." Rename the helpers which simply
copy in the arg with "_copyin" for easy identification.
Finally, for a few of the existing helpers, modify them
so that they directly call the native ioctl helper
after userspace argument fixup.
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_ioctl32.h')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_ioctl32.h | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/fs/xfs/linux-2.6/xfs_ioctl32.h b/fs/xfs/linux-2.6/xfs_ioctl32.h index 02de6e62ee37..003a10e695be 100644 --- a/fs/xfs/linux-2.6/xfs_ioctl32.h +++ b/fs/xfs/linux-2.6/xfs_ioctl32.h | |||
@@ -18,7 +18,152 @@ | |||
18 | #ifndef __XFS_IOCTL32_H__ | 18 | #ifndef __XFS_IOCTL32_H__ |
19 | #define __XFS_IOCTL32_H__ | 19 | #define __XFS_IOCTL32_H__ |
20 | 20 | ||
21 | #include <linux/compat.h> | ||
22 | |||
21 | extern long xfs_file_compat_ioctl(struct file *, unsigned, unsigned long); | 23 | extern long xfs_file_compat_ioctl(struct file *, unsigned, unsigned long); |
22 | extern long xfs_file_compat_invis_ioctl(struct file *, unsigned, unsigned long); | 24 | extern long xfs_file_compat_invis_ioctl(struct file *, unsigned, unsigned long); |
23 | 25 | ||
26 | /* | ||
27 | * on 32-bit arches, ioctl argument structures may have different sizes | ||
28 | * and/or alignment. We define compat structures which match the | ||
29 | * 32-bit sizes/alignments here, and their associated ioctl numbers. | ||
30 | * | ||
31 | * xfs_ioctl32.c contains routines to copy these structures in and out. | ||
32 | */ | ||
33 | |||
34 | /* stock kernel-level ioctls we support */ | ||
35 | #define XFS_IOC_GETXFLAGS_32 FS_IOC32_GETFLAGS | ||
36 | #define XFS_IOC_SETXFLAGS_32 FS_IOC32_SETFLAGS | ||
37 | #define XFS_IOC_GETVERSION_32 FS_IOC32_GETVERSION | ||
38 | |||
39 | /* | ||
40 | * On intel, even if sizes match, alignment and/or padding may differ. | ||
41 | */ | ||
42 | #if defined(CONFIG_IA64) || defined(CONFIG_X86_64) | ||
43 | #define BROKEN_X86_ALIGNMENT | ||
44 | #define __compat_packed __attribute__((packed)) | ||
45 | #else | ||
46 | #define __compat_packed | ||
47 | #endif | ||
48 | |||
49 | typedef struct compat_xfs_bstime { | ||
50 | compat_time_t tv_sec; /* seconds */ | ||
51 | __s32 tv_nsec; /* and nanoseconds */ | ||
52 | } compat_xfs_bstime_t; | ||
53 | |||
54 | typedef struct compat_xfs_bstat { | ||
55 | __u64 bs_ino; /* inode number */ | ||
56 | __u16 bs_mode; /* type and mode */ | ||
57 | __u16 bs_nlink; /* number of links */ | ||
58 | __u32 bs_uid; /* user id */ | ||
59 | __u32 bs_gid; /* group id */ | ||
60 | __u32 bs_rdev; /* device value */ | ||
61 | __s32 bs_blksize; /* block size */ | ||
62 | __s64 bs_size; /* file size */ | ||
63 | compat_xfs_bstime_t bs_atime; /* access time */ | ||
64 | compat_xfs_bstime_t bs_mtime; /* modify time */ | ||
65 | compat_xfs_bstime_t bs_ctime; /* inode change time */ | ||
66 | int64_t bs_blocks; /* number of blocks */ | ||
67 | __u32 bs_xflags; /* extended flags */ | ||
68 | __s32 bs_extsize; /* extent size */ | ||
69 | __s32 bs_extents; /* number of extents */ | ||
70 | __u32 bs_gen; /* generation count */ | ||
71 | __u16 bs_projid; /* project id */ | ||
72 | unsigned char bs_pad[14]; /* pad space, unused */ | ||
73 | __u32 bs_dmevmask; /* DMIG event mask */ | ||
74 | __u16 bs_dmstate; /* DMIG state info */ | ||
75 | __u16 bs_aextents; /* attribute number of extents */ | ||
76 | } __compat_packed compat_xfs_bstat_t; | ||
77 | |||
78 | typedef struct compat_xfs_fsop_bulkreq { | ||
79 | compat_uptr_t lastip; /* last inode # pointer */ | ||
80 | __s32 icount; /* count of entries in buffer */ | ||
81 | compat_uptr_t ubuffer; /* user buffer for inode desc. */ | ||
82 | compat_uptr_t ocount; /* output count pointer */ | ||
83 | } compat_xfs_fsop_bulkreq_t; | ||
84 | |||
85 | #define XFS_IOC_FSBULKSTAT_32 \ | ||
86 | _IOWR('X', 101, struct compat_xfs_fsop_bulkreq) | ||
87 | #define XFS_IOC_FSBULKSTAT_SINGLE_32 \ | ||
88 | _IOWR('X', 102, struct compat_xfs_fsop_bulkreq) | ||
89 | #define XFS_IOC_FSINUMBERS_32 \ | ||
90 | _IOWR('X', 103, struct compat_xfs_fsop_bulkreq) | ||
91 | |||
92 | typedef struct compat_xfs_fsop_handlereq { | ||
93 | __u32 fd; /* fd for FD_TO_HANDLE */ | ||
94 | compat_uptr_t path; /* user pathname */ | ||
95 | __u32 oflags; /* open flags */ | ||
96 | compat_uptr_t ihandle; /* user supplied handle */ | ||
97 | __u32 ihandlen; /* user supplied length */ | ||
98 | compat_uptr_t ohandle; /* user buffer for handle */ | ||
99 | compat_uptr_t ohandlen; /* user buffer length */ | ||
100 | } compat_xfs_fsop_handlereq_t; | ||
101 | |||
102 | #define XFS_IOC_PATH_TO_FSHANDLE_32 \ | ||
103 | _IOWR('X', 104, struct compat_xfs_fsop_handlereq) | ||
104 | #define XFS_IOC_PATH_TO_HANDLE_32 \ | ||
105 | _IOWR('X', 105, struct compat_xfs_fsop_handlereq) | ||
106 | #define XFS_IOC_FD_TO_HANDLE_32 \ | ||
107 | _IOWR('X', 106, struct compat_xfs_fsop_handlereq) | ||
108 | #define XFS_IOC_OPEN_BY_HANDLE_32 \ | ||
109 | _IOWR('X', 107, struct compat_xfs_fsop_handlereq) | ||
110 | #define XFS_IOC_READLINK_BY_HANDLE_32 \ | ||
111 | _IOWR('X', 108, struct compat_xfs_fsop_handlereq) | ||
112 | |||
113 | #ifdef BROKEN_X86_ALIGNMENT | ||
114 | /* on ia32 l_start is on a 32-bit boundary */ | ||
115 | typedef struct compat_xfs_flock64 { | ||
116 | __s16 l_type; | ||
117 | __s16 l_whence; | ||
118 | __s64 l_start __attribute__((packed)); | ||
119 | /* len == 0 means until end of file */ | ||
120 | __s64 l_len __attribute__((packed)); | ||
121 | __s32 l_sysid; | ||
122 | __u32 l_pid; | ||
123 | __s32 l_pad[4]; /* reserve area */ | ||
124 | } compat_xfs_flock64_t; | ||
125 | |||
126 | #define XFS_IOC_ALLOCSP_32 _IOW('X', 10, struct compat_xfs_flock64) | ||
127 | #define XFS_IOC_FREESP_32 _IOW('X', 11, struct compat_xfs_flock64) | ||
128 | #define XFS_IOC_ALLOCSP64_32 _IOW('X', 36, struct compat_xfs_flock64) | ||
129 | #define XFS_IOC_FREESP64_32 _IOW('X', 37, struct compat_xfs_flock64) | ||
130 | #define XFS_IOC_RESVSP_32 _IOW('X', 40, struct compat_xfs_flock64) | ||
131 | #define XFS_IOC_UNRESVSP_32 _IOW('X', 41, struct compat_xfs_flock64) | ||
132 | #define XFS_IOC_RESVSP64_32 _IOW('X', 42, struct compat_xfs_flock64) | ||
133 | #define XFS_IOC_UNRESVSP64_32 _IOW('X', 43, struct compat_xfs_flock64) | ||
134 | |||
135 | typedef struct compat_xfs_fsop_geom_v1 { | ||
136 | __u32 blocksize; /* filesystem (data) block size */ | ||
137 | __u32 rtextsize; /* realtime extent size */ | ||
138 | __u32 agblocks; /* fsblocks in an AG */ | ||
139 | __u32 agcount; /* number of allocation groups */ | ||
140 | __u32 logblocks; /* fsblocks in the log */ | ||
141 | __u32 sectsize; /* (data) sector size, bytes */ | ||
142 | __u32 inodesize; /* inode size in bytes */ | ||
143 | __u32 imaxpct; /* max allowed inode space(%) */ | ||
144 | __u64 datablocks; /* fsblocks in data subvolume */ | ||
145 | __u64 rtblocks; /* fsblocks in realtime subvol */ | ||
146 | __u64 rtextents; /* rt extents in realtime subvol*/ | ||
147 | __u64 logstart; /* starting fsblock of the log */ | ||
148 | unsigned char uuid[16]; /* unique id of the filesystem */ | ||
149 | __u32 sunit; /* stripe unit, fsblocks */ | ||
150 | __u32 swidth; /* stripe width, fsblocks */ | ||
151 | __s32 version; /* structure version */ | ||
152 | __u32 flags; /* superblock version flags */ | ||
153 | __u32 logsectsize; /* log sector size, bytes */ | ||
154 | __u32 rtsectsize; /* realtime sector size, bytes */ | ||
155 | __u32 dirblocksize; /* directory block size, bytes */ | ||
156 | } __attribute__((packed)) compat_xfs_fsop_geom_v1_t; | ||
157 | |||
158 | #define XFS_IOC_FSGEOMETRY_V1_32 \ | ||
159 | _IOR('X', 100, struct compat_xfs_fsop_geom_v1) | ||
160 | |||
161 | typedef struct compat_xfs_inogrp { | ||
162 | __u64 xi_startino; /* starting inode number */ | ||
163 | __s32 xi_alloccount; /* # bits set in allocmask */ | ||
164 | __u64 xi_allocmask; /* mask of allocated inodes */ | ||
165 | } __attribute__((packed)) compat_xfs_inogrp_t; | ||
166 | |||
167 | #endif /* BROKEN_X86_ALIGNMENT */ | ||
168 | |||
24 | #endif /* __XFS_IOCTL32_H__ */ | 169 | #endif /* __XFS_IOCTL32_H__ */ |