From: Jeff Layton <jlayton@kernel.org>
To: Alexander Viro <viro@zeniv.linux.org.uk>,
Christian Brauner <brauner@kernel.org>, Jan Kara <jack@suse.cz>,
Chuck Lever <chuck.lever@oracle.com>,
Alexander Aring <alex.aring@gmail.com>,
Steven Rostedt <rostedt@goodmis.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Jonathan Corbet <corbet@lwn.net>,
Shuah Khan <skhan@linuxfoundation.org>,
NeilBrown <neil@brown.name>,
Olga Kornievskaia <okorniev@redhat.com>,
Dai Ngo <Dai.Ngo@oracle.com>, Tom Talpey <tom@talpey.com>,
Trond Myklebust <trondmy@kernel.org>,
Anna Schumaker <anna@kernel.org>,
Amir Goldstein <amir73il@gmail.com>
Cc: Calum Mackay <calum.mackay@oracle.com>,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-trace-kernel@vger.kernel.org, linux-doc@vger.kernel.org,
linux-nfs@vger.kernel.org, Jeff Layton <jlayton@kernel.org>
Subject: [PATCH v2 06/28] fsnotify: add fsnotify_modify_mark_mask()
Date: Thu, 16 Apr 2026 10:35:07 -0700 [thread overview]
Message-ID: <20260416-dir-deleg-v2-6-851426a550f6@kernel.org> (raw)
In-Reply-To: <20260416-dir-deleg-v2-0-851426a550f6@kernel.org>
nfsd needs to be able to modify the mask on an existing mark when new
directory delegations are set or unset. Add an exported function that
allows the caller to set and clear bits in the mark->mask, and does
the recalculation if something changed.
Suggested-by: Jan Kara <jack@suse.cz>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
fs/notify/mark.c | 29 +++++++++++++++++++++++++++++
include/linux/fsnotify_backend.h | 1 +
2 files changed, 30 insertions(+)
diff --git a/fs/notify/mark.c b/fs/notify/mark.c
index c2ed5b11b0fe..b1e73c6fd382 100644
--- a/fs/notify/mark.c
+++ b/fs/notify/mark.c
@@ -310,6 +310,35 @@ void fsnotify_recalc_mask(struct fsnotify_mark_connector *conn)
fsnotify_conn_set_children_dentry_flags(conn);
}
+/**
+ * fsnotify_modify_mark_mask - set and/or clear flags in a mark's mask
+ * @mark: mark to be modified
+ * @set: bits to be set in mask
+ * @clear: bits to be cleared in mask
+ *
+ * Modify a fsnotify_mark mask as directed, and update its associated conn.
+ * The caller is expected to hold a reference to the mark.
+ */
+void fsnotify_modify_mark_mask(struct fsnotify_mark *mark, u32 set, u32 clear)
+{
+ bool recalc = false;
+ u32 mask;
+
+ WARN_ON_ONCE(clear & set);
+
+ spin_lock(&mark->lock);
+ mask = mark->mask;
+ mark->mask |= set;
+ mark->mask &= ~clear;
+ if (mark->mask != mask)
+ recalc = true;
+ spin_unlock(&mark->lock);
+
+ if (recalc)
+ fsnotify_recalc_mask(mark->connector);
+}
+EXPORT_SYMBOL_GPL(fsnotify_modify_mark_mask);
+
/* Free all connectors queued for freeing once SRCU period ends */
static void fsnotify_connector_destroy_workfn(struct work_struct *work)
{
diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h
index 95985400d3d8..66e185bd1b1b 100644
--- a/include/linux/fsnotify_backend.h
+++ b/include/linux/fsnotify_backend.h
@@ -917,6 +917,7 @@ extern void fsnotify_get_mark(struct fsnotify_mark *mark);
extern void fsnotify_put_mark(struct fsnotify_mark *mark);
extern void fsnotify_finish_user_wait(struct fsnotify_iter_info *iter_info);
extern bool fsnotify_prepare_user_wait(struct fsnotify_iter_info *iter_info);
+extern void fsnotify_modify_mark_mask(struct fsnotify_mark *mark, u32 set, u32 clear);
static inline void fsnotify_init_event(struct fsnotify_event *event)
{
--
2.53.0
next prev parent reply other threads:[~2026-04-16 17:35 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-16 17:35 [PATCH v2 00/28] vfs/nfsd: add support for CB_NOTIFY callbacks in directory delegations Jeff Layton
2026-04-16 17:35 ` [PATCH v2 01/28] filelock: pass current blocking lease to trace_break_lease_block() rather than "new_fl" Jeff Layton
2026-04-16 17:35 ` [PATCH v2 02/28] filelock: add support for ignoring deleg breaks for dir change events Jeff Layton
2026-04-16 17:35 ` [PATCH v2 03/28] filelock: add a tracepoint to start of break_lease() Jeff Layton
2026-04-16 17:35 ` [PATCH v2 04/28] filelock: add an inode_lease_ignore_mask helper Jeff Layton
2026-04-16 17:35 ` [PATCH v2 05/28] fsnotify: new tracepoint in fsnotify() Jeff Layton
2026-04-17 11:49 ` Jan Kara
2026-04-16 17:35 ` Jeff Layton [this message]
2026-04-16 17:35 ` [PATCH v2 07/28] fsnotify: add FSNOTIFY_EVENT_RENAME data type Jeff Layton
2026-04-16 19:24 ` Amir Goldstein
2026-04-16 20:52 ` Jeff Layton
2026-04-17 11:56 ` Jan Kara
2026-04-16 17:35 ` [PATCH v2 08/28] nfsd: check fl_lmops in nfsd_breaker_owns_lease() Jeff Layton
2026-04-16 17:35 ` [PATCH v2 09/28] nfsd: add protocol support for CB_NOTIFY Jeff Layton
2026-04-16 17:35 ` [PATCH v2 10/28] nfs_common: add new NOTIFY4_* flags proposed in RFC8881bis Jeff Layton
2026-04-16 17:35 ` [PATCH v2 11/28] nfsd: allow nfsd to get a dir lease with an ignore mask Jeff Layton
2026-04-16 17:35 ` [PATCH v2 12/28] nfsd: update the fsnotify mark when setting or removing a dir delegation Jeff Layton
2026-04-16 17:35 ` [PATCH v2 13/28] nfsd: make nfsd4_callback_ops->prepare operation bool return Jeff Layton
2026-04-16 17:35 ` [PATCH v2 14/28] nfsd: add callback encoding and decoding linkages for CB_NOTIFY Jeff Layton
2026-04-16 17:35 ` [PATCH v2 15/28] nfsd: use RCU to protect fi_deleg_file Jeff Layton
2026-04-16 17:35 ` [PATCH v2 16/28] nfsd: add data structures for handling CB_NOTIFY Jeff Layton
2026-04-16 17:35 ` [PATCH v2 17/28] nfsd: add notification handlers for dir events Jeff Layton
2026-04-16 17:35 ` [PATCH v2 18/28] nfsd: add tracepoint to dir_event handler Jeff Layton
2026-04-16 17:35 ` [PATCH v2 19/28] nfsd: apply the notify mask to the delegation when requested Jeff Layton
2026-04-16 17:35 ` [PATCH v2 20/28] nfsd: add helper to marshal a fattr4 from completed args Jeff Layton
2026-04-16 17:35 ` [PATCH v2 21/28] nfsd: allow nfsd4_encode_fattr4_change() to work with no export Jeff Layton
2026-04-16 17:35 ` [PATCH v2 22/28] nfsd: send basic file attributes in CB_NOTIFY Jeff Layton
2026-04-16 17:35 ` [PATCH v2 23/28] nfsd: allow encoding a filehandle into fattr4 without a svc_fh Jeff Layton
2026-04-16 17:35 ` [PATCH v2 24/28] nfsd: add a fi_connectable flag to struct nfs4_file Jeff Layton
2026-04-16 17:35 ` [PATCH v2 25/28] nfsd: add the filehandle to returned attributes in CB_NOTIFY Jeff Layton
2026-04-16 17:35 ` [PATCH v2 26/28] nfsd: properly track requested child attributes Jeff Layton
2026-04-16 17:35 ` [PATCH v2 27/28] nfsd: track requested dir attributes Jeff Layton
2026-04-16 17:35 ` [PATCH v2 28/28] nfsd: add support to CB_NOTIFY for dir attribute changes Jeff Layton
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=20260416-dir-deleg-v2-6-851426a550f6@kernel.org \
--to=jlayton@kernel.org \
--cc=Dai.Ngo@oracle.com \
--cc=alex.aring@gmail.com \
--cc=amir73il@gmail.com \
--cc=anna@kernel.org \
--cc=brauner@kernel.org \
--cc=calum.mackay@oracle.com \
--cc=chuck.lever@oracle.com \
--cc=corbet@lwn.net \
--cc=jack@suse.cz \
--cc=linux-doc@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=neil@brown.name \
--cc=okorniev@redhat.com \
--cc=rostedt@goodmis.org \
--cc=skhan@linuxfoundation.org \
--cc=tom@talpey.com \
--cc=trondmy@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox