Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ext4: Add a uapi header for ext4 userspace APIs

Create a uapi header include/uapi/linux/ext4.h, move the ioctls and
associated data structures to the uapi header, and include it from
fs/ext4/ext4.h.

Signed-off-by: Josh Triplett <josh@joshtriplett.org>
Link: https://lore.kernel.org/r/680175260970d977d16b5cc7e7606483ec99eb63.1680402881.git.josh@joshtriplett.org
Signed-off-by: Theodore Ts'o <tytso@mit.edu>

authored by

Josh Triplett and committed by
Theodore Ts'o
519fe1ba 17809d3c

+119 -90
+1
MAINTAINERS
··· 7728 7728 F: Documentation/filesystems/ext4/ 7729 7729 F: fs/ext4/ 7730 7730 F: include/trace/events/ext4.h 7731 + F: include/uapi/linux/ext4.h 7731 7732 7732 7733 Extended Verification Module (EVM) 7733 7734 M: Mimi Zohar <zohar@linux.ibm.com>
+1 -90
fs/ext4/ext4.h
··· 40 40 #ifdef __KERNEL__ 41 41 #include <linux/compat.h> 42 42 #endif 43 + #include <uapi/linux/ext4.h> 43 44 44 45 #include <linux/fscrypt.h> 45 46 #include <linux/fsverity.h> ··· 592 591 CHECK_FLAG_VALUE(RESERVED); 593 592 } 594 593 595 - /* Used to pass group descriptor data when online resize is done */ 596 - struct ext4_new_group_input { 597 - __u32 group; /* Group number for this data */ 598 - __u64 block_bitmap; /* Absolute block number of block bitmap */ 599 - __u64 inode_bitmap; /* Absolute block number of inode bitmap */ 600 - __u64 inode_table; /* Absolute block number of inode table start */ 601 - __u32 blocks_count; /* Total number of blocks in this group */ 602 - __u16 reserved_blocks; /* Number of reserved blocks in this group */ 603 - __u16 unused; 604 - }; 605 - 606 594 #if defined(__KERNEL__) && defined(CONFIG_COMPAT) 607 595 struct compat_ext4_new_group_input { 608 596 u32 group; ··· 688 698 #define EXT4_FREE_BLOCKS_NOFREE_LAST_CLUSTER 0x0020 689 699 #define EXT4_FREE_BLOCKS_RERESERVE_CLUSTER 0x0040 690 700 691 - /* 692 - * ioctl commands 693 - */ 694 - #define EXT4_IOC_GETVERSION _IOR('f', 3, long) 695 - #define EXT4_IOC_SETVERSION _IOW('f', 4, long) 696 - #define EXT4_IOC_GETVERSION_OLD FS_IOC_GETVERSION 697 - #define EXT4_IOC_SETVERSION_OLD FS_IOC_SETVERSION 698 - #define EXT4_IOC_GETRSVSZ _IOR('f', 5, long) 699 - #define EXT4_IOC_SETRSVSZ _IOW('f', 6, long) 700 - #define EXT4_IOC_GROUP_EXTEND _IOW('f', 7, unsigned long) 701 - #define EXT4_IOC_GROUP_ADD _IOW('f', 8, struct ext4_new_group_input) 702 - #define EXT4_IOC_MIGRATE _IO('f', 9) 703 - /* note ioctl 10 reserved for an early version of the FIEMAP ioctl */ 704 - /* note ioctl 11 reserved for filesystem-independent FIEMAP ioctl */ 705 - #define EXT4_IOC_ALLOC_DA_BLKS _IO('f', 12) 706 - #define EXT4_IOC_MOVE_EXT _IOWR('f', 15, struct move_extent) 707 - #define EXT4_IOC_RESIZE_FS _IOW('f', 16, __u64) 708 - #define EXT4_IOC_SWAP_BOOT _IO('f', 17) 709 - #define EXT4_IOC_PRECACHE_EXTENTS _IO('f', 18) 710 - /* ioctl codes 19--39 are reserved for fscrypt */ 711 - #define EXT4_IOC_CLEAR_ES_CACHE _IO('f', 40) 712 - #define EXT4_IOC_GETSTATE _IOW('f', 41, __u32) 713 - #define EXT4_IOC_GET_ES_CACHE _IOWR('f', 42, struct fiemap) 714 - #define EXT4_IOC_CHECKPOINT _IOW('f', 43, __u32) 715 - #define EXT4_IOC_GETFSUUID _IOR('f', 44, struct fsuuid) 716 - #define EXT4_IOC_SETFSUUID _IOW('f', 44, struct fsuuid) 717 - 718 - #define EXT4_IOC_SHUTDOWN _IOR ('X', 125, __u32) 719 - 720 - /* 721 - * Flags for going down operation 722 - */ 723 - #define EXT4_GOING_FLAGS_DEFAULT 0x0 /* going down */ 724 - #define EXT4_GOING_FLAGS_LOGFLUSH 0x1 /* flush log but not data */ 725 - #define EXT4_GOING_FLAGS_NOLOGFLUSH 0x2 /* don't flush log nor data */ 726 - 727 - /* 728 - * Flags returned by EXT4_IOC_GETSTATE 729 - * 730 - * We only expose to userspace a subset of the state flags in 731 - * i_state_flags 732 - */ 733 - #define EXT4_STATE_FLAG_EXT_PRECACHED 0x00000001 734 - #define EXT4_STATE_FLAG_NEW 0x00000002 735 - #define EXT4_STATE_FLAG_NEWENTRY 0x00000004 736 - #define EXT4_STATE_FLAG_DA_ALLOC_CLOSE 0x00000008 737 - 738 - /* flags for ioctl EXT4_IOC_CHECKPOINT */ 739 - #define EXT4_IOC_CHECKPOINT_FLAG_DISCARD 0x1 740 - #define EXT4_IOC_CHECKPOINT_FLAG_ZEROOUT 0x2 741 - #define EXT4_IOC_CHECKPOINT_FLAG_DRY_RUN 0x4 742 - #define EXT4_IOC_CHECKPOINT_FLAG_VALID (EXT4_IOC_CHECKPOINT_FLAG_DISCARD | \ 743 - EXT4_IOC_CHECKPOINT_FLAG_ZEROOUT | \ 744 - EXT4_IOC_CHECKPOINT_FLAG_DRY_RUN) 745 - 746 - /* 747 - * Structure for EXT4_IOC_GETFSUUID/EXT4_IOC_SETFSUUID 748 - */ 749 - struct fsuuid { 750 - __u32 fsu_len; 751 - __u32 fsu_flags; 752 - __u8 fsu_uuid[]; 753 - }; 754 - 755 701 #if defined(__KERNEL__) && defined(CONFIG_COMPAT) 756 702 /* 757 703 * ioctl commands in 32 bit emulation ··· 701 775 #define EXT4_IOC32_GETVERSION_OLD FS_IOC32_GETVERSION 702 776 #define EXT4_IOC32_SETVERSION_OLD FS_IOC32_SETVERSION 703 777 #endif 704 - 705 - /* 706 - * Returned by EXT4_IOC_GET_ES_CACHE as an additional possible flag. 707 - * It indicates that the entry in extent status cache is for a hole. 708 - */ 709 - #define EXT4_FIEMAP_EXTENT_HOLE 0x08000000 710 778 711 779 /* Max physical block we can address w/o extents */ 712 780 #define EXT4_MAX_BLOCK_FILE_PHYS 0xFFFFFFFF ··· 770 850 __le32 i_crtime_extra; /* extra FileCreationtime (nsec << 2 | epoch) */ 771 851 __le32 i_version_hi; /* high 32 bits for 64-bit version */ 772 852 __le32 i_projid; /* Project ID */ 773 - }; 774 - 775 - struct move_extent { 776 - __u32 reserved; /* should be zero */ 777 - __u32 donor_fd; /* donor file descriptor */ 778 - __u64 orig_start; /* logical start offset in block for orig */ 779 - __u64 donor_start; /* logical start offset in block for donor */ 780 - __u64 len; /* block length to be moved */ 781 - __u64 moved_len; /* moved block length */ 782 853 }; 783 854 784 855 #define EXT4_EPOCH_BITS 2
+117
include/uapi/linux/ext4.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 + 3 + #ifndef _UAPI_LINUX_EXT4_H 4 + #define _UAPI_LINUX_EXT4_H 5 + #include <linux/fiemap.h> 6 + #include <linux/fs.h> 7 + #include <linux/ioctl.h> 8 + #include <linux/types.h> 9 + 10 + /* 11 + * ext4-specific ioctl commands 12 + */ 13 + #define EXT4_IOC_GETVERSION _IOR('f', 3, long) 14 + #define EXT4_IOC_SETVERSION _IOW('f', 4, long) 15 + #define EXT4_IOC_GETVERSION_OLD FS_IOC_GETVERSION 16 + #define EXT4_IOC_SETVERSION_OLD FS_IOC_SETVERSION 17 + #define EXT4_IOC_GETRSVSZ _IOR('f', 5, long) 18 + #define EXT4_IOC_SETRSVSZ _IOW('f', 6, long) 19 + #define EXT4_IOC_GROUP_EXTEND _IOW('f', 7, unsigned long) 20 + #define EXT4_IOC_GROUP_ADD _IOW('f', 8, struct ext4_new_group_input) 21 + #define EXT4_IOC_MIGRATE _IO('f', 9) 22 + /* note ioctl 10 reserved for an early version of the FIEMAP ioctl */ 23 + /* note ioctl 11 reserved for filesystem-independent FIEMAP ioctl */ 24 + #define EXT4_IOC_ALLOC_DA_BLKS _IO('f', 12) 25 + #define EXT4_IOC_MOVE_EXT _IOWR('f', 15, struct move_extent) 26 + #define EXT4_IOC_RESIZE_FS _IOW('f', 16, __u64) 27 + #define EXT4_IOC_SWAP_BOOT _IO('f', 17) 28 + #define EXT4_IOC_PRECACHE_EXTENTS _IO('f', 18) 29 + /* ioctl codes 19--39 are reserved for fscrypt */ 30 + #define EXT4_IOC_CLEAR_ES_CACHE _IO('f', 40) 31 + #define EXT4_IOC_GETSTATE _IOW('f', 41, __u32) 32 + #define EXT4_IOC_GET_ES_CACHE _IOWR('f', 42, struct fiemap) 33 + #define EXT4_IOC_CHECKPOINT _IOW('f', 43, __u32) 34 + #define EXT4_IOC_GETFSUUID _IOR('f', 44, struct fsuuid) 35 + #define EXT4_IOC_SETFSUUID _IOW('f', 44, struct fsuuid) 36 + 37 + #define EXT4_IOC_SHUTDOWN _IOR('X', 125, __u32) 38 + 39 + /* 40 + * ioctl commands in 32 bit emulation 41 + */ 42 + #define EXT4_IOC32_GETVERSION _IOR('f', 3, int) 43 + #define EXT4_IOC32_SETVERSION _IOW('f', 4, int) 44 + #define EXT4_IOC32_GETRSVSZ _IOR('f', 5, int) 45 + #define EXT4_IOC32_SETRSVSZ _IOW('f', 6, int) 46 + #define EXT4_IOC32_GROUP_EXTEND _IOW('f', 7, unsigned int) 47 + #define EXT4_IOC32_GROUP_ADD _IOW('f', 8, struct compat_ext4_new_group_input) 48 + #define EXT4_IOC32_GETVERSION_OLD FS_IOC32_GETVERSION 49 + #define EXT4_IOC32_SETVERSION_OLD FS_IOC32_SETVERSION 50 + 51 + /* 52 + * Flags returned by EXT4_IOC_GETSTATE 53 + * 54 + * We only expose to userspace a subset of the state flags in 55 + * i_state_flags 56 + */ 57 + #define EXT4_STATE_FLAG_EXT_PRECACHED 0x00000001 58 + #define EXT4_STATE_FLAG_NEW 0x00000002 59 + #define EXT4_STATE_FLAG_NEWENTRY 0x00000004 60 + #define EXT4_STATE_FLAG_DA_ALLOC_CLOSE 0x00000008 61 + 62 + /* 63 + * Flags for ioctl EXT4_IOC_CHECKPOINT 64 + */ 65 + #define EXT4_IOC_CHECKPOINT_FLAG_DISCARD 0x1 66 + #define EXT4_IOC_CHECKPOINT_FLAG_ZEROOUT 0x2 67 + #define EXT4_IOC_CHECKPOINT_FLAG_DRY_RUN 0x4 68 + #define EXT4_IOC_CHECKPOINT_FLAG_VALID (EXT4_IOC_CHECKPOINT_FLAG_DISCARD | \ 69 + EXT4_IOC_CHECKPOINT_FLAG_ZEROOUT | \ 70 + EXT4_IOC_CHECKPOINT_FLAG_DRY_RUN) 71 + 72 + /* 73 + * Structure for EXT4_IOC_GETFSUUID/EXT4_IOC_SETFSUUID 74 + */ 75 + struct fsuuid { 76 + __u32 fsu_len; 77 + __u32 fsu_flags; 78 + __u8 fsu_uuid[]; 79 + }; 80 + 81 + /* 82 + * Structure for EXT4_IOC_MOVE_EXT 83 + */ 84 + struct move_extent { 85 + __u32 reserved; /* should be zero */ 86 + __u32 donor_fd; /* donor file descriptor */ 87 + __u64 orig_start; /* logical start offset in block for orig */ 88 + __u64 donor_start; /* logical start offset in block for donor */ 89 + __u64 len; /* block length to be moved */ 90 + __u64 moved_len; /* moved block length */ 91 + }; 92 + 93 + /* 94 + * Flags used by EXT4_IOC_SHUTDOWN 95 + */ 96 + #define EXT4_GOING_FLAGS_DEFAULT 0x0 /* going down */ 97 + #define EXT4_GOING_FLAGS_LOGFLUSH 0x1 /* flush log but not data */ 98 + #define EXT4_GOING_FLAGS_NOLOGFLUSH 0x2 /* don't flush log nor data */ 99 + 100 + /* Used to pass group descriptor data when online resize is done */ 101 + struct ext4_new_group_input { 102 + __u32 group; /* Group number for this data */ 103 + __u64 block_bitmap; /* Absolute block number of block bitmap */ 104 + __u64 inode_bitmap; /* Absolute block number of inode bitmap */ 105 + __u64 inode_table; /* Absolute block number of inode table start */ 106 + __u32 blocks_count; /* Total number of blocks in this group */ 107 + __u16 reserved_blocks; /* Number of reserved blocks in this group */ 108 + __u16 unused; 109 + }; 110 + 111 + /* 112 + * Returned by EXT4_IOC_GET_ES_CACHE as an additional possible flag. 113 + * It indicates that the entry in extent status cache is for a hole. 114 + */ 115 + #define EXT4_FIEMAP_EXTENT_HOLE 0x08000000 116 + 117 + #endif /* _UAPI_LINUX_EXT4_H */