Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=c5…
Commit: c5f279928da14f72fac458bd2439b43ea95e66df
Parent: 5631b25dd1762aea5be57178c4c6515dee3d4240
Author: Shane Bradley <sbradley(a)redhat.com>
AuthorDate: Mon Feb 15 16:16:55 2010 -0500
Committer: Lon Hohberger <lhh(a)redhat.com>
CommitterDate: Tue Feb 16 12:55:42 2010 -0500
resource-agents: Kill correct PIDs during force_unmount
When stopping a service that contains a filesystem resource that is
managed by fs.sh, on a stop operation it can kill a process that is
not located on that mount point.
There was a couple of scenarios that would kill a process that was
not on that mount point when it was stopped:
These processes should not have been killed:
$ less /tmp/media/demo1/tmp.txt
$ less /tmp/test\ /media/demo1/tmp.txt
These processes was and should have been killed:
$ less /media/demo1/tmp.txt
Resolves: rhbz#555901
Signed-off-by: Lon Hohberger <lhh(a)redhat.com>
---
rgmanager/src/resources/fs.sh.in | 27 ++++++++++++++-------------
1 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/rgmanager/src/resources/fs.sh.in b/rgmanager/src/resources/fs.sh.in
index 1454295..b037796 100644
--- a/rgmanager/src/resources/fs.sh.in
+++ b/rgmanager/src/resources/fs.sh.in
@@ -691,6 +691,7 @@ killMountProcesses()
typeset have_lsof=""
typeset have_fuser=""
typeset try
+ typeset command pid user line
if [ $# -ne 1 ]; then
ocf_log err \
@@ -727,30 +728,30 @@ killMountProcesses()
#
# Use lsof to free up mount point
#
- while read command pid user
+ while read line
do
- if [ -z "$pid" ]; then
+ path=$(echo $line | awk '{for (i=9;i<NF+1;i++) {printf "%s ",$i};}')
+ #if [ -z $(echo $path | grep -E "$mp(/| |$)") ]
+ if [ -z $(echo $path | grep -E "^$mp/.*") ]; then
continue
fi
-
+ command=$(echo $line | awk '{print $1}')
+ pid=$(echo $line | awk '{print $2}')
+ user=$(echo $line | awk '{print $3}')
if [ $try -eq 1 ]; then
- ocf_log warn \
- "killing process $pid ($user $command $mp)"
+ ocf_log warn "killing process $pid ($user $command $mp)"
elif [ $try -eq 3 ]; then
- ocf_log crit \
- "Could not clean up mountpoint $mp"
- ret=$FAIL
+ ocf_log crit "Could not clean up mountpoint $mp"
+ ret=$FAIL
fi
-
if [ $try -gt 1 ]; then
kill -9 $pid
else
kill -TERM $pid
fi
- done < <(lsof -bn 2>/dev/null | \
- grep -E " $mp(/| |$)" | \
- awk '{print $1,$2,$3}' | \
- sort -u -k 1,3)
+ done< <(lsof -bn 2>/dev/null | \
+ grep -E " $mp(/| |$)" | \
+ sort -u -k 1,3)
elif [ -n "$have_fuser" ]; then
#
# Use fuser to free up mount point