From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Alexander Aring <aahringo@redhat.com>,
Andrew Price <anprice@redhat.com>,
Andreas Gruenbacher <agruenba@redhat.com>,
Sasha Levin <sashal@kernel.org>
Subject: [PATCH 5.11 02/23] gfs2: Flag a withdraw if init_threads() fails
Date: Thu, 15 Apr 2021 16:48:09 +0200 [thread overview]
Message-ID: <20210415144413.230205223@linuxfoundation.org> (raw)
In-Reply-To: <20210415144413.146131392@linuxfoundation.org>
From: Andrew Price <anprice@redhat.com>
[ Upstream commit 62dd0f98a0e5668424270b47a0c2e973795faba7 ]
Interrupting mount with ^C quickly enough can cause the kthread_run()
calls in gfs2's init_threads() to fail and the error path leads to a
deadlock on the s_umount rwsem. The abridged chain of events is:
[mount path]
get_tree_bdev()
sget_fc()
alloc_super()
down_write_nested(&s->s_umount, SINGLE_DEPTH_NESTING); [acquired]
gfs2_fill_super()
gfs2_make_fs_rw()
init_threads()
kthread_run()
( Interrupted )
[Error path]
gfs2_gl_hash_clear()
flush_workqueue(glock_workqueue)
wait_for_completion()
[workqueue context]
glock_work_func()
run_queue()
do_xmote()
freeze_go_sync()
freeze_super()
down_write(&sb->s_umount) [deadlock]
In freeze_go_sync() there is a gfs2_withdrawn() check that we can use to
make sure freeze_super() is not called in the error path, so add a
gfs2_withdraw_delayed() call when init_threads() fails.
Ref: https://bugzilla.kernel.org/show_bug.cgi?id=212231
Reported-by: Alexander Aring <aahringo@redhat.com>
Signed-off-by: Andrew Price <anprice@redhat.com>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
fs/gfs2/super.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
index 754ea2a137b4..34ca312457a6 100644
--- a/fs/gfs2/super.c
+++ b/fs/gfs2/super.c
@@ -169,8 +169,10 @@ int gfs2_make_fs_rw(struct gfs2_sbd *sdp)
int error;
error = init_threads(sdp);
- if (error)
+ if (error) {
+ gfs2_withdraw_delayed(sdp);
return error;
+ }
j_gl->gl_ops->go_inval(j_gl, DIO_METADATA);
if (gfs2_withdrawn(sdp)) {
--
2.30.2
next prev parent reply other threads:[~2021-04-15 15:15 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-15 14:48 [PATCH 5.11 00/23] 5.11.15-rc1 review Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 01/23] interconnect: core: fix error return code of icc_link_destroy() Greg Kroah-Hartman
2021-04-15 14:48 ` Greg Kroah-Hartman [this message]
2021-04-15 14:48 ` [PATCH 5.11 03/23] KVM: arm64: Hide system instruction access to Trace registers Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 04/23] KVM: arm64: Disable guest access to trace filter controls Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 05/23] drm/imx: imx-ldb: fix out of bounds array access warning Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 06/23] gfs2: report "already frozen/thawed" errors Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 07/23] ftrace: Check if pages were allocated before calling free_pages() Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 08/23] tools/kvm_stat: Add restart delay Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 09/23] drm/tegra: dc: Dont set PLL clock to 0Hz Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 10/23] gpu: host1x: Use different lock classes for each client Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 11/23] XArray: Fix splitting to non-zero orders Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 12/23] radix tree test suite: Fix compilation Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 13/23] block: only update parent bi_status when bio fail Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 14/23] radix tree test suite: Register the main thread with the RCU library Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 15/23] idr test suite: Take RCU read lock in idr_find_test_1 Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 16/23] idr test suite: Create anchor before launching throbber Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 17/23] null_blk: fix command timeout completion handling Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 18/23] io_uring: dont mark S_ISBLK async work as unbounded Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 19/23] riscv,entry: fix misaligned base for excp_vect_table Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 20/23] block: dont ignore REQ_NOWAIT for direct IO Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 21/23] netfilter: x_tables: fix compat match/target pad out-of-bound write Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 22/23] perf map: Tighten snprintf() string precision to pass gcc check on some 32-bit arches Greg Kroah-Hartman
2021-04-15 14:48 ` [PATCH 5.11 23/23] net: sfp: cope with SFPs that set both LOS normal and LOS inverted Greg Kroah-Hartman
2021-04-15 22:42 ` [PATCH 5.11 00/23] 5.11.15-rc1 review Shuah Khan
2021-04-16 1:02 ` Naresh Kamboju
2021-04-16 9:22 ` Jon Hunter
2021-04-16 17:31 ` Fox Chen
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=20210415144413.230205223@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=aahringo@redhat.com \
--cc=agruenba@redhat.com \
--cc=anprice@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=sashal@kernel.org \
--cc=stable@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.