linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jan Kara <jack@suse.cz>
To: <linux-fsdevel@vger.kernel.org>
Cc: Dave Chinner <david@fromorbit.com>,
	Christian Brauner <brauner@kernel.org>, Jan Kara <jack@suse.cz>
Subject: [PATCH 01/13] fs: Define bit numbers for SB_I_ flags
Date: Wed,  7 Aug 2024 20:29:46 +0200	[thread overview]
Message-ID: <20240807183003.23562-1-jack@suse.cz> (raw)
In-Reply-To: <20240807180706.30713-1-jack@suse.cz>

sb->s_iflags has unclear locking rules. Some users modify it under
sb_lock, some under sb->s_umount rwsem, some without any lock.  Readers
are generally not holding any locks either. The flags are rarely
modified so this does not lead to any practical problems but it is a
mess. To reconcile the situation, handle sb->i_flags without any locks
by using atomic bit operations. Since the flags are rarely modified,
this does not introduce any noticeable performance overhead and resolves
all possible issues when different users of sb->s_iflags could possibly
stomp on each other's toes. Define new constants using bit numbers and
functions to tests, set and clear the flags.

Signed-off-by: Jan Kara <jack@suse.cz>
---
 include/linux/fs.h | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/include/linux/fs.h b/include/linux/fs.h
index fd34b5755c0b..ff45a97b39cb 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1190,6 +1190,25 @@ extern int send_sigurg(struct fown_struct *fown);
 #define SB_I_RETIRED	0x00000800	/* superblock shouldn't be reused */
 #define SB_I_NOUMASK	0x00001000	/* VFS does not apply umask */
 
+enum {
+	_SB_I_CGROUPWB,		/* cgroup-aware writeback enabled */
+	_SB_I_NOEXEC,		/* Ignore executables on this fs */
+	_SB_I_NODEV,		/* Ignore devices on this fs */
+	_SB_I_STABLE_WRITES,	/* don't modify blks until WB is done */
+
+	/* sb->s_iflags to limit user namespace mounts */
+	_SB_I_USERNS_VISIBLE,	/* fstype already mounted */
+	_SB_I_IMA_UNVERIFIABLE_SIGNATURE,
+	_SB_I_UNTRUSTED_MOUNTER,
+	_SB_I_EVM_HMAC_UNSUPPORTED,
+
+	_SB_I_SKIP_SYNC,	/* Skip superblock at global sync */
+	_SB_I_PERSB_BDI,	/* has a per-sb bdi */
+	_SB_I_TS_EXPIRY_WARNED,	/* warned about timestamp range expiry */
+	_SB_I_RETIRED,		/* superblock shouldn't be reused */
+	_SB_I_NOUMASK,		/* VFS does not apply umask */
+};
+
 /* Possible states of 'frozen' field */
 enum {
 	SB_UNFROZEN = 0,		/* FS is unfrozen */
@@ -1351,6 +1370,21 @@ struct super_block {
 	struct list_head	s_inodes_wb;	/* writeback inodes */
 } __randomize_layout;
 
+static inline bool sb_test_iflag(const struct super_block *sb, int flag)
+{
+	return test_bit(flag, &sb->s_iflags);
+}
+
+static inline void sb_set_iflag(struct super_block *sb, int flag)
+{
+	set_bit(flag, &sb->s_iflags);
+}
+
+static inline void sb_clear_iflag(struct super_block *sb, int flag)
+{
+	clear_bit(flag, &sb->s_iflags);
+}
+
 static inline struct user_namespace *i_user_ns(const struct inode *inode)
 {
 	return inode->i_sb->s_user_ns;
-- 
2.35.3


  reply	other threads:[~2024-08-07 18:30 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-07 18:29 [PATCH RFC 0/13] fs: generic filesystem shutdown handling Jan Kara
2024-08-07 18:29 ` Jan Kara [this message]
2024-08-07 18:29 ` [PATCH 02/13] fs: Convert fs_context use of SB_I_ flags to new constants Jan Kara
2024-08-07 18:29 ` [PATCH 03/13] fs: Convert mount_too_revealing() to new s_iflags handling functions Jan Kara
2024-08-07 18:29 ` [PATCH 04/13] fs: Convert remaining usage of SB_I_ flags Jan Kara
2024-08-07 18:29 ` [PATCH 05/13] fs: Drop old SB_I_ constants Jan Kara
2024-08-07 18:29 ` [PATCH 06/13] fs: Drop unnecessary underscore from _SB_I_ constants Jan Kara
2024-08-08 11:47   ` Amir Goldstein
2024-08-08 14:35     ` Darrick J. Wong
2024-08-08 14:50       ` Christian Brauner
2024-08-08 17:34         ` Jan Kara
2024-08-07 18:29 ` [PATCH 07/13] overlayfs: Make ovl_start_write() return error Jan Kara
2024-08-08 12:01   ` Amir Goldstein
2024-08-07 18:29 ` [PATCH 08/13] fs: Teach callers of kiocb_start_write() to handle errors Jan Kara
2024-08-07 18:29 ` [PATCH 09/13] fs: Teach callers of file_start_write() " Jan Kara
2024-08-07 18:29 ` [PATCH 10/13] fs: Add __must_check annotations to sb_start_write_trylock() and similar Jan Kara
2024-08-07 18:29 ` [PATCH 11/13] fs: Make sb_start_write() return error on shutdown filesystem Jan Kara
2024-08-07 18:29 ` [PATCH 12/13] fs: Make sb_start_pagefault() " Jan Kara
2024-08-07 18:29 ` [PATCH 13/13] ext4: Replace EXT4_FLAGS_SHUTDOWN flag with a generic SB_I_SHUTDOWN Jan Kara
2024-08-07 23:18 ` [PATCH RFC 0/13] fs: generic filesystem shutdown handling Dave Chinner
2024-08-08 14:32   ` Jan Kara
2024-08-13 12:46     ` Christian Brauner
2024-08-14  0:09     ` Dave Chinner
2024-08-08 14:51   ` Darrick J. Wong
2024-08-09  2:30     ` Dave Chinner

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=20240807183003.23562-1-jack@suse.cz \
    --to=jack@suse.cz \
    --cc=brauner@kernel.org \
    --cc=david@fromorbit.com \
    --cc=linux-fsdevel@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).