cvs commit: src/sys/kern vfs_subr.c

Don Lewis truckman at
Fri Sep 2 17:21:56 PDT 2005

truckman    2005-09-03 00:21:56 UTC

  FreeBSD src repository

  Modified files:        (Branch: RELENG_6)
    sys/kern             vfs_subr.c 
  MFC vfs_subr.c 1.636 and 1.642
  vfs_subr.c 1.642 fixes a small race condition in vlrureclaim() and depends
  on 1.636.
    Modified files:
      sys/kern             vfs_subr.c
     - Allow vnlru to drop giant if the filesystem does not require it.  The
       vnlru proc is extremely inefficient, potentially iteration over tens of
       thousands of vnodes without blocking.  Droping Giant allows other threads
       to preempt us although we should revisit the algorithm to fix the runtime
       problems especially since this may hold up all vnode allocations.
     - Remove the LK_NOWAIT from the VOP_LOCK in vlrureclaim.  This provides
       a natural blocking point to help alleviate the situation described above
       although it may not technically be desirable.
     - yield after we make a pass on all mount points to prevent us from
       blocking other threads which require Giant.
    MFC after:      2 weeks
    Revision  Changes    Path
    1.636     +11 -2     src/sys/kern/vfs_subr.c
    Modified files:
      sys/kern             vfs_subr.c
    Back out the removal of LK_NOWAIT from the VOP_LOCK() call in
    vlrureclaim() in vfs_subr.c 1.636  because waiting for the vnode
    lock aggravates an existing race condition.  It is also undesirable
    according to the commit log for 1.631.
    Fix the tiny race condition that remains by rechecking the vnode
    state after grabbing the vnode lock and grabbing the vnode interlock.
    Fix the problem of other threads being starved (which 1.636 attempted
    to fix by removing LK_NOWAIT) by calling uio_yield() periodically
    in vlrureclaim().  This should be more deterministic than hoping
    that VOP_LOCK() without LK_NOWAIT will block, which may not happen
    in this loop.
    Reviewed by:    kan
    MFC after:      5 days
    Revision  Changes    Path
    1.642     +37 -7     src/sys/kern/vfs_subr.c
  Approved by:    re (scottl)
  Revision   Changes    Path
  1.635.2.4  +46 -7     src/sys/kern/vfs_subr.c

More information about the cvs-src mailing list