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