Bug 76831

Summary: function halt_get_remaining() in 'halt' script not entirely correct
Product: [Retired] Red Hat Linux Reporter: Michal Jaegermann <michal>
Component: initscriptsAssignee: Bill Nottingham <notting>
Status: CLOSED RAWHIDE QA Contact: Brock Organ <borgan>
Severity: medium Docs Contact:
Priority: medium    
Version: 8.0CC: rvokal
Target Milestone: ---   
Target Release: ---   
Hardware: i386   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2003-01-14 05:02:54 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Michal Jaegermann 2002-10-27 19:33:39 UTC
Description of Problem:

The problem is that if a 'tmpfs' file system will be mounted following
suggestions from /usr/src/linux-2.4/Documentation/filesystems/tmpfs.txt,
i.e. 'mount -t tmpfs tmpfs /some/where', then the first field shown by
/proc/mounts will be not "none" and this file system will be printed
twice by the first and third invocations of awk.  Here is a corrected
function which, BTW, is calling awk only once:

halt_get_remaining() {
    awk '$2 ~ /^\/$|^\/proc|^\/dev/{next}
    $3 == "tmpfs" {print $2 ; next}
    /(^#|loopfs|autofs|devfs|^none|^\/dev\/root)/ {next}
    {print $2}' /proc/mounts
}

and here is an alternative implemented only in shell

halt_get_remaining() {
    local mpnt fs type rest all
    while read mpnt fs type rest ; do
        case "$fs" in
            /|/proc*|/dev*) continue ;;
        esac
        if [ "$type"  = tmpfs ] ; then
            echo $fs
            continue
        fi
        all="$mpnt $fs $type"
        case "$all" in
            \#*|*loopfs*|*autofs*|*devfs*|*tmpfs*|none*|/dev/root*) continue ;;
        esac
        echo $fs
    done < /proc/mounts
}

Checks for /dev/root and comment lines are likely superflous, but...
Also likely one check for "$all" can be replaced by separate, simpler, checks
for "$mpnt" and "$type" but this changes somewhat semantics of the original.

The other thing is that if procfs happens to be mounted also in some other
place but /proc, which happens, we likely want to print that as well so
this should really be
    $3 == "tmpfs" || $3 == "procfs {print $2 ; next}
and a similar obvious change in a shell version.

Comment 1 Michal Jaegermann 2002-10-27 19:41:30 UTC
Er.. '$3 == "tmpfs" || $3 == "proc" {print $2 ; next}' in the above
(don't type on-line!) but otherwise like it should be.

Comment 2 Bill Nottingham 2003-01-14 05:02:54 UTC
Added in 7.03-1.