NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

kern/41056: "rm -rf" on tmpfs can fail



>Number:         41056
>Category:       kern
>Synopsis:       "rm -rf" on tmpfs can fail
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun Mar 22 11:55:00 +0000 2009
>Originator:     Alan Barrett
>Release:        NetBSD 5.99.8
>Organization:
Not much
>Environment:
System: NetBSD 5.99.8 i386
>Description:
        Attempting to delete a directory using "rm -rf" on tmpfs
        can fail
>How-To-Repeat:
        Run the following python program.  It works find if the system
        is otherwise idle, but if the system is heavily loaded and /tmp
        is a tmpfs fiel system then it sometimes prints messages of the
        form

        rm: /tmp/tmpfstest.py.1RYP6C.tmp: Directory not empty

#!/usr/bin/env python2.4

import os
import sys
import tempfile

def make_temp_dir():
    """Creates a temporary directory and returns its name.
    """
    dirname = tempfile.mkdtemp(".tmp", os.path.basename(sys.argv[0]) + ".")
    return dirname

def delete_temp_dir(dirname):
    """Deletes the temporary directory.
    """
    os.spawnvp(os.P_WAIT, 'rm', ['rm', '-rf', dirname])

def test_in_temp_dir(testfunc):
    """Create a temporary directory, perform a function in that
    directory, then delete the directory.  testfunc is a function taking
    one argument: the name of the temporary directory.
    """
    prev_cwd = os.getcwd()
    tempdir = make_temp_dir()
    os.chdir(tempdir)
    result = testfunc(tempdir)
    os.chdir(prev_cwd)
    delete_temp_dir(tempdir)
    return result

def some_tests(tempdir):
    """A function intended to be invoked from test_in_temp_dir.
    Create some subdirectories and files inside the temp dir.
    """
    for d in ["foo", "foo/bar"]:
        os.mkdir(d)
    for f in ["foo/bar/1", "foo/bar/2"]:
        open(f, "w").write("stuff")

if __name__ == "__main__":
    i = 0
    while True:
        i += 1
        sys.stderr.write(".")
        test_in_temp_dir(some_tests)

>Fix:
        Unknown



Home | Main Index | Thread Index | Old Index