From: Abhijith Das <adas@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [GFS2 PATCH v2] gfs2-utils: Fix hang on withdraw
Date: Tue, 4 Aug 2015 12:05:55 -0400 (EDT) [thread overview]
Message-ID: <1402936886.4019908.1438704355708.JavaMail.zimbra@redhat.com> (raw)
In-Reply-To: <1242290245.4018648.1438704244053.JavaMail.zimbra@redhat.com>
Issuing a withdraw on a gfs2 filesystem causes a hang. When
gfs_controld was removed, the userspace functionality that
completes a withdraw operation went away. This causes gfs2
kernel to hang waiting for a withdraw completion ack from
userspace.
This patchset introduces a uevent-based shell script to do
the job that gfs_controld used to do on withdraw. An 'offline'
uevent triggers the execution of this script. This script
suspends the device associated with the filesystem and signals
a completed withdraw to the kernel.
Resolves: rhbz#1225634
Signed-off-by: Abhi Das <adas@redhat.com>
---
README.build | 9 +++++++++
gfs2/scripts/82-gfs2-withdraw.rules | 2 ++
gfs2/scripts/Makefile.am | 5 +++++
gfs2/scripts/gfs2_wd_udev.sh | 30 ++++++++++++++++++++++++++++++
4 files changed, 46 insertions(+)
create mode 100644 gfs2/scripts/82-gfs2-withdraw.rules
create mode 100755 gfs2/scripts/gfs2_wd_udev.sh
diff --git a/README.build b/README.build
index f4ebe53..6487bae 100644
--- a/README.build
+++ b/README.build
@@ -29,5 +29,14 @@ To install gfs2-utils, run:
make install
+The following scripts (located in gfs2/scripts) are used to complete
+the userland portion of the gfs2 withdraw feature using uevents. They
+are not installed by 'make install' and need to be installed manually
+or during rpm installation to the corresponding locations.
+
+ 82-gfs2-withdraw.rules in /etc/udev/rules.d/
+ gfs2_wd_udev.sh in /usr/sbin/
+
See also doc/README.contributing for details on submitting patches and
doc/README.tests for more details regarding the test suite.
+
diff --git a/gfs2/scripts/82-gfs2-withdraw.rules b/gfs2/scripts/82-gfs2-withdraw.rules
new file mode 100644
index 0000000..2228615
--- /dev/null
+++ b/gfs2/scripts/82-gfs2-withdraw.rules
@@ -0,0 +1,2 @@
+SUBSYSTEM=="gfs2", ACTION=="offline", RUN+="/bin/sh /usr/sbin/gfs2_wd_udev.sh"
+
diff --git a/gfs2/scripts/Makefile.am b/gfs2/scripts/Makefile.am
index 62fb2fe..dde906f 100644
--- a/gfs2/scripts/Makefile.am
+++ b/gfs2/scripts/Makefile.am
@@ -3,3 +3,8 @@ MAINTAINERCLEANFILES = Makefile.in
dist_sbin_SCRIPTS = \
gfs2_lockcapture \
gfs2_trace
+
+noinst_SCRIPTS = \
+ 82-gfs2-withdraw.rules \
+ gfs2_wd_udev.sh
+
diff --git a/gfs2/scripts/gfs2_wd_udev.sh b/gfs2/scripts/gfs2_wd_udev.sh
new file mode 100755
index 0000000..ac3ce35
--- /dev/null
+++ b/gfs2/scripts/gfs2_wd_udev.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+#
+# Do not run this script manually. This script is called by udev on a gfs2
+# withdraw uevent and is used to complete the withdraw action and notify the
+# kernel.
+#
+
+# Sanity checks
+if [ "$SUBSYSTEM" != "gfs2" ] || [ "$LOCKPROTO" != "lock_dlm" ] ||
+ [ -z "$DEVPATH" ] || [ "$ACTION" != "offline" ]
+then
+ exit 1 # Nothing to do here
+fi
+
+# Try and suspend the device
+SYSFS_TOPDIR="/sys"$DEVPATH
+DM_NAME=$(cat "$SYSFS_TOPDIR/device/dm/name")
+DM_DEV="/dev/mapper/"$DM_NAME
+
+if [ -z "$DM_DEV" ]
+then
+ /usr/bin/dmsetup suspend $DM_DEV
+fi
+
+# Signal completion of withdraw
+WD_ACK="$SYSFS_TOPDIR/lock_module/withdraw"
+if [ -f "$WD_ACK" ]
+then
+ echo "1" > $WD_ACK
+fi
--
2.4.3
next parent reply other threads:[~2015-08-04 16:05 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1242290245.4018648.1438704244053.JavaMail.zimbra@redhat.com>
2015-08-04 16:05 ` Abhijith Das [this message]
2015-08-04 16:44 ` [Cluster-devel] [GFS2 PATCH v2] gfs2-utils: Fix hang on withdraw Andrew Price
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=1402936886.4019908.1438704355708.JavaMail.zimbra@redhat.com \
--to=adas@redhat.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 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.