From: Amir Goldstein <amir73il@gmail.com>
To: Jan Kara <jack@suse.cz>
Cc: Matthew Bobrowski <repnop@google.com>, linux-fsdevel@vger.kernel.org
Subject: [PATCH v4 09/16] nfsd: use fsnotify group lock helpers
Date: Fri, 22 Apr 2022 15:03:20 +0300 [thread overview]
Message-ID: <20220422120327.3459282-10-amir73il@gmail.com> (raw)
In-Reply-To: <20220422120327.3459282-1-amir73il@gmail.com>
Before commit 9542e6a643fc6 ("nfsd: Containerise filecache laundrette")
nfsd would close open files in direct reclaim context and that could
cause a deadlock when fsnotify mark allocation went into direct reclaim
and nfsd shrinker tried to free existing fsnotify marks.
To avoid issues like this in future code, set the FSNOTIFY_GROUP_NOFS
flag on nfsd fsnotify group to prevent going into direct reclaim from
fsnotify_add_inode_mark().
Suggested-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20220321112310.vpr7oxro2xkz5llh@quack3.lan/
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
---
fs/nfsd/filecache.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/fs/nfsd/filecache.c b/fs/nfsd/filecache.c
index 74ddb828fd75..489c9c1d8f31 100644
--- a/fs/nfsd/filecache.c
+++ b/fs/nfsd/filecache.c
@@ -119,14 +119,14 @@ nfsd_file_mark_find_or_create(struct nfsd_file *nf)
struct inode *inode = nf->nf_inode;
do {
- mutex_lock(&nfsd_file_fsnotify_group->mark_mutex);
+ fsnotify_group_lock(nfsd_file_fsnotify_group);
mark = fsnotify_find_mark(&inode->i_fsnotify_marks,
- nfsd_file_fsnotify_group);
+ nfsd_file_fsnotify_group);
if (mark) {
nfm = nfsd_file_mark_get(container_of(mark,
struct nfsd_file_mark,
nfm_mark));
- mutex_unlock(&nfsd_file_fsnotify_group->mark_mutex);
+ fsnotify_group_unlock(nfsd_file_fsnotify_group);
if (nfm) {
fsnotify_put_mark(mark);
break;
@@ -134,8 +134,9 @@ nfsd_file_mark_find_or_create(struct nfsd_file *nf)
/* Avoid soft lockup race with nfsd_file_mark_put() */
fsnotify_destroy_mark(mark, nfsd_file_fsnotify_group);
fsnotify_put_mark(mark);
- } else
- mutex_unlock(&nfsd_file_fsnotify_group->mark_mutex);
+ } else {
+ fsnotify_group_unlock(nfsd_file_fsnotify_group);
+ }
/* allocate a new nfm */
new = kmem_cache_alloc(nfsd_file_mark_slab, GFP_KERNEL);
@@ -679,7 +680,7 @@ nfsd_file_cache_init(void)
}
nfsd_file_fsnotify_group = fsnotify_alloc_group(&nfsd_file_fsnotify_ops,
- 0);
+ FSNOTIFY_GROUP_NOFS);
if (IS_ERR(nfsd_file_fsnotify_group)) {
pr_err("nfsd: unable to create fsnotify group: %ld\n",
PTR_ERR(nfsd_file_fsnotify_group));
--
2.35.1
next prev parent reply other threads:[~2022-04-22 12:05 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-22 12:03 [PATCH v4 00/16] Evictable fanotify marks Amir Goldstein
2022-04-22 12:03 ` [PATCH v4 01/16] inotify: show inotify mask flags in proc fdinfo Amir Goldstein
2022-04-22 12:03 ` [PATCH v4 02/16] inotify: move control flags from mask to mark flags Amir Goldstein
2022-04-22 12:03 ` [PATCH v4 03/16] fsnotify: fix wrong lockdep annotations Amir Goldstein
2022-04-22 12:03 ` [PATCH v4 04/16] fsnotify: pass flags argument to fsnotify_alloc_group() Amir Goldstein
2022-04-22 12:03 ` [PATCH v4 05/16] fsnotify: make allow_dups a property of the group Amir Goldstein
2022-04-22 12:03 ` [PATCH v4 06/16] fsnotify: create helpers for group mark_mutex lock Amir Goldstein
2022-04-22 12:03 ` [PATCH v4 07/16] inotify: use fsnotify group lock helpers Amir Goldstein
2022-04-22 12:03 ` [PATCH v4 08/16] audit: " Amir Goldstein
2022-04-22 12:03 ` Amir Goldstein [this message]
2022-04-22 12:03 ` [PATCH v4 10/16] dnotify: " Amir Goldstein
2022-04-22 12:03 ` [PATCH v4 11/16] fsnotify: allow adding an inode mark without pinning inode Amir Goldstein
2022-04-22 12:03 ` [PATCH v4 12/16] fanotify: create helper fanotify_mark_user_flags() Amir Goldstein
2022-04-22 12:03 ` [PATCH v4 13/16] fanotify: factor out helper fanotify_mark_update_flags() Amir Goldstein
2022-04-22 12:03 ` [PATCH v4 14/16] fanotify: implement "evictable" inode marks Amir Goldstein
2022-04-22 12:03 ` [PATCH v4 15/16] fanotify: use fsnotify group lock helpers Amir Goldstein
2022-04-22 12:03 ` [PATCH v4 16/16] fanotify: enable "evictable" inode marks Amir Goldstein
2022-04-25 12:59 ` [PATCH v4 00/16] Evictable fanotify marks Jan Kara
2022-04-25 13:32 ` Amir Goldstein
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=20220422120327.3459282-10-amir73il@gmail.com \
--to=amir73il@gmail.com \
--cc=jack@suse.cz \
--cc=linux-fsdevel@vger.kernel.org \
--cc=repnop@google.com \
/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).