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.1
  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#define BTRFS_INO_LOOKUP_PATH_MAX 4080
113struct btrfs_ioctl_ino_lookup_args {
114	__u64 treeid;
115	__u64 objectid;
116	char name[BTRFS_INO_LOOKUP_PATH_MAX];
117};
118
119struct btrfs_ioctl_search_key {
120	/* which root are we searching.  0 is the tree of tree roots */
121	__u64 tree_id;
122
123	/* keys returned will be >= min and <= max */
124	__u64 min_objectid;
125	__u64 max_objectid;
126
127	/* keys returned will be >= min and <= max */
128	__u64 min_offset;
129	__u64 max_offset;
130
131	/* max and min transids to search for */
132	__u64 min_transid;
133	__u64 max_transid;
134
135	/* keys returned will be >= min and <= max */
136	__u32 min_type;
137	__u32 max_type;
138
139	/*
140	 * how many items did userland ask for, and how many are we
141	 * returning
142	 */
143	__u32 nr_items;
144
145	/* align to 64 bits */
146	__u32 unused;
147
148	/* some extra for later */
149	__u64 unused1;
150	__u64 unused2;
151	__u64 unused3;
152	__u64 unused4;
153};
154
155struct btrfs_ioctl_search_header {
156	__u64 transid;
157	__u64 objectid;
158	__u64 offset;
159	__u32 type;
160	__u32 len;
161};
162
163#define BTRFS_SEARCH_ARGS_BUFSIZE (4096 - sizeof(struct btrfs_ioctl_search_key))
164/*
165 * the buf is an array of search headers where
166 * each header is followed by the actual item
167 * the type field is expanded to 32 bits for alignment
168 */
169struct btrfs_ioctl_search_args {
170	struct btrfs_ioctl_search_key key;
171	char buf[BTRFS_SEARCH_ARGS_BUFSIZE];
172};
173
174struct btrfs_ioctl_clone_range_args {
175  __s64 src_fd;
176  __u64 src_offset, src_length;
177  __u64 dest_offset;
178};
179
180/* flags for the defrag range ioctl */
181#define BTRFS_DEFRAG_RANGE_COMPRESS 1
182#define BTRFS_DEFRAG_RANGE_START_IO 2
183
184struct btrfs_ioctl_space_info {
185	__u64 flags;
186	__u64 total_bytes;
187	__u64 used_bytes;
188};
189
190struct btrfs_ioctl_space_args {
191	__u64 space_slots;
192	__u64 total_spaces;
193	struct btrfs_ioctl_space_info spaces[0];
194};
195
196#define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \
197				   struct btrfs_ioctl_vol_args)
198#define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \
199				   struct btrfs_ioctl_vol_args)
200#define BTRFS_IOC_RESIZE _IOW(BTRFS_IOCTL_MAGIC, 3, \
201				   struct btrfs_ioctl_vol_args)
202#define BTRFS_IOC_SCAN_DEV _IOW(BTRFS_IOCTL_MAGIC, 4, \
203				   struct btrfs_ioctl_vol_args)
204/* trans start and trans end are dangerous, and only for
205 * use by applications that know how to avoid the
206 * resulting deadlocks
207 */
208#define BTRFS_IOC_TRANS_START  _IO(BTRFS_IOCTL_MAGIC, 6)
209#define BTRFS_IOC_TRANS_END    _IO(BTRFS_IOCTL_MAGIC, 7)
210#define BTRFS_IOC_SYNC         _IO(BTRFS_IOCTL_MAGIC, 8)
211
212#define BTRFS_IOC_CLONE        _IOW(BTRFS_IOCTL_MAGIC, 9, int)
213#define BTRFS_IOC_ADD_DEV _IOW(BTRFS_IOCTL_MAGIC, 10, \
214				   struct btrfs_ioctl_vol_args)
215#define BTRFS_IOC_RM_DEV _IOW(BTRFS_IOCTL_MAGIC, 11, \
216				   struct btrfs_ioctl_vol_args)
217#define BTRFS_IOC_BALANCE _IOW(BTRFS_IOCTL_MAGIC, 12, \
218				   struct btrfs_ioctl_vol_args)
219
220#define BTRFS_IOC_CLONE_RANGE _IOW(BTRFS_IOCTL_MAGIC, 13, \
221				  struct btrfs_ioctl_clone_range_args)
222
223#define BTRFS_IOC_SUBVOL_CREATE _IOW(BTRFS_IOCTL_MAGIC, 14, \
224				   struct btrfs_ioctl_vol_args)
225#define BTRFS_IOC_SNAP_DESTROY _IOW(BTRFS_IOCTL_MAGIC, 15, \
226				struct btrfs_ioctl_vol_args)
227#define BTRFS_IOC_DEFRAG_RANGE _IOW(BTRFS_IOCTL_MAGIC, 16, \
228				struct btrfs_ioctl_defrag_range_args)
229#define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \
230				   struct btrfs_ioctl_search_args)
231#define BTRFS_IOC_INO_LOOKUP _IOWR(BTRFS_IOCTL_MAGIC, 18, \
232				   struct btrfs_ioctl_ino_lookup_args)
233#define BTRFS_IOC_DEFAULT_SUBVOL _IOW(BTRFS_IOCTL_MAGIC, 19, u64)
234#define BTRFS_IOC_SPACE_INFO _IOWR(BTRFS_IOCTL_MAGIC, 20, \
235				    struct btrfs_ioctl_space_args)
236#define BTRFS_IOC_START_SYNC _IOR(BTRFS_IOCTL_MAGIC, 24, __u64)
237#define BTRFS_IOC_WAIT_SYNC  _IOW(BTRFS_IOCTL_MAGIC, 22, __u64)
238#define BTRFS_IOC_SNAP_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 23, \
239				   struct btrfs_ioctl_vol_args_v2)
240#define BTRFS_IOC_SUBVOL_GETFLAGS _IOW(BTRFS_IOCTL_MAGIC, 25, __u64)
241#define BTRFS_IOC_SUBVOL_SETFLAGS _IOW(BTRFS_IOCTL_MAGIC, 26, __u64)
242#define BTRFS_IOC_SCRUB _IOWR(BTRFS_IOCTL_MAGIC, 27, \
243			      struct btrfs_ioctl_scrub_args)
244#define BTRFS_IOC_SCRUB_CANCEL _IO(BTRFS_IOCTL_MAGIC, 28)
245#define BTRFS_IOC_SCRUB_PROGRESS _IOWR(BTRFS_IOCTL_MAGIC, 29, \
246				       struct btrfs_ioctl_scrub_args)
247#define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \
248				 struct btrfs_ioctl_dev_info_args)
249#define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \
250			       struct btrfs_ioctl_fs_info_args)
251#endif