From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Price Date: Tue, 4 Aug 2015 12:06:16 +0100 Subject: [Cluster-devel] [GFS2 PATCH] gfs2-utils: Fix hang on withdraw In-Reply-To: <1807895749.3527110.1438630228383.JavaMail.zimbra@redhat.com> References: <1807895749.3527110.1438630228383.JavaMail.zimbra@redhat.com> Message-ID: <55C09CA8.5090904@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi Abhi, On 03/08/15 20:30, 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 > --- > gfs2/scripts/82-gfs2-withdraw.rules | 2 ++ > gfs2/scripts/gfs2_wd_udev.sh | 30 ++++++++++++++++++++++++++++++ > 2 files changed, 32 insertions(+) > create mode 100644 gfs2/scripts/82-gfs2-withdraw.rules > create mode 100755 gfs2/scripts/gfs2_wd_udev.sh Even if they're not getting installed in 'make install' the build system will need to know about them, in gfs2/scripts/Makefile.am: noinst_SCRIPTS = \ 82-gfs2-withdraw.rules \ gfs2_wd_udev.sh I think some documentation in README.build would be useful too, so that package maintainers know why and where to install them. > diff --git a/gfs2/scripts/82-gfs2-withdraw.rules b/gfs2/scripts/82-gfs2-withdraw.rules > new file mode 100644 > index 0000000..c1ab02b > --- /dev/null > +++ b/gfs2/scripts/82-gfs2-withdraw.rules > @@ -0,0 +1,2 @@ > +SUBSYSTEM=="gfs2", ACTION=="offline", RUN+="/bin/sh /sbin/gfs2_wd_udev.sh" Perhaps that should be /usr/sbin instead of /sbin, after the whole "UsrMove" thing. Thanks, Andy > + > 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 >