NetBSD-Bugs archive

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

bin/41766: system will hang in reboot or shutdown if tmpfs contains more data than phys mem available



>Number:         41766
>Category:       bin
>Synopsis:       system will hang in reboot or shutdown if tmpfs contains more 
>data than phys mem available
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    bin-bug-people
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Wed Jul 22 12:45:00 +0000 2009
>Originator:     Wolfgang Stukenbrock
>Release:        NetBSD 4.0
>Organization:
Dr. Nagler & Company GmbH
>Environment:
        
        
System: NetBSD s012 4.0 NetBSD 4.0 (NSW-S012) #9: Fri Mar 13 12:31:52 CET 2009 
wgstuken@s012:/usr/src/sys/arch/amd64/compile/NSW-S012 amd64
Architecture: x86_64
Machine: amd64
>Description:
        During reboot or shutdown the last step is to execute /etc/rc.d/swap1 
in case
        "swapoff=YES" is set in rc.conf. Setting this is required if the swap 
space resides
        on a raid device to avoid rebuilding the parity on every boot.
        If there are some tmpfs filesystems, the data of theese resides in the 
swap space and
        if there is a large amount of data present, unmounting of the swap 
space will fail.
        The system will hang.
>How-To-Repeat:
        Setup a large swap space, add a tmpfs, fill e.g. twice the amount of 
data of the phys memory
        available in the system into the tmpfs.
        Set swapoff=YES in rc.conf and try to reboot the system. You will get 
into problems.
>Fix:
        The fix below simply removes all tmpfs filesystems prior unmounting the 
swap space.
        The fix is added to swap1 that is executed as last script according to 
the rcorder output
        created in rc.shutdown.
        remark: If someone is using network swap space it may be already too 
late to do it here,
                but umounting in the swap2 script would happen too early and 
some problems with
                still running processes may pop up.
        It is clear that this fix will not solve all possible problems with 
"out of swap space" during
        shutdown. E.g. if there is more memroy allocated to processes than phys 
memory is available,
        this fix will help nothing. but in this case the kernel itself tries to 
work around the problem
        by killing some processes.

        The following patch will add the removeal of all tmpfs filesystems in 
etc/rc.d/swap1
        in front of the swapspace removal.

--- swap1       2009/07/22 12:32:13     1.1
+++ swap1       2009/07/22 12:32:24
@@ -29,6 +29,16 @@
 {
        if checkyesno swapoff || [ -n "$rc_force" ]; then
                echo "Removing block-type swap devices"
+#
+#      Check if there is tmpfs present.
+#      The problem is that we my hang in swapctl -U if there
+#      is not enougth physical memory to hold the contents.
+#
+#      Remark: We assume that there are no other mount points inside of tmpfs
+#              and this will not solve the problem for more process memory
+#              than physical memory.
+#
+               umount -aft tmpfs
                swapctl -U -t blk
        fi
 }

>Unformatted:
        
        


Home | Main Index | Thread Index | Old Index