linux/fs
Christian Brauner e58ace1a0f
namespace: only take read lock in do_reconfigure_mnt()
do_reconfigure_mnt() used to take the down_write(&sb->s_umount) lock
which seems unnecessary since we're not changing the superblock. We're
only checking whether it is already read-only. Setting other mount
attributes is protected by lock_mount_hash() afaict and not by s_umount.

The history of down_write(&sb->s_umount) lock being taken when setting
mount attributes dates back to the introduction of MNT_READONLY in [2].
This introduced the concept of having read-only mounts in contrast to
just having a read-only superblock. When it got introduced it was simply
plumbed into do_remount() which already took down_write(&sb->s_umount)
because it was only used to actually change the superblock before [2].
Afaict, it would've already been possible back then to only use
down_read(&sb->s_umount) for MS_BIND | MS_REMOUNT since actual mount
options were protected by the vfsmount lock already. But that would've
meant special casing the locking for MS_BIND | MS_REMOUNT in
do_remount() which people might not have considered worth it.
Then in [1] MS_BIND | MS_REMOUNT mount option changes were split out of
do_remount() into do_reconfigure_mnt() but the down_write(&sb->s_umount)
lock was simply copied over.
Now that we have this be a separate helper only take the
down_read(&sb->s_umount) lock since we're only interested in checking
whether the super block is currently read-only and blocking any writers
from changing it. Essentially, checking that the super block is
read-only has the advantage that we can avoid having to go into the
slowpath and through MNT_WRITE_HOLD and can simply set the read-only
flag on the mount in set_mount_attributes().

[1]: commit 43f5e655ef ("vfs: Separate changing mount flags full remount")
[2]: commit 2e4b7fcd92 ("[PATCH] r/o bind mounts: honor mount writer counts at remount")

Link: https://lore.kernel.org/r/20210121131959.646623-32-christian.brauner@ubuntu.com
Cc: David Howells <dhowells@redhat.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: linux-fsdevel@vger.kernel.org
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2021-01-24 14:29:34 +01:00
..
9p fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
adfs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
affs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
afs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
autofs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
befs
bfs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
btrfs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
cachefiles namei: prepare for idmapped mounts 2021-01-24 14:27:18 +01:00
ceph fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
cifs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
coda fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
configfs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
cramfs
crypto inode: make init and permission helpers idmapped mount aware 2021-01-24 14:27:16 +01:00
debugfs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
devpts
dlm fs: dlm: check on existing node address 2020-11-10 12:14:20 -06:00
ecryptfs ecryptfs: do not mount on top of idmapped mounts 2021-01-24 14:27:20 +01:00
efivarfs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
efs
erofs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
exfat fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
exportfs exportfs: Add a function to return the raw output from fh_to_dentry() 2020-12-09 09:39:38 -05:00
ext2 fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
ext4 fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
f2fs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
fat fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
freevxfs
fscache
fuse fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
gfs2 fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
hfs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
hfsplus fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
hostfs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
hpfs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
hugetlbfs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
iomap mm: memcontrol: Use helpers to read page's memcg data 2020-12-02 18:28:05 -08:00
isofs fs: Replace zero-length array with flexible-array member 2020-10-29 17:22:59 -05:00
jbd2 jbd2: add a helper to find out number of fast commit blocks 2020-12-17 13:30:45 -05:00
jffs2 fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
jfs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
kernfs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
lockd fs/lockd: convert comma to semicolon 2020-12-16 07:57:37 -05:00
minix fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
nfs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
nfs_common nfs_common: need lock during iterate through the list 2020-12-09 09:38:34 -05:00
nfsd nfs: do not export idmapped mounts 2021-01-24 14:29:33 +01:00
nilfs2 fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
nls
notify fs: add file and path permissions helpers 2021-01-24 14:27:16 +01:00
ntfs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
ocfs2 fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
omfs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
openpromfs
orangefs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
overlayfs overlayfs: do not mount on top of idmapped mounts 2021-01-24 14:27:20 +01:00
proc fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
pstore Tracing updates for 5.11 2020-12-17 13:22:17 -08:00
qnx4
qnx6
quota \n 2020-12-17 11:00:37 -08:00
ramfs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
reiserfs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
romfs
squashfs
sysfs
sysv fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
tracefs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
ubifs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
udf fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
ufs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
unicode
vboxsf fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
verity fs: add file and path permissions helpers 2021-01-24 14:27:16 +01:00
xfs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
zonefs fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
aio.c Merge branch 'akpm' (patches from Andrew) 2020-12-15 12:53:37 -08:00
anon_inodes.c
attr.c ima: handle idmapped mounts 2021-01-24 14:27:20 +01:00
bad_inode.c fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
binfmt_aout.c
binfmt_elf_fdpic.c
binfmt_elf.c Merge branch 'exec-for-v5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace 2020-12-15 19:29:43 -08:00
binfmt_em86.c
binfmt_flat.c
binfmt_misc.c
binfmt_script.c
block_dev.c block: pre-initialize struct block_device in bdev_alloc_inode 2021-01-07 20:57:53 -07:00
buffer.c for-5.11/block-2020-12-14 2020-12-16 12:57:51 -08:00
char_dev.c
compat_binfmt_elf.c elf: Expose ELF header on arch_setup_additional_pages() 2020-10-26 13:46:47 +01:00
coredump.c open: handle idmapped mounts in do_truncate() 2021-01-24 14:27:18 +01:00
d_path.c
dax.c mm: simplify follow_pte{,pmd} 2020-12-15 22:46:19 -08:00
dcache.c fs: Kill DCACHE_DONTCACHE dentry even if DCACHE_REFERENCED is set 2020-12-10 17:33:17 -05:00
dcookies.c
direct-io.c
drop_caches.c
eventfd.c eventfd: Export eventfd_ctx_do_read() 2020-11-15 09:49:10 -05:00
eventpoll.c epoll: add syscall epoll_pwait2 2020-12-19 11:18:38 -08:00
exec.c exec: handle idmapped mounts 2021-01-24 14:27:19 +01:00
fcntl.c fcntl: handle idmapped mounts 2021-01-24 14:27:19 +01:00
fhandle.c
file_table.c epoll: take epitem list out of struct file 2020-10-25 20:02:08 -04:00
file.c kernel/io_uring: cancel io_uring before task works 2020-12-30 19:36:54 -07:00
filesystems.c
fs_context.c
fs_parser.c
fs_pin.c
fs_struct.c
fs_types.c
fs-writeback.c writeback: don't warn on an unregistered BDI in __mark_inode_dirty 2020-12-16 11:56:02 +01:00
fsopen.c
init.c init: handle idmapped mounts 2021-01-24 14:27:19 +01:00
inode.c open: handle idmapped mounts in do_truncate() 2021-01-24 14:27:18 +01:00
internal.h namei: handle idmapped mounts in may_*() helpers 2021-01-24 14:27:17 +01:00
io_uring.c io_uring: ensure finish_wait() is always called in __io_uring_task_cancel() 2021-01-15 16:04:23 -07:00
io-wq.c io-wq: kill now unused io_wq_cancel_all() 2020-12-20 10:47:42 -07:00
io-wq.h io-wq: kill now unused io_wq_cancel_all() 2020-12-20 10:47:42 -07:00
ioctl.c
Kconfig
Kconfig.binfmt
kernel_read_file.c
libfs.c fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
locks.c Merge branch 'exec-for-v5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace 2020-12-15 19:29:43 -08:00
Makefile
mbcache.c
mount.h mount: make {lock,unlock}_mount_hash() static 2021-01-24 14:29:34 +01:00
mpage.c
namei.c ima: handle idmapped mounts 2021-01-24 14:27:20 +01:00
namespace.c namespace: only take read lock in do_reconfigure_mnt() 2021-01-24 14:29:34 +01:00
no-block.c
nsfs.c
open.c open: handle idmapped mounts 2021-01-24 14:27:18 +01:00
pipe.c block: remove i_bdev 2020-12-01 14:53:39 -07:00
pnode.c
pnode.h fs/namespace.c: WARN if mnt_count has become negative 2020-12-10 17:33:17 -05:00
posix_acl.c fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
proc_namespace.c proc mountinfo: make splice available again 2020-12-27 12:00:36 -08:00
read_write.c
readdir.c
remap_range.c ioctl: handle idmapped mounts 2021-01-24 14:27:19 +01:00
select.c poll: fix performance regression due to out-of-line __put_user() 2021-01-08 11:06:29 -08:00
seq_file.c fix return values of seq_read_iter() 2020-11-15 22:12:53 -05:00
signalfd.c
splice.c
stack.c
stat.c fs: make helpers idmap mount aware 2021-01-24 14:27:20 +01:00
statfs.c block: remove i_bdev 2020-12-01 14:53:39 -07:00
super.c block: remove i_bdev 2020-12-01 14:53:39 -07:00
sync.c
timerfd.c
userfaultfd.c userfaultfd: add user-mode only option to unprivileged_userfaultfd sysctl knob 2020-12-15 12:13:46 -08:00
utimes.c utimes: handle idmapped mounts 2021-01-24 14:27:18 +01:00
xattr.c namei: handle idmapped mounts in may_*() helpers 2021-01-24 14:27:17 +01:00