* [Cluster-devel] [GFS2 PATCH v2] gfs2-utils: Fix hang on withdraw
[not found] <1242290245.4018648.1438704244053.JavaMail.zimbra@redhat.com>
@ 2015-08-04 16:05 ` Abhijith Das
2015-08-04 16:44 ` Andrew Price
0 siblings, 1 reply; 2+ messages in thread
From: Abhijith Das @ 2015-08-04 16:05 UTC (permalink / raw)
To: cluster-devel.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
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [Cluster-devel] [GFS2 PATCH v2] gfs2-utils: Fix hang on withdraw
2015-08-04 16:05 ` [Cluster-devel] [GFS2 PATCH v2] gfs2-utils: Fix hang on withdraw Abhijith Das
@ 2015-08-04 16:44 ` Andrew Price
0 siblings, 0 replies; 2+ messages in thread
From: Andrew Price @ 2015-08-04 16:44 UTC (permalink / raw)
To: cluster-devel.redhat.com
Hi Abhi,
Thanks for adding the docs, this looks good to me.
Cheers,
Andy
On 04/08/15 17:05, Abhijith Das wrote:
> 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
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2015-08-04 16:44 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1242290245.4018648.1438704244053.JavaMail.zimbra@redhat.com>
2015-08-04 16:05 ` [Cluster-devel] [GFS2 PATCH v2] gfs2-utils: Fix hang on withdraw Abhijith Das
2015-08-04 16:44 ` Andrew Price
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).