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

From: Daniel Vacek

Date: Tue Sep 22 2026 - 10:44:25 EST


On Tue, 2 Jun 2026 at 05:28, Eric Biggers <ebiggers@xxxxxxxxxx> wrote:
> On Wed, May 13, 2026 at 10:52:46AM +0200, Daniel Vacek wrote:
> > From: Omar Sandoval <osandov@xxxxxxxxxxx>
> >
> > 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 <osandov@xxxxxxxxxxx>
> > Signed-off-by: Sweet Tea Dorminy <sweettea-kernel@xxxxxxxxxx>
> > Signed-off-by: Josef Bacik <josef@xxxxxxxxxxxxxx>
> > Signed-off-by: Daniel Vacek <neelx@xxxxxxxx>
> > ---
> >
> > v5: https://lore.kernel.org/linux-btrfs/ccbea52046c1dadbbef926bfc878cc23af952729.1706116485.git.josef@xxxxxxxxxxxxxx/
> > * 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.

That is true. These should also depend on BTRFS_EXPERIMENTAL. Will
amend. Thank you.

--nX

> - Eric