Re: [PATCH v5 05/21] nfsd: update the fsnotify mark when setting or removing a dir delegation

"Chuck Lever" <[email protected]>
Newsgroups gmane.linux.kernel,gmane.linux.documentation,gmane.linux.nfs
Message-ID <[email protected]>

On Wed, Jun 10, 2026, at 9:49 AM, Jeff Layton wrote:
> On Mon, 2026-06-08 at 12:38 -0400, Chuck Lever wrote:

>> > diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
>> > index 2a34ba457b74..efbc99f0a965 100644
>> > --- a/fs/nfsd/nfs4state.c
>> > +++ b/fs/nfsd/nfs4state.c
>> > @@ -1246,6 +1246,38 @@ static void 
>> > nfsd4_finalize_deleg_timestamps(struct nfs4_delegation *dp, struct f
>> >  	nfsd_update_cmtime_attr(f, ATTR_ATIME);
>> >  }
>> > 
>> > +static void nfsd_fsnotify_recalc_mask(struct nfsd_file *nf)
>> 
>> Since nfsd_fsnotify_recalc_mask() takes a single struct nfsd_file
>> as an argument, should this function reside in fs/nfsd/filecache.c
>> instead? The question might reflect my misunderstanding of the
>> new function's purpose.
>> 
>
> The only caller is in this file, so by keeping it here we can make it
> static. I can change that if you'd prefer it be in filecache.c.

My thought was that the new function is accessing and modifying
the internals of an nfsd_file -- it contains local knowledge about
how the filecache manages fs notifications.


>> > +{
>> > +	struct inode *inode = file_inode(nf->nf_file);
>> > +	u32 lease_mask, set = 0, clear = 0;
>> > +	struct fsnotify_mark *mark;
>> > +
>> > +	/* This is only needed when adding or removing dir delegs */
>> > +	if (!S_ISDIR(inode->i_mode) || !nf->nf_mark)
>> > +		return;
>> > +
>> > +	/* Set up notifications for any ignored delegation events */
>> > +	lease_mask = inode_lease_ignore_mask(inode);
>> > +	mark = &nf->nf_mark->nfm_mark;
>> > +
>> > +	if (lease_mask & FL_IGN_DIR_CREATE)
>> > +		set |= FS_CREATE | FS_MOVED_TO;
>> > +	else
>> > +		clear |= FS_CREATE | FS_MOVED_TO;
>> > +
>> > +	if (lease_mask & FL_IGN_DIR_DELETE)
>> > +		set |= FS_DELETE | FS_MOVED_FROM;
>> > +	else
>> > +		clear |= FS_DELETE | FS_MOVED_FROM;
>> > +
>> > +	if (lease_mask & FL_IGN_DIR_RENAME)
>> > +		set |= FS_RENAME;
>> > +	else
>> > +		clear |= FS_RENAME;
>> > +
>> > +	fsnotify_modify_mark_mask(mark, set, clear);
>> > +}
>> > +
>> >  static void nfs4_unlock_deleg_lease(struct nfs4_delegation *dp)
>> >  {
>> >  	struct nfs4_file *fp = dp->dl_stid.sc_file;


-- 
Chuck Lever
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.