public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Andreas Gruenbacher <agruenba@redhat.com>,
	Bob Peterson <rpeterso@redhat.com>,
	Sasha Levin <sashal@kernel.org>,
	cluster-devel@redhat.com
Subject: [PATCH AUTOSEL 5.17 02/31] gfs2: cancel timed-out glock requests
Date: Wed,  6 Apr 2022 21:10:00 -0400	[thread overview]
Message-ID: <20220407011029.113321-2-sashal@kernel.org> (raw)
In-Reply-To: <20220407011029.113321-1-sashal@kernel.org>

From: Andreas Gruenbacher <agruenba@redhat.com>

[ Upstream commit 1fc05c8d8426d4085a219c23f8855c4aaf9e3ffb ]

The gfs2 evict code tries to upgrade the iopen glock from SH to EX. If
the attempt to upgrade times out, gfs2 needs to tell dlm to cancel the
lock request or it can deadlock. We also need to wake up the process
waiting for the lock when dlm sends its AST back to gfs2.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 fs/gfs2/glock.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
index 6b23399eaee0..d368d9a2e8f0 100644
--- a/fs/gfs2/glock.c
+++ b/fs/gfs2/glock.c
@@ -669,6 +669,8 @@ static void finish_xmote(struct gfs2_glock *gl, unsigned int ret)
 
 	/* Check for state != intended state */
 	if (unlikely(state != gl->gl_target)) {
+		if (gh && (ret & LM_OUT_CANCELED))
+			gfs2_holder_wake(gh);
 		if (gh && !test_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags)) {
 			/* move to back of queue and try next entry */
 			if (ret & LM_OUT_CANCELED) {
@@ -1691,6 +1693,14 @@ void gfs2_glock_dq(struct gfs2_holder *gh)
 	struct gfs2_glock *gl = gh->gh_gl;
 
 	spin_lock(&gl->gl_lockref.lock);
+	if (list_is_first(&gh->gh_list, &gl->gl_holders) &&
+	    !test_bit(HIF_HOLDER, &gh->gh_iflags)) {
+		spin_unlock(&gl->gl_lockref.lock);
+		gl->gl_name.ln_sbd->sd_lockstruct.ls_ops->lm_cancel(gl);
+		wait_on_bit(&gh->gh_iflags, HIF_WAIT, TASK_UNINTERRUPTIBLE);
+		spin_lock(&gl->gl_lockref.lock);
+	}
+
 	__gfs2_glock_dq(gh);
 	spin_unlock(&gl->gl_lockref.lock);
 }
-- 
2.35.1


  reply	other threads:[~2022-04-07  1:10 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-07  1:09 [PATCH AUTOSEL 5.17 01/31] gfs2: assign rgrp glock before compute_bitstructs Sasha Levin
2022-04-07  1:10 ` Sasha Levin [this message]
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 03/31] gfs2: Switch lock order of inode and iopen glock Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 04/31] rtc: fix use-after-free on device removal Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 05/31] rtc: pcf2127: fix bug when reading alarm registers Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 06/31] kconfig: add fflush() before ferror() check Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 07/31] um: Cleanup syscall_handler_t definition/cast, fix warning Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 08/31] um: port_user: Improve error handling when port-helper is not found Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 09/31] Input: add bounds checking to input_set_capability() Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 10/31] Input: stmfts - fix reference leak in stmfts_input_open Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 11/31] nvme-pci: add quirks for Samsung X5 SSDs Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 12/31] gfs2: Disable page faults during lockless buffered reads Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 13/31] rtc: sun6i: Fix time overflow handling Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 14/31] crypto: stm32 - fix reference leak in stm32_crc_remove Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 15/31] crypto: x86/chacha20 - Avoid spurious jumps to other functions Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 16/31] ALSA: hda/realtek: Enable headset mic on Lenovo P360 Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 17/31] s390/traps: improve panic message for translation-specification exception Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 18/31] s390/pci: improve zpci_dev reference counting Sasha Levin
2022-04-07  8:27   ` Niklas Schnelle
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 19/31] vhost_vdpa: don't setup irq offloading when irq_num < 0 Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 20/31] tools/virtio: compile with -pthread Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 21/31] smb3: cleanup and clarify status of tree connections Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 22/31] nvmet: use a private workqueue instead of the system workqueue Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 23/31] nvme-multipath: fix hang when disk goes live over reconnect Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 24/31] rtc: mc146818-lib: Fix the AltCentury for AMD platforms Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 25/31] fs: fix an infinite loop in iomap_fiemap Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 26/31] MIPS: lantiq: check the return value of kzalloc() Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 27/31] drbd: remove usage of list iterator variable after loop Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 28/31] platform/chrome: cros_ec_debugfs: detach log reader wq from devm Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 29/31] ARM: 9191/1: arm/stacktrace, kasan: Silence KASAN warnings in unwind_frame() Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 30/31] nilfs2: fix lockdep warnings in page operations for btree nodes Sasha Levin
2022-04-07  1:10 ` [PATCH AUTOSEL 5.17 31/31] nilfs2: fix lockdep warnings during disk space reclamation Sasha Levin

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=20220407011029.113321-2-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=agruenba@redhat.com \
    --cc=cluster-devel@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rpeterso@redhat.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox