cvs commit: src/sys/kern kern_acct.c

Robert Watson rwatson at FreeBSD.org
Sun Nov 27 19:09:11 GMT 2005


rwatson     2005-11-27 19:09:10 UTC

  FreeBSD src repository

  Modified files:        (Branch: RELENG_6)
    sys/kern             kern_acct.c 
  Log:
  Merge kern_acct.c:1.76 from HEAD to RELENG_6:
  
    Significant refactoring of the accounting code to improve locking and VFS
    happiness, as well as correct other bugs:
  
    - Replace notion of current and saved accounting credential/vnode with a
      single credential/vnode and an acct_suspended flag.  This simplifies the
      accounting logic substantially.
  
    - Replace acct_mtx with acct_sx, a sleepable lock held exclusively during
      reconfiguration and space polling, but shared during log entry
      generation.  This avoids holding a mutex over sleepable VFS operations.
  
    - Hold the sx lock over the duration of the I/O so that the vnode I/O
      cannot occur after vnode close, which could occur previously if
      accounting was disabled as a process exited.
  
    - Write the accounting log entry with Giant conditionally acquired based
      on the file system where the log is stored.  Previously, the accounting
      code relied on the caller acquiring Giant.
  
    - Acquire Giant conditionally in the accounting callout based on the file
      system where the accounting log is stored.  Run the callout MPSAFE.
  
    - Expose acct_suspended via a read-only sysctl so it is possibly to
      programmatically determine whether accounting is suspended or not without
      attempting to parse logs.
  
    - Check both acct_vp and acct_suspended lock-free before entering the
      accounting sx lock in acct().
  
    - When accounting is disabled due to a VBAD vnode (i.e., forceable unmount),
      generate a log message indicating accounting has been disabled.
  
    - Correct a long-standing bug in how free space is calculated and compared
      to the required space: generate and compare signed results, not unsigned
      results, or negative free space will cause accounting to not be suspended
      when required, or worse, incorrectly resumed once negative free space is
      reached.
  
  Revision  Changes    Path
  1.74.2.2  +92 -107   src/sys/kern/kern_acct.c


More information about the cvs-src mailing list