2 * This program is free software; you can redistribute it and/or
3 * modify it under the terms of the GNU General Public
4 * License v2 as published by the Free Software Foundation.
6 * This program is distributed in the hope that it will be useful,
7 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
9 * General Public License for more details.
11 * You should have received a copy of the GNU General Public
12 * License along with this program; if not, write to the
13 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
14 * Boston, MA 021110-1307, USA.
17 #include "kerncompat.h"
24 #define LIST_32_COMPAT \
25 ONE(BTRFS_IOC_SET_RECEIVED_SUBVOL_32)
27 #define LIST_64_COMPAT \
28 ONE(BTRFS_IOC_SEND_64)
31 ONE(BTRFS_IOC_SNAP_CREATE) \
32 ONE(BTRFS_IOC_DEFRAG) \
33 ONE(BTRFS_IOC_RESIZE) \
34 ONE(BTRFS_IOC_SCAN_DEV) \
35 ONE(BTRFS_IOC_TRANS_START) \
36 ONE(BTRFS_IOC_TRANS_END) \
38 ONE(BTRFS_IOC_CLONE) \
39 ONE(BTRFS_IOC_ADD_DEV) \
40 ONE(BTRFS_IOC_RM_DEV) \
41 ONE(BTRFS_IOC_BALANCE) \
42 ONE(BTRFS_IOC_CLONE_RANGE) \
43 ONE(BTRFS_IOC_SUBVOL_CREATE) \
44 ONE(BTRFS_IOC_SNAP_DESTROY) \
45 ONE(BTRFS_IOC_DEFRAG_RANGE) \
46 ONE(BTRFS_IOC_TREE_SEARCH) \
47 ONE(BTRFS_IOC_TREE_SEARCH_V2) \
48 ONE(BTRFS_IOC_INO_LOOKUP) \
49 ONE(BTRFS_IOC_DEFAULT_SUBVOL) \
50 ONE(BTRFS_IOC_SPACE_INFO) \
51 ONE(BTRFS_IOC_START_SYNC) \
52 ONE(BTRFS_IOC_WAIT_SYNC) \
53 ONE(BTRFS_IOC_SNAP_CREATE_V2) \
54 ONE(BTRFS_IOC_SUBVOL_CREATE_V2) \
55 ONE(BTRFS_IOC_SUBVOL_GETFLAGS) \
56 ONE(BTRFS_IOC_SUBVOL_SETFLAGS) \
57 ONE(BTRFS_IOC_SCRUB) \
58 ONE(BTRFS_IOC_SCRUB_CANCEL) \
59 ONE(BTRFS_IOC_SCRUB_PROGRESS) \
60 ONE(BTRFS_IOC_DEV_INFO) \
61 ONE(BTRFS_IOC_FS_INFO) \
62 ONE(BTRFS_IOC_BALANCE_V2) \
63 ONE(BTRFS_IOC_BALANCE_CTL) \
64 ONE(BTRFS_IOC_BALANCE_PROGRESS) \
65 ONE(BTRFS_IOC_INO_PATHS) \
66 ONE(BTRFS_IOC_LOGICAL_INO) \
67 ONE(BTRFS_IOC_SET_RECEIVED_SUBVOL) \
69 ONE(BTRFS_IOC_DEVICES_READY) \
70 ONE(BTRFS_IOC_QUOTA_CTL) \
71 ONE(BTRFS_IOC_QGROUP_ASSIGN) \
72 ONE(BTRFS_IOC_QGROUP_CREATE) \
73 ONE(BTRFS_IOC_QGROUP_LIMIT) \
74 ONE(BTRFS_IOC_QUOTA_RESCAN) \
75 ONE(BTRFS_IOC_QUOTA_RESCAN_STATUS) \
76 ONE(BTRFS_IOC_QUOTA_RESCAN_WAIT) \
77 ONE(BTRFS_IOC_GET_FSLABEL) \
78 ONE(BTRFS_IOC_SET_FSLABEL) \
79 ONE(BTRFS_IOC_GET_DEV_STATS) \
80 ONE(BTRFS_IOC_DEV_REPLACE) \
81 ONE(BTRFS_IOC_FILE_EXTENT_SAME) \
82 ONE(BTRFS_IOC_GET_FEATURES) \
83 ONE(BTRFS_IOC_SET_FEATURES) \
84 ONE(BTRFS_IOC_GET_SUPPORTED_FEATURES) \
85 ONE(BTRFS_IOC_RM_DEV_V2)
93 unsigned long defined
;
94 unsigned long expected
;
97 static struct ioctl_number expected_list
[] = {
98 { BTRFS_IOC_SNAP_CREATE
, 0x0050009401 },
99 { BTRFS_IOC_DEFRAG
, 0x0050009402 },
100 { BTRFS_IOC_RESIZE
, 0x0050009403 },
101 { BTRFS_IOC_SCAN_DEV
, 0x0050009404 },
102 { BTRFS_IOC_TRANS_START
, 0x0000009406 },
103 { BTRFS_IOC_TRANS_END
, 0x0000009407 },
104 { BTRFS_IOC_SYNC
, 0x0000009408 },
105 { BTRFS_IOC_CLONE
, 0x0040049409 },
106 { BTRFS_IOC_ADD_DEV
, 0x005000940a },
107 { BTRFS_IOC_RM_DEV
, 0x005000940b },
108 { BTRFS_IOC_BALANCE
, 0x005000940c },
109 { BTRFS_IOC_CLONE_RANGE
, 0x004020940d },
110 { BTRFS_IOC_SUBVOL_CREATE
, 0x005000940e },
111 { BTRFS_IOC_SNAP_DESTROY
, 0x005000940f },
112 { BTRFS_IOC_DEFRAG_RANGE
, 0x0040309410 },
113 { BTRFS_IOC_TREE_SEARCH
, 0x00d0009411 },
114 { BTRFS_IOC_TREE_SEARCH_V2
, 0x00c0709411 },
115 { BTRFS_IOC_INO_LOOKUP
, 0x00d0009412 },
116 { BTRFS_IOC_DEFAULT_SUBVOL
, 0x0040089413 },
117 { BTRFS_IOC_SPACE_INFO
, 0x00c0109414 },
118 { BTRFS_IOC_START_SYNC
, 0x0080089418 },
119 { BTRFS_IOC_WAIT_SYNC
, 0x0040089416 },
120 { BTRFS_IOC_SNAP_CREATE_V2
, 0x0050009417 },
121 { BTRFS_IOC_SUBVOL_CREATE_V2
, 0x0050009418 },
122 { BTRFS_IOC_SUBVOL_GETFLAGS
, 0x0080089419 },
123 { BTRFS_IOC_SUBVOL_SETFLAGS
, 0x004008941a },
124 { BTRFS_IOC_SCRUB
, 0x00c400941b },
125 { BTRFS_IOC_SCRUB_CANCEL
, 0x000000941c },
126 { BTRFS_IOC_SCRUB_PROGRESS
, 0x00c400941d },
127 { BTRFS_IOC_DEV_INFO
, 0x00d000941e },
128 { BTRFS_IOC_FS_INFO
, 0x008400941f },
129 { BTRFS_IOC_BALANCE_V2
, 0x00c4009420 },
130 { BTRFS_IOC_BALANCE_CTL
, 0x0040049421 },
131 { BTRFS_IOC_BALANCE_PROGRESS
, 0x0084009422 },
132 { BTRFS_IOC_INO_PATHS
, 0x00c0389423 },
133 { BTRFS_IOC_LOGICAL_INO
, 0x00c0389424 },
134 { BTRFS_IOC_SET_RECEIVED_SUBVOL
, 0x00c0c89425 },
135 #ifdef BTRFS_IOC_SET_RECEIVED_SUBVOL_32_COMPAT_DEFINED
136 { BTRFS_IOC_SET_RECEIVED_SUBVOL_32
, 0x00c0c09425 },
138 #if BITS_PER_LONG == 32
139 { BTRFS_IOC_SEND
, 0x0040449426 },
140 #elif BITS_PER_LONG == 64
141 { BTRFS_IOC_SEND
, 0x0040489426 },
143 #ifdef BTRFS_IOC_SEND_64_COMPAT_DEFINED
144 { BTRFS_IOC_SEND_64
, 0x0040489426 },
146 { BTRFS_IOC_DEVICES_READY
, 0x0090009427 },
147 { BTRFS_IOC_QUOTA_CTL
, 0x00c0109428 },
148 { BTRFS_IOC_QGROUP_ASSIGN
, 0x0040189429 },
149 { BTRFS_IOC_QGROUP_CREATE
, 0x004010942a },
150 { BTRFS_IOC_QGROUP_LIMIT
, 0x008030942b },
151 { BTRFS_IOC_QUOTA_RESCAN
, 0x004040942c },
152 { BTRFS_IOC_QUOTA_RESCAN_STATUS
, 0x008040942d },
153 { BTRFS_IOC_QUOTA_RESCAN_WAIT
, 0x000000942e },
154 { BTRFS_IOC_GET_FSLABEL
, 0x0081009431 },
155 { BTRFS_IOC_SET_FSLABEL
, 0x0041009432 },
156 { BTRFS_IOC_GET_DEV_STATS
, 0x00c4089434 },
157 { BTRFS_IOC_DEV_REPLACE
, 0x00ca289435 },
158 { BTRFS_IOC_FILE_EXTENT_SAME
, 0x00c0189436 },
159 { BTRFS_IOC_GET_FEATURES
, 0x0080189439 },
160 { BTRFS_IOC_SET_FEATURES
, 0x0040309439 },
161 { BTRFS_IOC_GET_SUPPORTED_FEATURES
, 0x0080489439 },
162 { BTRFS_IOC_RM_DEV_V2
, 0x005000943a },
165 static struct btrfs_ioctl_vol_args used_vol_args
__attribute__((used
));
166 static struct btrfs_ioctl_vol_args_v2 used_vol_args2
__attribute__((used
));
167 static struct btrfs_ioctl_clone_range_args used_clone_args
__attribute__((used
));
168 static struct btrfs_ioctl_defrag_range_args used_defrag_args
__attribute__((used
));
169 static struct btrfs_ioctl_search_args used_search_args
__attribute__((used
));
170 static struct btrfs_ioctl_search_args_v2 used_search_args2
__attribute__((used
));
171 static struct btrfs_ioctl_ino_lookup_args used_ino_lookup
__attribute__((used
));
172 static struct btrfs_ioctl_space_args used_space_args
__attribute__((used
));
173 static struct btrfs_ioctl_scrub_args used_scrub_args
__attribute__((used
));
174 static struct btrfs_ioctl_dev_info_args used_dev_info_args
__attribute__((used
));
175 static struct btrfs_ioctl_fs_info_args used_fs_info_args
__attribute__((used
));
176 static struct btrfs_ioctl_balance_args used_balance_args
__attribute__((used
));
177 static struct btrfs_ioctl_ino_path_args used_path_args
__attribute__((used
));
178 static struct btrfs_ioctl_logical_ino_args used_logical_args
__attribute__((used
));
179 static struct btrfs_ioctl_received_subvol_args used_received_args
__attribute__((used
));
180 #ifdef BTRFS_IOC_SET_RECEIVED_SUBVOL_32_COMPAT_DEFINED
181 static struct btrfs_ioctl_received_subvol_args_32 used_received_args32
__attribute__((used
));
183 static struct btrfs_ioctl_send_args used_send_args
__attribute__((used
));
184 #ifdef BTRFS_IOC_SEND_64_COMPAT_DEFINED
185 static struct btrfs_ioctl_send_args_64 used_send_args64
__attribute__((used
));
187 static struct btrfs_ioctl_quota_ctl_args used_qgctl_args
__attribute__((used
));
188 static struct btrfs_ioctl_qgroup_assign_args used_qgassign_args
__attribute__((used
));
189 static struct btrfs_ioctl_qgroup_create_args used_qgcreate_args
__attribute__((used
));
190 static struct btrfs_ioctl_qgroup_limit_args used_qglimit_args
__attribute__((used
));
191 static struct btrfs_ioctl_quota_rescan_args used_qgrescan_args
__attribute__((used
));
192 static struct btrfs_ioctl_get_dev_stats used_dev_stats_args
__attribute__((used
));
193 static struct btrfs_ioctl_dev_replace_args used_replace_args
__attribute__((used
));
194 static struct btrfs_ioctl_same_args used_same_args
__attribute__((used
));
195 static struct btrfs_ioctl_feature_flags used_feature_flags
__attribute__((used
));
197 const char* value_to_string(unsigned long num
)
199 #define ONE(x) case x: return #x;
215 int main(int ac
, char **av
)
220 value_to_string(random());
222 printf("Sizeof long long: %zu\n", sizeof(unsigned long long));
223 printf("Sizeof long: %zu\n", sizeof(unsigned long));
224 printf("Sizeof pointer: %zu\n", sizeof(void*));
225 printf("Alignof long long: %zu\n", __alignof__(unsigned long long));
226 printf("Alignof long: %zu\n", __alignof__(unsigned long));
227 printf("Alignof pointer: %zu\n", __alignof__(void*));
228 printf("Raw ioctl numbers:\n");
230 #define ONE(n) printf("%-38s 0x%010lx\n", #n, (unsigned long)n);
234 for (i
= 0; i
< ARRAY_SIZE(expected_list
); i
++) {
235 if (expected_list
[i
].defined
!= expected_list
[i
].expected
) {
236 printf("ERROR: wrong value for %s, defined=0x%lx expected=0x%lx\n",
237 value_to_string(expected_list
[i
].defined
),
238 expected_list
[i
].defined
,
239 expected_list
[i
].expected
);
247 printf("Found %d errors in definitions\n", errors
);