1271 lines · 39.0 KB · C
RawDownload
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note *//* * Copyright (C) 2007 Oracle.  All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License v2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 021110-1307, USA. */ #ifndef _UAPI_LINUX_BTRFS_H#define _UAPI_LINUX_BTRFS_H #ifdef __cplusplusextern "C" {#endif #include <linux/types.h>#include <linux/ioctl.h>#include <linux/fs.h> #define BTRFS_IOCTL_MAGIC 0x94#define BTRFS_VOL_NAME_MAX 255#define BTRFS_LABEL_SIZE 256 /* this should be 4k */#define BTRFS_PATH_NAME_MAX 4087struct btrfs_ioctl_vol_args {	__s64 fd;	char name[BTRFS_PATH_NAME_MAX + 1];}; #define BTRFS_DEVICE_PATH_NAME_MAX	1024#define BTRFS_SUBVOL_NAME_MAX 		4039 #ifndef __KERNEL__/* Deprecated since 5.7 */# define BTRFS_SUBVOL_CREATE_ASYNC	(1ULL << 0)#endif#define BTRFS_SUBVOL_RDONLY		(1ULL << 1)#define BTRFS_SUBVOL_QGROUP_INHERIT	(1ULL << 2) #define BTRFS_DEVICE_SPEC_BY_ID		(1ULL << 3) #define BTRFS_SUBVOL_SPEC_BY_ID	(1ULL << 4) #define BTRFS_VOL_ARG_V2_FLAGS_SUPPORTED		\			(BTRFS_SUBVOL_RDONLY |		\			BTRFS_SUBVOL_QGROUP_INHERIT |	\			BTRFS_DEVICE_SPEC_BY_ID |	\			BTRFS_SUBVOL_SPEC_BY_ID) #define BTRFS_FSID_SIZE 16#define BTRFS_UUID_SIZE 16#define BTRFS_UUID_UNPARSED_SIZE	37 /* * flags definition for qgroup limits * * Used by: * struct btrfs_qgroup_limit.flags * struct btrfs_qgroup_limit_item.flags */#define BTRFS_QGROUP_LIMIT_MAX_RFER	(1ULL << 0)#define BTRFS_QGROUP_LIMIT_MAX_EXCL	(1ULL << 1)#define BTRFS_QGROUP_LIMIT_RSV_RFER	(1ULL << 2)#define BTRFS_QGROUP_LIMIT_RSV_EXCL	(1ULL << 3)#define BTRFS_QGROUP_LIMIT_RFER_CMPR	(1ULL << 4)#define BTRFS_QGROUP_LIMIT_EXCL_CMPR	(1ULL << 5) struct btrfs_qgroup_limit {	__u64	flags;	__u64	max_rfer;	__u64	max_excl;	__u64	rsv_rfer;	__u64	rsv_excl;}; /* * flags definition for qgroup inheritance * * Used by: * struct btrfs_qgroup_inherit.flags */#define BTRFS_QGROUP_INHERIT_SET_LIMITS	(1ULL << 0)#define BTRFS_QGROUP_INHERIT_FLAGS_SUPP (BTRFS_QGROUP_INHERIT_SET_LIMITS) struct btrfs_qgroup_inherit {	__u64	flags;	__u64	num_qgroups;	__u64	num_ref_copies;	__u64	num_excl_copies;	struct btrfs_qgroup_limit lim;	__u64	qgroups[];}; struct btrfs_ioctl_qgroup_limit_args {	__u64	qgroupid;	struct btrfs_qgroup_limit lim;}; /* * Arguments for specification of subvolumes or devices, supporting by-name or * by-id and flags * * The set of supported flags depends on the ioctl * * BTRFS_SUBVOL_RDONLY is also provided/consumed by the following ioctls: * - BTRFS_IOC_SUBVOL_GETFLAGS * - BTRFS_IOC_SUBVOL_SETFLAGS */ /* Supported flags for BTRFS_IOC_RM_DEV_V2 */#define BTRFS_DEVICE_REMOVE_ARGS_MASK					\	(BTRFS_DEVICE_SPEC_BY_ID) /* Supported flags for BTRFS_IOC_SNAP_CREATE_V2 and BTRFS_IOC_SUBVOL_CREATE_V2 */#define BTRFS_SUBVOL_CREATE_ARGS_MASK					\	 (BTRFS_SUBVOL_RDONLY |						\	 BTRFS_SUBVOL_QGROUP_INHERIT) /* Supported flags for BTRFS_IOC_SNAP_DESTROY_V2 */#define BTRFS_SUBVOL_DELETE_ARGS_MASK					\	(BTRFS_SUBVOL_SPEC_BY_ID) struct btrfs_ioctl_vol_args_v2 {	__s64 fd;	__u64 transid;	__u64 flags;	union {		struct {			__u64 size;			struct btrfs_qgroup_inherit __user *qgroup_inherit;		};		__u64 unused[4];	};	union {		char name[BTRFS_SUBVOL_NAME_MAX + 1];		__u64 devid;		__u64 subvolid;	};}; /* * structure to report errors and progress to userspace, either as a * result of a finished scrub, a canceled scrub or a progress inquiry */struct btrfs_scrub_progress {	__u64 data_extents_scrubbed;	/* # of data extents scrubbed */	__u64 tree_extents_scrubbed;	/* # of tree extents scrubbed */	__u64 data_bytes_scrubbed;	/* # of data bytes scrubbed */	__u64 tree_bytes_scrubbed;	/* # of tree bytes scrubbed */	__u64 read_errors;		/* # of read errors encountered (EIO) */	__u64 csum_errors;		/* # of failed csum checks */	__u64 verify_errors;		/* # of occurrences, where the metadata					 * of a tree block did not match the					 * expected values, like generation or					 * logical */	__u64 no_csum;			/* # of 4k data block for which no csum					 * is present, probably the result of					 * data written with nodatasum */	__u64 csum_discards;		/* # of csum for which no data was found					 * in the extent tree. */	__u64 super_errors;		/* # of bad super blocks encountered */	__u64 malloc_errors;		/* # of internal kmalloc errors. These					 * will likely cause an incomplete					 * scrub */	__u64 uncorrectable_errors;	/* # of errors where either no intact					 * copy was found or the writeback					 * failed */	__u64 corrected_errors;		/* # of errors corrected */	__u64 last_physical;		/* last physical address scrubbed. In					 * case a scrub was aborted, this can					 * be used to restart the scrub */	__u64 unverified_errors;	/* # of occurrences where a read for a					 * full (64k) bio failed, but the re-					 * check succeeded for each 4k piece.					 * Intermittent error. */}; #define BTRFS_SCRUB_READONLY	1#define BTRFS_SCRUB_SUPPORTED_FLAGS	(BTRFS_SCRUB_READONLY)struct btrfs_ioctl_scrub_args {	__u64 devid;				/* in */	__u64 start;				/* in */	__u64 end;				/* in */	__u64 flags;				/* in */	struct btrfs_scrub_progress progress;	/* out */	/* pad to 1k */	__u64 unused[(1024-32-sizeof(struct btrfs_scrub_progress))/8];}; #define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS	0#define BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID	1struct btrfs_ioctl_dev_replace_start_params {	__u64 srcdevid;	/* in, if 0, use srcdev_name instead */	__u64 cont_reading_from_srcdev_mode;	/* in, see #define						 * above */	__u8 srcdev_name[BTRFS_DEVICE_PATH_NAME_MAX + 1];	/* in */	__u8 tgtdev_name[BTRFS_DEVICE_PATH_NAME_MAX + 1];	/* in */}; #define BTRFS_IOCTL_DEV_REPLACE_STATE_NEVER_STARTED	0#define BTRFS_IOCTL_DEV_REPLACE_STATE_STARTED		1#define BTRFS_IOCTL_DEV_REPLACE_STATE_FINISHED		2#define BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED		3#define BTRFS_IOCTL_DEV_REPLACE_STATE_SUSPENDED		4struct btrfs_ioctl_dev_replace_status_params {	__u64 replace_state;	/* out, see #define above */	__u64 progress_1000;	/* out, 0 <= x <= 1000 */	__u64 time_started;	/* out, seconds since 1-Jan-1970 */	__u64 time_stopped;	/* out, seconds since 1-Jan-1970 */	__u64 num_write_errors;	/* out */	__u64 num_uncorrectable_read_errors;	/* out */}; #define BTRFS_IOCTL_DEV_REPLACE_CMD_START			0#define BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS			1#define BTRFS_IOCTL_DEV_REPLACE_CMD_CANCEL			2#define BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR			0#define BTRFS_IOCTL_DEV_REPLACE_RESULT_NOT_STARTED		1#define BTRFS_IOCTL_DEV_REPLACE_RESULT_ALREADY_STARTED		2#define BTRFS_IOCTL_DEV_REPLACE_RESULT_SCRUB_INPROGRESS		3struct btrfs_ioctl_dev_replace_args {	__u64 cmd;	/* in */	__u64 result;	/* out */ 	union {		struct btrfs_ioctl_dev_replace_start_params start;		struct btrfs_ioctl_dev_replace_status_params status;	};	/* in/out */ 	__u64 spare[64];}; struct btrfs_ioctl_dev_info_args {	__u64 devid;				/* in/out */	__u8 uuid[BTRFS_UUID_SIZE];		/* in/out */	__u64 bytes_used;			/* out */	__u64 total_bytes;			/* out */	/*	 * Optional, out.	 *	 * Showing the fsid of the device, allowing user space to check if this	 * device is a seeding one.	 *	 * Introduced in v6.3, thus user space still needs to check if kernel	 * changed this value.  Older kernel will not touch the values here.	 */	__u8 fsid[BTRFS_UUID_SIZE];	__u64 unused[377];			/* pad to 4k */	__u8 path[BTRFS_DEVICE_PATH_NAME_MAX];	/* out */}; /* * Retrieve information about the filesystem */ /* Request information about checksum type and size */#define BTRFS_FS_INFO_FLAG_CSUM_INFO			(1 << 0) /* Request information about filesystem generation */#define BTRFS_FS_INFO_FLAG_GENERATION			(1 << 1)/* Request information about filesystem metadata UUID */#define BTRFS_FS_INFO_FLAG_METADATA_UUID		(1 << 2) struct btrfs_ioctl_fs_info_args {	__u64 max_id;				/* out */	__u64 num_devices;			/* out */	__u8 fsid[BTRFS_FSID_SIZE];		/* out */	__u32 nodesize;				/* out */	__u32 sectorsize;			/* out */	__u32 clone_alignment;			/* out */	/* See BTRFS_FS_INFO_FLAG_* */	__u16 csum_type;			/* out */	__u16 csum_size;			/* out */	__u64 flags;				/* in/out */	__u64 generation;			/* out */	__u8 metadata_uuid[BTRFS_FSID_SIZE];	/* out */	__u8 reserved[944];			/* pad to 1k */}; /* * feature flags * * Used by: * struct btrfs_ioctl_feature_flags */#define BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE		(1ULL << 0)/* * Older kernels (< 4.9) on big-endian systems produced broken free space tree * bitmaps, and btrfs-progs also used to corrupt the free space tree (versions * < 4.7.3).  If this bit is clear, then the free space tree cannot be trusted. * btrfs-progs can also intentionally clear this bit to ask the kernel to * rebuild the free space tree, however this might not work on older kernels * that do not know about this bit. If not sure, clear the cache manually on * first mount when booting older kernel versions. */#define BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID	(1ULL << 1)#define BTRFS_FEATURE_COMPAT_RO_VERITY			(1ULL << 2) /* * Put all block group items into a dedicated block group tree, greatly * reducing mount time for large filesystem due to better locality. */#define BTRFS_FEATURE_COMPAT_RO_BLOCK_GROUP_TREE	(1ULL << 3) #define BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF	(1ULL << 0)#define BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL	(1ULL << 1)#define BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS	(1ULL << 2)#define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO	(1ULL << 3)#define BTRFS_FEATURE_INCOMPAT_COMPRESS_ZSTD	(1ULL << 4) /* * older kernels tried to do bigger metadata blocks, but the * code was pretty buggy.  Lets not let them try anymore. */#define BTRFS_FEATURE_INCOMPAT_BIG_METADATA	(1ULL << 5) #define BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF	(1ULL << 6)#define BTRFS_FEATURE_INCOMPAT_RAID56		(1ULL << 7)#define BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA	(1ULL << 8)#define BTRFS_FEATURE_INCOMPAT_NO_HOLES		(1ULL << 9)#define BTRFS_FEATURE_INCOMPAT_METADATA_UUID	(1ULL << 10)#define BTRFS_FEATURE_INCOMPAT_RAID1C34		(1ULL << 11)#define BTRFS_FEATURE_INCOMPAT_ZONED		(1ULL << 12)#define BTRFS_FEATURE_INCOMPAT_EXTENT_TREE_V2	(1ULL << 13)#define BTRFS_FEATURE_INCOMPAT_RAID_STRIPE_TREE	(1ULL << 14)#define BTRFS_FEATURE_INCOMPAT_SIMPLE_QUOTA	(1ULL << 16)#define BTRFS_FEATURE_INCOMPAT_REMAP_TREE	(1ULL << 17) struct btrfs_ioctl_feature_flags {	__u64 compat_flags;	__u64 compat_ro_flags;	__u64 incompat_flags;}; /* balance control ioctl modes */#define BTRFS_BALANCE_CTL_PAUSE		1#define BTRFS_BALANCE_CTL_CANCEL	2 /* * this is packed, because it should be exactly the same as its disk * byte order counterpart (struct btrfs_disk_balance_args) */struct btrfs_balance_args {	__u64 profiles; 	/*	 * usage filter	 * BTRFS_BALANCE_ARGS_USAGE with a single value means '0..N'	 * BTRFS_BALANCE_ARGS_USAGE_RANGE - range syntax, min..max	 */	union {		__u64 usage;		struct {			__u32 usage_min;			__u32 usage_max;		};	};	__u64 devid;	__u64 pstart;	__u64 pend;	__u64 vstart;	__u64 vend; 	__u64 target; 	__u64 flags; 	/*	 * BTRFS_BALANCE_ARGS_LIMIT with value 'limit'	 * BTRFS_BALANCE_ARGS_LIMIT_RANGE - the extend version can use minimum	 * and maximum	 */	union {		__u64 limit;		/* limit number of processed chunks */		struct {			__u32 limit_min;			__u32 limit_max;		};	}; 	/*	 * Process chunks that cross stripes_min..stripes_max devices,	 * BTRFS_BALANCE_ARGS_STRIPES_RANGE	 */	__u32 stripes_min;	__u32 stripes_max; 	__u64 unused[6];} __attribute__ ((__packed__)); /* report balance progress to userspace */struct btrfs_balance_progress {	__u64 expected;		/* estimated # of chunks that will be				 * relocated to fulfill the request */	__u64 considered;	/* # of chunks we have considered so far */	__u64 completed;	/* # of chunks relocated so far */}; /* * flags definition for balance * * Restriper's general type filter * * Used by: * btrfs_ioctl_balance_args.flags * btrfs_balance_control.flags (internal) */#define BTRFS_BALANCE_DATA		(1ULL << 0)#define BTRFS_BALANCE_SYSTEM		(1ULL << 1)#define BTRFS_BALANCE_METADATA		(1ULL << 2) #define BTRFS_BALANCE_TYPE_MASK		(BTRFS_BALANCE_DATA |	    \					 BTRFS_BALANCE_SYSTEM |	    \					 BTRFS_BALANCE_METADATA) #define BTRFS_BALANCE_FORCE		(1ULL << 3)#define BTRFS_BALANCE_RESUME		(1ULL << 4) /* * flags definitions for per-type balance args * * Balance filters * * Used by: * struct btrfs_balance_args */#define BTRFS_BALANCE_ARGS_PROFILES	(1ULL << 0)#define BTRFS_BALANCE_ARGS_USAGE	(1ULL << 1)#define BTRFS_BALANCE_ARGS_DEVID	(1ULL << 2)#define BTRFS_BALANCE_ARGS_DRANGE	(1ULL << 3)#define BTRFS_BALANCE_ARGS_VRANGE	(1ULL << 4)#define BTRFS_BALANCE_ARGS_LIMIT	(1ULL << 5)#define BTRFS_BALANCE_ARGS_LIMIT_RANGE	(1ULL << 6)#define BTRFS_BALANCE_ARGS_STRIPES_RANGE (1ULL << 7)#define BTRFS_BALANCE_ARGS_USAGE_RANGE	(1ULL << 10) #define BTRFS_BALANCE_ARGS_MASK			\	(BTRFS_BALANCE_ARGS_PROFILES |		\	 BTRFS_BALANCE_ARGS_USAGE |		\	 BTRFS_BALANCE_ARGS_DEVID | 		\	 BTRFS_BALANCE_ARGS_DRANGE |		\	 BTRFS_BALANCE_ARGS_VRANGE |		\	 BTRFS_BALANCE_ARGS_LIMIT |		\	 BTRFS_BALANCE_ARGS_LIMIT_RANGE |	\	 BTRFS_BALANCE_ARGS_STRIPES_RANGE |	\	 BTRFS_BALANCE_ARGS_USAGE_RANGE) /* * Profile changing flags.  When SOFT is set we won't relocate chunk if * it already has the target profile (even though it may be * half-filled). */#define BTRFS_BALANCE_ARGS_CONVERT	(1ULL << 8)#define BTRFS_BALANCE_ARGS_SOFT		(1ULL << 9)  /* * flags definition for balance state * * Used by: * struct btrfs_ioctl_balance_args.state */#define BTRFS_BALANCE_STATE_RUNNING	(1ULL << 0)#define BTRFS_BALANCE_STATE_PAUSE_REQ	(1ULL << 1)#define BTRFS_BALANCE_STATE_CANCEL_REQ	(1ULL << 2) struct btrfs_ioctl_balance_args {	__u64 flags;				/* in/out */	__u64 state;				/* out */ 	struct btrfs_balance_args data;		/* in/out */	struct btrfs_balance_args meta;		/* in/out */	struct btrfs_balance_args sys;		/* in/out */ 	struct btrfs_balance_progress stat;	/* out */ 	__u64 unused[72];			/* pad to 1k */}; #define BTRFS_INO_LOOKUP_PATH_MAX 4080struct btrfs_ioctl_ino_lookup_args {	__u64 treeid;	__u64 objectid;	char name[BTRFS_INO_LOOKUP_PATH_MAX];}; #define BTRFS_INO_LOOKUP_USER_PATH_MAX (4080 - BTRFS_VOL_NAME_MAX - 1)struct btrfs_ioctl_ino_lookup_user_args {

Lines 1–500 of 1271.