NetBSD-Bugs archive

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

kern/40562: busy loop in ffs_sync when unmounting a file system



>Number:         40562
>Category:       kern
>Synopsis:       busy loop in ffs_sync when unmounting a file system
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Feb 06 00:10:00 +0000 2009
>Originator:     YAMAMOTO Takashi <yamt%mwd.biglobe.ne.jp@localhost>
>Release:        NetBSD 5.99.7
>Organization:
        
>Environment:
        
        
        amd64
>Description:
        it seems that ffs_fsync failed to write out dirty blocks
        for VBLK if the file system which the VBLK special file is on
        is mounted with wapbl.  it causes ffs_sync busy-loop with calling
        VOP_FSYNC on devvp.

>How-To-Repeat:
        make /dev an ffs with logging, run the following,
        and see that umount takes too long.

        rm foo
        dd if=/dev/zero of=foo bs=1m count=16
        vnconfig vnd0 foo
        newfs -F /dev/rvnd0d
        mount /dev/vnd0d /mnt
        touch /mnt/0
        umount /dev/vnd0d

>Fix:
        ensure that ffs_fsync do vflushbuf equivalent for VBLK.

        i'd suggest:

        - ensure that all VOP_FSYNC implementations call VFS_FSYNC
          for VBLK if a file system is mounted on it.
        - make ffs VFS_FSYNC have its own function, say, ffs_vfs_fsync,
          rather than sharing ffs_full_fsync or ffs_fsync.
        - move the softdep/wapbl VBLK handling for a mounted file system
          from ffs_full_fsync to ffs_vfs_fsync.
        - kill FSYNC_VFS.

>Unformatted:
        
        


Home | Main Index | Thread Index | Old Index