From: "Fabio M. Di Nitto" <fdini...@redhat.com>

Resolves: rhbz#822066

Signed-off-by: Fabio M. Di Nitto <fdini...@redhat.com>
---
 rgmanager/src/resources/fs.sh |   27 +++++++++++++++++++++++++++
 1 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/rgmanager/src/resources/fs.sh b/rgmanager/src/resources/fs.sh
index 49912c2..f67f80e 100755
--- a/rgmanager/src/resources/fs.sh
+++ b/rgmanager/src/resources/fs.sh
@@ -202,6 +202,18 @@ meta_data()
            <content type="boolean"/>
        </parameter>
 
+       <parameter name="nfsrestart" inherit="nfsrestart">
+           <longdesc lang="en">
+               If set and unmounting the file system fails, the node will
+               try to restart nfs daemon and nfs lockd to drop all filesystem
+               references. Use this option as last resource.
+           </longdesc>
+           <shortdesc lang="en">
+               Enable NFS daemon and lockd workaround
+           </shortdesc>
+           <content type="boolean"/>
+       </parameter>
+
        <parameter name="fsid">
            <longdesc lang="en">
                File system ID for NFS exports.  This can be overridden
@@ -1005,6 +1017,7 @@ stopFilesystem() {
        typeset -i max_tries=3          # how many times to try umount
        typeset -i sleep_time=5         # time between each umount failure
        typeset -i nfslock_reclaim=0
+       typeset nfsdthreads
        typeset done=""
        typeset umount_failed=""
        typeset force_umount=""
@@ -1108,6 +1121,20 @@ stop: Could not match $OCF_RESKEY_device with a real 
device"
                                    notify_list_store $mp/.clumanager/statd
                                    nfslock_reclaim=1
                                  fi
+
+                                 if [ "$OCF_RESKEY_nfsrestart" = "yes" ] || \
+                                    [ "$OCF_RESKEY_nfsrestart" = "1" ]; then
+                                       if [ -f /proc/fs/nfsd/threads ]; then
+                                               ocf_log warning "Restarting 
nfsd/nfslock"
+                                               nfsdthreads="$(cat 
/proc/fs/nfsd/threads)"
+                                               service nfslock stop
+                                               echo 0 > /proc/fs/nfsd/threads
+                                               echo $nfsdthreads > 
/proc/fs/nfsd/threads
+                                               service nfslock start
+                                       else
+                                               ocf_log err "Unable to determin 
nfsd information. nfsd restart aborted"
+                                       fi
+                                 fi
                                else
                                  fuser -kvm "$mp"
                                fi
-- 
1.7.7.6

Reply via email to