From: Christian Brauner <brauner@kernel.org>
To: Christoph Hellwig <hch@lst.de>, Chris Mason <clm@fb.com>,
Josef Bacik <josef@toxicpanda.com>,
David Sterba <dsterba@suse.com>,
Al Viro <viro@zeniv.linux.org.uk>
Cc: linux-btrfs@vger.kernel.org, linux-fsdevel@vger.kernel.org,
Christian Brauner <christian.brauner@ubuntu.com>
Subject: [PATCH 00/24] btrfs: support idmapped mounts
Date: Tue, 13 Jul 2021 13:13:20 +0200 [thread overview]
Message-ID: <20210713111344.1149376-1-brauner@kernel.org> (raw)
From: Christian Brauner <christian.brauner@ubuntu.com>
Hey everyone,
This series enables the creation of idmapped mounts on btrfs. On the list of
filesystems btrfs was pretty high-up and requested quite often from userspace
(cf. [1]). This series requires just a few changes to the vfs for specific
lookup helpers that btrfs relies on to perform permission checking when looking
up an inode. The changes are required to port some other filesystem as well.
The conversion of the necessary btrfs internals was fairly straightforward. No
invasive changes were needed. I've decided to split up the patchset into very
small individual patches. This hopefully makes the series more readable and
fairly easy to review. The overall changeset is quite small.
All non-filesystem wide ioctls that peform permission checking based on inodes
can be supported on idmapped mounts. There are really just a few restrictions.
This should really only affect the deletion of subvolumes by subvolume id which
can be used to delete any subvolume in the filesystem even though the caller
might not even be able to see the subvolume under their mount. Other than that
behavior on idmapped and non-idmapped mounts is identical for all enabled
ioctls.
The changeset has an associated new testsuite specific to btrfs. The
core vfs operations that btrfs implements are covered by the generic
idmapped mount testsuite. For the ioctls a new testsuite was added. It
is sent alongside this patchset for ease of review but will very likely
be merged independent of it.
All patches are based on v5.14-rc1.
The series can be pulled from:
https://git.kernel.org/brauner/h/fs.idmapped.btrfs
https://github.com/brauner/linux/tree/fs.idmapped.btrfs
The xfstests can be pulled from:
https://git.kernel.org/brauner/xfstests-dev/h/fs.idmapped.btrfs
https://github.com/brauner/xfstests/tree/fs.idmapped.btrfs
Note, the new btrfs xfstests patch is on top of a branch of mine
containing a few more preliminary patches. So if you want to run the
tests, please simply pull the branch and build from there. It's based on
latest xfstests master.
The series has been tested with xfstests including the newly added btrfs
specific test. All tests pass.
There were three unrelated failures that I observed: btrfs/219,
btrfs/2020 and btrfs/235. All three also fail on earlier kernels
without the patch series applied.
Thanks!
Christian
[1]: https://github.com/systemd/systemd/pull/19438#discussion_r622807165
Christian Brauner (23):
namei: handle mappings in lookup_one_len()
namei: handle mappings in lookup_one_len_unlocked()
namei: handle mappings in lookup_positive_unlocked()
namei: handle mappings in try_lookup_one_len()
btrfs/inode: handle idmaps in btrfs_new_inode()
btrfs/inode: allow idmapped rename iop
btrfs/inode: allow idmapped getattr iop
btrfs/inode: allow idmapped mknod iop
btrfs/inode: allow idmapped create iop
btrfs/inode: allow idmapped mkdir iop
btrfs/inode: allow idmapped symlink iop
btrfs/inode: allow idmapped tmpfile iop
btrfs/inode: allow idmapped setattr iop
btrfs/inode: allow idmapped permission iop
btrfs/ioctl: check whether fs{g,u}id are mapped during subvolume
creation
btrfs/inode: allow idmapped BTRFS_IOC_{SNAP,SUBVOL}_CREATE{_V2} ioctl
btrfs/ioctl: allow idmapped BTRFS_IOC_SNAP_DESTROY{_V2} ioctl
btrfs/ioctl: relax restrictions for BTRFS_IOC_SNAP_DESTROY_V2 with
subvolids
btrfs/ioctl: allow idmapped BTRFS_IOC_SET_RECEIVED_SUBVOL{_32} ioctl
btrfs/ioctl: allow idmapped BTRFS_IOC_SUBVOL_SETFLAGS ioctl
btrfs/ioctl: allow idmapped BTRFS_IOC_INO_LOOKUP_USER ioctl
btrfs/acl: handle idmapped mounts
btrfs/super: allow idmapped btrfs
arch/s390/hypfs/inode.c | 2 +-
drivers/android/binderfs.c | 4 +-
drivers/infiniband/hw/qib/qib_fs.c | 5 +-
fs/afs/dir.c | 2 +-
fs/afs/dir_silly.c | 2 +-
fs/afs/dynroot.c | 6 +-
fs/binfmt_misc.c | 2 +-
fs/btrfs/acl.c | 13 +++--
fs/btrfs/ctree.h | 3 +-
fs/btrfs/inode.c | 62 +++++++++++---------
fs/btrfs/ioctl.c | 94 ++++++++++++++++++++----------
fs/btrfs/super.c | 2 +-
fs/cachefiles/namei.c | 9 +--
fs/cifs/cifsfs.c | 3 +-
fs/debugfs/inode.c | 9 ++-
fs/ecryptfs/inode.c | 3 +-
fs/exportfs/expfs.c | 6 +-
fs/kernfs/mount.c | 4 +-
fs/namei.c | 32 ++++++----
fs/nfs/unlink.c | 3 +-
fs/nfsd/nfs3xdr.c | 3 +-
fs/nfsd/nfs4recover.c | 7 ++-
fs/nfsd/nfs4xdr.c | 3 +-
fs/nfsd/nfsproc.c | 3 +-
fs/nfsd/vfs.c | 19 +++---
fs/overlayfs/copy_up.c | 10 ++--
fs/overlayfs/dir.c | 23 ++++----
fs/overlayfs/export.c | 3 +-
fs/overlayfs/namei.c | 13 +++--
fs/overlayfs/readdir.c | 12 ++--
fs/overlayfs/super.c | 8 ++-
fs/overlayfs/util.c | 2 +-
fs/quota/dquot.c | 3 +-
fs/reiserfs/xattr.c | 14 ++---
fs/tracefs/inode.c | 3 +-
include/linux/namei.h | 12 ++--
ipc/mqueue.c | 5 +-
kernel/bpf/inode.c | 2 +-
security/apparmor/apparmorfs.c | 5 +-
security/inode.c | 2 +-
40 files changed, 250 insertions(+), 168 deletions(-)
base-commit: e73f0f0ee7541171d89f2e2491130c7771ba58d3
--
2.30.2
next reply other threads:[~2021-07-13 11:15 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-13 11:13 Christian Brauner [this message]
2021-07-13 11:13 ` [PATCH 01/24] namei: handle mappings in lookup_one_len() Christian Brauner
2021-07-13 13:32 ` Al Viro
2021-07-13 13:41 ` Christian Brauner
2021-07-13 11:13 ` [PATCH 02/24] namei: handle mappings in lookup_one_len_unlocked() Christian Brauner
2021-07-13 13:34 ` Al Viro
2021-07-13 11:13 ` [PATCH 03/24] namei: handle mappings in lookup_positive_unlocked() Christian Brauner
2021-07-13 11:13 ` [PATCH 04/24] namei: handle mappings in try_lookup_one_len() Christian Brauner
2021-07-13 11:13 ` [PATCH 05/24] btrfs/inode: handle idmaps in btrfs_new_inode() Christian Brauner
2021-07-13 11:13 ` [PATCH 06/24] btrfs/inode: allow idmapped rename iop Christian Brauner
2021-07-13 11:13 ` [PATCH 07/24] btrfs/inode: allow idmapped getattr iop Christian Brauner
2021-07-13 11:13 ` [PATCH 08/24] btrfs/inode: allow idmapped mknod iop Christian Brauner
2021-07-13 11:13 ` [PATCH 09/24] btrfs/inode: allow idmapped create iop Christian Brauner
2021-07-13 11:13 ` [PATCH 10/24] btrfs/inode: allow idmapped mkdir iop Christian Brauner
2021-07-13 11:13 ` [PATCH 11/24] btrfs/inode: allow idmapped symlink iop Christian Brauner
2021-07-13 11:13 ` [PATCH 12/24] btrfs/inode: allow idmapped tmpfile iop Christian Brauner
2021-07-13 11:13 ` [PATCH 13/24] btrfs/inode: allow idmapped setattr iop Christian Brauner
2021-07-13 11:13 ` [PATCH 14/24] btrfs/inode: allow idmapped permission iop Christian Brauner
2021-07-13 11:13 ` [PATCH 15/24] btrfs/ioctl: check whether fs{g,u}id are mapped during subvolume creation Christian Brauner
2021-07-13 11:13 ` [PATCH 16/24] btrfs/inode: allow idmapped BTRFS_IOC_{SNAP,SUBVOL}_CREATE{_V2} ioctl Christian Brauner
2021-07-13 11:13 ` [PATCH 17/24] btrfs/ioctl: allow idmapped BTRFS_IOC_SNAP_DESTROY{_V2} ioctl Christian Brauner
2021-07-14 1:00 ` Qu Wenruo
2021-07-13 11:13 ` [PATCH 18/24] btrfs/ioctl: relax restrictions for BTRFS_IOC_SNAP_DESTROY_V2 with subvolids Christian Brauner
2021-07-13 11:13 ` [PATCH 19/24] btrfs/ioctl: allow idmapped BTRFS_IOC_SET_RECEIVED_SUBVOL{_32} ioctl Christian Brauner
2021-07-13 11:13 ` [PATCH 20/24] btrfs/ioctl: allow idmapped BTRFS_IOC_SUBVOL_SETFLAGS ioctl Christian Brauner
2021-07-13 11:13 ` [PATCH 21/24] btrfs/ioctl: allow idmapped BTRFS_IOC_INO_LOOKUP_USER ioctl Christian Brauner
2021-07-13 11:13 ` [PATCH 22/24] btrfs/acl: handle idmapped mounts Christian Brauner
2021-07-13 11:13 ` [PATCH 23/24] btrfs/super: allow idmapped btrfs Christian Brauner
2021-07-13 11:13 ` [PATCH 24/24] btrfs/242: introduce btrfs specific idmapped mounts tests Christian Brauner
2021-07-13 11:23 ` [PATCH 00/24] btrfs: support idmapped mounts Qu Wenruo
2021-07-13 13:59 ` Christian Brauner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210713111344.1149376-1-brauner@kernel.org \
--to=brauner@kernel.org \
--cc=christian.brauner@ubuntu.com \
--cc=clm@fb.com \
--cc=dsterba@suse.com \
--cc=hch@lst.de \
--cc=josef@toxicpanda.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.