cvs commit: src/sys/kern vfs_cluster.c vfs_mount.c vfs_subr.c vfs_sync.c vfs_syscalls.c src/sys/sys vnode.h src/sys/vfs/msdosfs msdosfs_vfsops.c
Matthew Dillon
dillon at crater.dragonflybsd.org
Sat May 17 22:55:56 PDT 2008
dillon 2008/05/17 22:54:31 PDT
DragonFly src repository
Modified files:
sys/kern vfs_cluster.c vfs_mount.c vfs_subr.c
vfs_sync.c vfs_syscalls.c
sys/sys vnode.h
sys/vfs/msdosfs msdosfs_vfsops.c
Log:
Fix a number of core kernel issues related to HAMMER operation.
* The cluster code was incorrectly using the maximum IO size from
the filesystem on which /dev is mounted instead of the maximum
IO size of the block device. This became evident when HAMMER
(with 16K blocks) tried to call cluster_read() via /dev/ad6s1h
(on UFS with 8K blocks).
* Change the way the VNLRU code works to avoid an infinite loop in
vmntvnodescan(). The vnode LRU recycling code was cycling vnodes
from the head of mp->mnt_nvnodelist to the tail. Under certain heavy
load conditions this could cause a vmntvnodescan() to never finish
running and eventually hit a count assertion (at 1,000,000 vnodes scanned).
Instead of cycling the vnodes in the mnt_nvnodelist, use the syncer
vnode (mount->mnt_syncer) as a placemarker and move *IT* within the
list to represent the LRU scan. By not cycling vnodes to the end
of the list, vmntvnodescan() can no longer get into an infinite loop.
* Change the mount->mnt_syncer logic slightly to avoid races against
a background sync while unmounting. The field is no longer cleared
by the sync_reclaim() call but is instead cleared by the unmount code
before vrele()ing the special vnode.
Revision Changes Path
1.36 +18 -7 src/sys/kern/vfs_cluster.c
1.33 +30 -21 src/sys/kern/vfs_mount.c
1.114 +16 -0 src/sys/kern/vfs_subr.c
1.18 +8 -1 src/sys/kern/vfs_sync.c
1.127 +10 -2 src/sys/kern/vfs_syscalls.c
1.79 +1 -0 src/sys/sys/vnode.h
1.50 +1 -4 src/sys/vfs/msdosfs/msdosfs_vfsops.c
http://www.dragonflybsd.org/cvsweb/src/sys/kern/vfs_cluster.c.diff?r1=1.35&r2=1.36&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/vfs_mount.c.diff?r1=1.32&r2=1.33&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/vfs_subr.c.diff?r1=1.113&r2=1.114&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/vfs_sync.c.diff?r1=1.17&r2=1.18&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/vfs_syscalls.c.diff?r1=1.126&r2=1.127&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/sys/vnode.h.diff?r1=1.78&r2=1.79&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/msdosfs/msdosfs_vfsops.c.diff?r1=1.49&r2=1.50&f=u
More information about the Commits
mailing list