Note: "permalinks" may not be as permanent as we would like,
direct links of old sources may well be a few messages off.
/ 2004-06-08 22:58:21 +0200 \ Bernd Schubert: > I still not understand whats causing this, but I'm pretty sure that the debian > nfs-kernel-server script cannot stop the nfs-server when nfs is started from > heartbeat. Just check it yourself, after running '/etc/init.d/heartbeat > stop', a 'ps ax' should show running nfs-daemons on this system. Those nfsd > processes can only be killed with 'killall -9 nfsd'. So I think after > stopping nfs, the nfs-daemons will survive and cause a stale filehandle when > drbd is stopped, probably they also ignore the 'exportfs -au' command. > I'm also still wondering about the way the debian script is stopping nfs, I > checked the script of several distributions and either nfsd's are immediately > stopped with signal 9 or first with signal 15 and after a short break with > signal 9, however the debian script only stops the daemons with signal 1. stange thing is, that there is a fuser -k -m $device in the drbd script, which *should* deliver a kill -9 ... maybe retrying some more times does help? Index: drbd =================================================================== RCS file: /home/lars/DRBD/CVSHOME/drbd/drbd/scripts/drbd,v retrieving revision 1.58 diff -u -p -r1.58 drbd --- drbd 1 Jun 2004 08:34:34 -0000 1.58 +++ drbd 8 Jun 2004 21:26:11 -0000 @@ -1569,7 +1569,7 @@ become_passive() # {{{2 { trace0 local res=$1 - local errtxt status device command + local errtxt status device command retry get_drbd_status $res || return 10 status=("${RET_VAL[@]}") @@ -1612,19 +1612,22 @@ become_passive() # {{{2 mount_status $device if [ -n "$RET_VAL" ]; then note "'$res' $device is mounted on ${RET_VAL[2]}, trying to unmount" - if ! $UMOUNT $device &> /dev/null ; then + + retry=3 + while [ $retry -gt 0 ] ; do + myexec $UMOUNT $device && break if ! $dontkill ; then # umount failed, kill all processes accessing <device> note "'$res' trying to kill users of $device" myexec $FUSER -k -m $device > /dev/null fi sleep 3 # hopefully the signals get delivered within this time - # try again - myexec $UMOUNT $device || { - # failed again, FATAL - error "$UMOUNT $device FAILED" - return -1 - } + let retry=retry-1 + done + if [ $retry -le 0 ]; then + # failed $retry times, FATAL + error "$UMOUNT $device FAILED" + return -1 fi echo "$link: '$res' $device unmounted" fi