Re: [PATCH v7 12/43] btrfs: add new FEATURE_INCOMPAT_ENCRYPT flag

Eric Biggers <[email protected]> Mon, 1 Jun 2026 20:27:10 -0700
Newsgroups org.kernel.vger.linux-fscrypt,org.kernel.vger.linux-block,org.kernel.vger.linux-btrfs,org.kernel.vger.linux-kernel
Message-ID <20260602032710.GI2295@sol>
On Wed, May 13, 2026 at 10:52:46AM +0200, Daniel Vacek wrote:
> From: Omar Sandoval <[email protected]>
> 
> As encrypted files will be incompatible with older filesystem versions,
> new filesystems should be created with an incompat flag for fscrypt,
> which will gate access to the encryption ioctls.
> 
> Signed-off-by: Omar Sandoval <[email protected]>
> Signed-off-by: Sweet Tea Dorminy <[email protected]>
> Signed-off-by: Josef Bacik <[email protected]>
> Signed-off-by: Daniel Vacek <[email protected]>
> ---
> 
> v5: https://lore.kernel.org/linux-btrfs/ccbea52046c1dadbbef926bfc878cc23af952729.1706116485.git.josef@toxicpanda.com/
>  * No changes since.
> ---
>  fs/btrfs/fs.h              | 3 ++-
>  fs/btrfs/super.c           | 5 +++++
>  fs/btrfs/sysfs.c           | 6 ++++++
>  include/uapi/linux/btrfs.h | 1 +
>  4 files changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/btrfs/fs.h b/fs/btrfs/fs.h
> index a4758d94b32e..dbdb73722c14 100644
> --- a/fs/btrfs/fs.h
> +++ b/fs/btrfs/fs.h
> @@ -322,7 +322,8 @@ enum {
>  	(BTRFS_FEATURE_INCOMPAT_SUPP_STABLE |	\
>  	 BTRFS_FEATURE_INCOMPAT_RAID_STRIPE_TREE | \
>  	 BTRFS_FEATURE_INCOMPAT_EXTENT_TREE_V2 | \
> -	 BTRFS_FEATURE_INCOMPAT_REMAP_TREE)
> +	 BTRFS_FEATURE_INCOMPAT_REMAP_TREE |	\
> +	 BTRFS_FEATURE_INCOMPAT_ENCRYPT)
>  
>  #else
>  
> diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
> index efaa0788c1fc..84df97363611 100644
> --- a/fs/btrfs/super.c
> +++ b/fs/btrfs/super.c
> @@ -2563,6 +2563,11 @@ static int __init btrfs_print_mod_info(void)
>  			", fsverity=yes"
>  #else
>  			", fsverity=no"
> +#endif
> +#ifdef CONFIG_FS_ENCRYPTION
> +			", fscrypt=yes"
> +#else
> +			", fscrypt=no"
>  #endif
>  			;
>  
> diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c
> index 0d14570c8bc2..3fe57843f902 100644
> --- a/fs/btrfs/sysfs.c
> +++ b/fs/btrfs/sysfs.c
> @@ -305,6 +305,9 @@ BTRFS_FEAT_ATTR_INCOMPAT(remap_tree, REMAP_TREE);
>  #ifdef CONFIG_FS_VERITY
>  BTRFS_FEAT_ATTR_COMPAT_RO(verity, VERITY);
>  #endif
> +#ifdef CONFIG_FS_ENCRYPTION
> +BTRFS_FEAT_ATTR_INCOMPAT(encryption, ENCRYPT);
> +#endif /* CONFIG_FS_ENCRYPTION */
>  
>  /*
>   * Features which depend on feature bits and may differ between each fs.
> @@ -338,6 +341,9 @@ static struct attribute *btrfs_supported_feature_attrs[] = {
>  #ifdef CONFIG_FS_VERITY
>  	BTRFS_FEAT_ATTR_PTR(verity),
>  #endif
> +#ifdef CONFIG_FS_ENCRYPTION
> +	BTRFS_FEAT_ATTR_PTR(encryption),
> +#endif /* CONFIG_FS_ENCRYPTION */
>  	NULL
>  };
>  
> diff --git a/include/uapi/linux/btrfs.h b/include/uapi/linux/btrfs.h
> index 9165154a274d..2f6a46e5f4ce 100644
> --- a/include/uapi/linux/btrfs.h
> +++ b/include/uapi/linux/btrfs.h
> @@ -335,6 +335,7 @@ struct btrfs_ioctl_fs_info_args {
>  #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_ENCRYPT		(1ULL << 15)
>  #define BTRFS_FEATURE_INCOMPAT_SIMPLE_QUOTA	(1ULL << 16)
>  #define BTRFS_FEATURE_INCOMPAT_REMAP_TREE	(1ULL << 17)

There seems to be an inconsistency where btrfs's fscrypt support depends
on CONFIG_BTRFS_EXPERIMENTAL, but the support is advertised in sysfs
regardless.

- Eric