Linux Audio

Check our new training course

Loading...
v6.8
 1/* SPDX-License-Identifier: GPL-2.0 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 2
 3#ifndef BTRFS_IOCTL_H
 4#define BTRFS_IOCTL_H
 
 5
 6long btrfs_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
 7long btrfs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
 8int btrfs_fileattr_get(struct dentry *dentry, struct fileattr *fa);
 9int btrfs_fileattr_set(struct mnt_idmap *idmap,
10		       struct dentry *dentry, struct fileattr *fa);
11int btrfs_ioctl_get_supported_features(void __user *arg);
12void btrfs_sync_inode_flags_to_i_flags(struct inode *inode);
13int __pure btrfs_is_empty_uuid(u8 *uuid);
14void btrfs_update_ioctl_balance_args(struct btrfs_fs_info *fs_info,
15				     struct btrfs_ioctl_balance_args *bargs);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
17#endif
v3.5.6
  1/*
  2 * Copyright (C) 2007 Oracle.  All rights reserved.
  3 *
  4 * This program is free software; you can redistribute it and/or
  5 * modify it under the terms of the GNU General Public
  6 * License v2 as published by the Free Software Foundation.
  7 *
  8 * This program is distributed in the hope that it will be useful,
  9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 11 * General Public License for more details.
 12 *
 13 * You should have received a copy of the GNU General Public
 14 * License along with this program; if not, write to the
 15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 16 * Boston, MA 021110-1307, USA.
 17 */
 18
 19#ifndef __IOCTL_
 20#define __IOCTL_
 21#include <linux/ioctl.h>
 22
 23#define BTRFS_IOCTL_MAGIC 0x94
 24#define BTRFS_VOL_NAME_MAX 255
 25
 26/* this should be 4k */
 27#define BTRFS_PATH_NAME_MAX 4087
 28struct btrfs_ioctl_vol_args {
 29	__s64 fd;
 30	char name[BTRFS_PATH_NAME_MAX + 1];
 31};
 32
 33#define BTRFS_SUBVOL_CREATE_ASYNC	(1ULL << 0)
 34#define BTRFS_SUBVOL_RDONLY		(1ULL << 1)
 35#define BTRFS_FSID_SIZE 16
 36#define BTRFS_UUID_SIZE 16
 37
 38#define BTRFS_SUBVOL_NAME_MAX 4039
 39struct btrfs_ioctl_vol_args_v2 {
 40	__s64 fd;
 41	__u64 transid;
 42	__u64 flags;
 43	__u64 unused[4];
 44	char name[BTRFS_SUBVOL_NAME_MAX + 1];
 45};
 46
 47/*
 48 * structure to report errors and progress to userspace, either as a
 49 * result of a finished scrub, a canceled scrub or a progress inquiry
 50 */
 51struct btrfs_scrub_progress {
 52	__u64 data_extents_scrubbed;	/* # of data extents scrubbed */
 53	__u64 tree_extents_scrubbed;	/* # of tree extents scrubbed */
 54	__u64 data_bytes_scrubbed;	/* # of data bytes scrubbed */
 55	__u64 tree_bytes_scrubbed;	/* # of tree bytes scrubbed */
 56	__u64 read_errors;		/* # of read errors encountered (EIO) */
 57	__u64 csum_errors;		/* # of failed csum checks */
 58	__u64 verify_errors;		/* # of occurences, where the metadata
 59					 * of a tree block did not match the
 60					 * expected values, like generation or
 61					 * logical */
 62	__u64 no_csum;			/* # of 4k data block for which no csum
 63					 * is present, probably the result of
 64					 * data written with nodatasum */
 65	__u64 csum_discards;		/* # of csum for which no data was found
 66					 * in the extent tree. */
 67	__u64 super_errors;		/* # of bad super blocks encountered */
 68	__u64 malloc_errors;		/* # of internal kmalloc errors. These
 69					 * will likely cause an incomplete
 70					 * scrub */
 71	__u64 uncorrectable_errors;	/* # of errors where either no intact
 72					 * copy was found or the writeback
 73					 * failed */
 74	__u64 corrected_errors;		/* # of errors corrected */
 75	__u64 last_physical;		/* last physical address scrubbed. In
 76					 * case a scrub was aborted, this can
 77					 * be used to restart the scrub */
 78	__u64 unverified_errors;	/* # of occurences where a read for a
 79					 * full (64k) bio failed, but the re-
 80					 * check succeeded for each 4k piece.
 81					 * Intermittent error. */
 82};
 83
 84#define BTRFS_SCRUB_READONLY	1
 85struct btrfs_ioctl_scrub_args {
 86	__u64 devid;				/* in */
 87	__u64 start;				/* in */
 88	__u64 end;				/* in */
 89	__u64 flags;				/* in */
 90	struct btrfs_scrub_progress progress;	/* out */
 91	/* pad to 1k */
 92	__u64 unused[(1024-32-sizeof(struct btrfs_scrub_progress))/8];
 93};
 94
 95#define BTRFS_DEVICE_PATH_NAME_MAX 1024
 96struct btrfs_ioctl_dev_info_args {
 97	__u64 devid;				/* in/out */
 98	__u8 uuid[BTRFS_UUID_SIZE];		/* in/out */
 99	__u64 bytes_used;			/* out */
100	__u64 total_bytes;			/* out */
101	__u64 unused[379];			/* pad to 4k */
102	__u8 path[BTRFS_DEVICE_PATH_NAME_MAX];	/* out */
103};
104
105struct btrfs_ioctl_fs_info_args {
106	__u64 max_id;				/* out */
107	__u64 num_devices;			/* out */
108	__u8 fsid[BTRFS_FSID_SIZE];		/* out */
109	__u64 reserved[124];			/* pad to 1k */
110};
111
112/* balance control ioctl modes */
113#define BTRFS_BALANCE_CTL_PAUSE		1
114#define BTRFS_BALANCE_CTL_CANCEL	2
115
116/*
117 * this is packed, because it should be exactly the same as its disk
118 * byte order counterpart (struct btrfs_disk_balance_args)
119 */
120struct btrfs_balance_args {
121	__u64 profiles;
122	__u64 usage;
123	__u64 devid;
124	__u64 pstart;
125	__u64 pend;
126	__u64 vstart;
127	__u64 vend;
128
129	__u64 target;
130
131	__u64 flags;
132
133	__u64 unused[8];
134} __attribute__ ((__packed__));
135
136/* report balance progress to userspace */
137struct btrfs_balance_progress {
138	__u64 expected;		/* estimated # of chunks that will be
139				 * relocated to fulfill the request */
140	__u64 considered;	/* # of chunks we have considered so far */
141	__u64 completed;	/* # of chunks relocated so far */
142};
143
144#define BTRFS_BALANCE_STATE_RUNNING	(1ULL << 0)
145#define BTRFS_BALANCE_STATE_PAUSE_REQ	(1ULL << 1)
146#define BTRFS_BALANCE_STATE_CANCEL_REQ	(1ULL << 2)
147
148struct btrfs_ioctl_balance_args {
149	__u64 flags;				/* in/out */
150	__u64 state;				/* out */
151
152	struct btrfs_balance_args data;		/* in/out */
153	struct btrfs_balance_args meta;		/* in/out */
154	struct btrfs_balance_args sys;		/* in/out */
155
156	struct btrfs_balance_progress stat;	/* out */
157
158	__u64 unused[72];			/* pad to 1k */
159};
160
161#define BTRFS_INO_LOOKUP_PATH_MAX 4080
162struct btrfs_ioctl_ino_lookup_args {
163	__u64 treeid;
164	__u64 objectid;
165	char name[BTRFS_INO_LOOKUP_PATH_MAX];
166};
167
168struct btrfs_ioctl_search_key {
169	/* which root are we searching.  0 is the tree of tree roots */
170	__u64 tree_id;
171
172	/* keys returned will be >= min and <= max */
173	__u64 min_objectid;
174	__u64 max_objectid;
175
176	/* keys returned will be >= min and <= max */
177	__u64 min_offset;
178	__u64 max_offset;
179
180	/* max and min transids to search for */
181	__u64 min_transid;
182	__u64 max_transid;
183
184	/* keys returned will be >= min and <= max */
185	__u32 min_type;
186	__u32 max_type;
187
188	/*
189	 * how many items did userland ask for, and how many are we
190	 * returning
191	 */
192	__u32 nr_items;
193
194	/* align to 64 bits */
195	__u32 unused;
196
197	/* some extra for later */
198	__u64 unused1;
199	__u64 unused2;
200	__u64 unused3;
201	__u64 unused4;
202};
203
204struct btrfs_ioctl_search_header {
205	__u64 transid;
206	__u64 objectid;
207	__u64 offset;
208	__u32 type;
209	__u32 len;
210};
211
212#define BTRFS_SEARCH_ARGS_BUFSIZE (4096 - sizeof(struct btrfs_ioctl_search_key))
213/*
214 * the buf is an array of search headers where
215 * each header is followed by the actual item
216 * the type field is expanded to 32 bits for alignment
217 */
218struct btrfs_ioctl_search_args {
219	struct btrfs_ioctl_search_key key;
220	char buf[BTRFS_SEARCH_ARGS_BUFSIZE];
221};
222
223struct btrfs_ioctl_clone_range_args {
224  __s64 src_fd;
225  __u64 src_offset, src_length;
226  __u64 dest_offset;
227};
228
229/* flags for the defrag range ioctl */
230#define BTRFS_DEFRAG_RANGE_COMPRESS 1
231#define BTRFS_DEFRAG_RANGE_START_IO 2
232
233struct btrfs_ioctl_space_info {
234	__u64 flags;
235	__u64 total_bytes;
236	__u64 used_bytes;
237};
238
239struct btrfs_ioctl_space_args {
240	__u64 space_slots;
241	__u64 total_spaces;
242	struct btrfs_ioctl_space_info spaces[0];
243};
244
245struct btrfs_data_container {
246	__u32	bytes_left;	/* out -- bytes not needed to deliver output */
247	__u32	bytes_missing;	/* out -- additional bytes needed for result */
248	__u32	elem_cnt;	/* out */
249	__u32	elem_missed;	/* out */
250	__u64	val[0];		/* out */
251};
252
253struct btrfs_ioctl_ino_path_args {
254	__u64				inum;		/* in */
255	__u64				size;		/* in */
256	__u64				reserved[4];
257	/* struct btrfs_data_container	*fspath;	   out */
258	__u64				fspath;		/* out */
259};
260
261struct btrfs_ioctl_logical_ino_args {
262	__u64				logical;	/* in */
263	__u64				size;		/* in */
264	__u64				reserved[4];
265	/* struct btrfs_data_container	*inodes;	out   */
266	__u64				inodes;
267};
268
269enum btrfs_dev_stat_values {
270	/* disk I/O failure stats */
271	BTRFS_DEV_STAT_WRITE_ERRS, /* EIO or EREMOTEIO from lower layers */
272	BTRFS_DEV_STAT_READ_ERRS, /* EIO or EREMOTEIO from lower layers */
273	BTRFS_DEV_STAT_FLUSH_ERRS, /* EIO or EREMOTEIO from lower layers */
274
275	/* stats for indirect indications for I/O failures */
276	BTRFS_DEV_STAT_CORRUPTION_ERRS, /* checksum error, bytenr error or
277					 * contents is illegal: this is an
278					 * indication that the block was damaged
279					 * during read or write, or written to
280					 * wrong location or read from wrong
281					 * location */
282	BTRFS_DEV_STAT_GENERATION_ERRS, /* an indication that blocks have not
283					 * been written */
284
285	BTRFS_DEV_STAT_VALUES_MAX
286};
287
288struct btrfs_ioctl_get_dev_stats {
289	__u64 devid;				/* in */
290	__u64 nr_items;				/* in/out */
291
292	/* out values: */
293	__u64 values[BTRFS_DEV_STAT_VALUES_MAX];
294
295	__u64 unused[128 - 2 - BTRFS_DEV_STAT_VALUES_MAX]; /* pad to 1k */
296};
297
298#define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \
299				   struct btrfs_ioctl_vol_args)
300#define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \
301				   struct btrfs_ioctl_vol_args)
302#define BTRFS_IOC_RESIZE _IOW(BTRFS_IOCTL_MAGIC, 3, \
303				   struct btrfs_ioctl_vol_args)
304#define BTRFS_IOC_SCAN_DEV _IOW(BTRFS_IOCTL_MAGIC, 4, \
305				   struct btrfs_ioctl_vol_args)
306/* trans start and trans end are dangerous, and only for
307 * use by applications that know how to avoid the
308 * resulting deadlocks
309 */
310#define BTRFS_IOC_TRANS_START  _IO(BTRFS_IOCTL_MAGIC, 6)
311#define BTRFS_IOC_TRANS_END    _IO(BTRFS_IOCTL_MAGIC, 7)
312#define BTRFS_IOC_SYNC         _IO(BTRFS_IOCTL_MAGIC, 8)
313
314#define BTRFS_IOC_CLONE        _IOW(BTRFS_IOCTL_MAGIC, 9, int)
315#define BTRFS_IOC_ADD_DEV _IOW(BTRFS_IOCTL_MAGIC, 10, \
316				   struct btrfs_ioctl_vol_args)
317#define BTRFS_IOC_RM_DEV _IOW(BTRFS_IOCTL_MAGIC, 11, \
318				   struct btrfs_ioctl_vol_args)
319#define BTRFS_IOC_BALANCE _IOW(BTRFS_IOCTL_MAGIC, 12, \
320				   struct btrfs_ioctl_vol_args)
321
322#define BTRFS_IOC_CLONE_RANGE _IOW(BTRFS_IOCTL_MAGIC, 13, \
323				  struct btrfs_ioctl_clone_range_args)
324
325#define BTRFS_IOC_SUBVOL_CREATE _IOW(BTRFS_IOCTL_MAGIC, 14, \
326				   struct btrfs_ioctl_vol_args)
327#define BTRFS_IOC_SNAP_DESTROY _IOW(BTRFS_IOCTL_MAGIC, 15, \
328				struct btrfs_ioctl_vol_args)
329#define BTRFS_IOC_DEFRAG_RANGE _IOW(BTRFS_IOCTL_MAGIC, 16, \
330				struct btrfs_ioctl_defrag_range_args)
331#define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \
332				   struct btrfs_ioctl_search_args)
333#define BTRFS_IOC_INO_LOOKUP _IOWR(BTRFS_IOCTL_MAGIC, 18, \
334				   struct btrfs_ioctl_ino_lookup_args)
335#define BTRFS_IOC_DEFAULT_SUBVOL _IOW(BTRFS_IOCTL_MAGIC, 19, u64)
336#define BTRFS_IOC_SPACE_INFO _IOWR(BTRFS_IOCTL_MAGIC, 20, \
337				    struct btrfs_ioctl_space_args)
338#define BTRFS_IOC_START_SYNC _IOR(BTRFS_IOCTL_MAGIC, 24, __u64)
339#define BTRFS_IOC_WAIT_SYNC  _IOW(BTRFS_IOCTL_MAGIC, 22, __u64)
340#define BTRFS_IOC_SNAP_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 23, \
341				   struct btrfs_ioctl_vol_args_v2)
342#define BTRFS_IOC_SUBVOL_GETFLAGS _IOR(BTRFS_IOCTL_MAGIC, 25, __u64)
343#define BTRFS_IOC_SUBVOL_SETFLAGS _IOW(BTRFS_IOCTL_MAGIC, 26, __u64)
344#define BTRFS_IOC_SCRUB _IOWR(BTRFS_IOCTL_MAGIC, 27, \
345			      struct btrfs_ioctl_scrub_args)
346#define BTRFS_IOC_SCRUB_CANCEL _IO(BTRFS_IOCTL_MAGIC, 28)
347#define BTRFS_IOC_SCRUB_PROGRESS _IOWR(BTRFS_IOCTL_MAGIC, 29, \
348				       struct btrfs_ioctl_scrub_args)
349#define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \
350				 struct btrfs_ioctl_dev_info_args)
351#define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \
352			       struct btrfs_ioctl_fs_info_args)
353#define BTRFS_IOC_BALANCE_V2 _IOWR(BTRFS_IOCTL_MAGIC, 32, \
354				   struct btrfs_ioctl_balance_args)
355#define BTRFS_IOC_BALANCE_CTL _IOW(BTRFS_IOCTL_MAGIC, 33, int)
356#define BTRFS_IOC_BALANCE_PROGRESS _IOR(BTRFS_IOCTL_MAGIC, 34, \
357					struct btrfs_ioctl_balance_args)
358#define BTRFS_IOC_INO_PATHS _IOWR(BTRFS_IOCTL_MAGIC, 35, \
359					struct btrfs_ioctl_ino_path_args)
360#define BTRFS_IOC_LOGICAL_INO _IOWR(BTRFS_IOCTL_MAGIC, 36, \
361					struct btrfs_ioctl_ino_path_args)
362#define BTRFS_IOC_GET_DEV_STATS _IOWR(BTRFS_IOCTL_MAGIC, 52, \
363				      struct btrfs_ioctl_get_dev_stats)
364#define BTRFS_IOC_GET_AND_RESET_DEV_STATS _IOWR(BTRFS_IOCTL_MAGIC, 53, \
365					struct btrfs_ioctl_get_dev_stats)
366
367#endif