Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 12 Nov 2005 10:45:13 +0000 (UTC)
From:      Robert Watson <rwatson@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/kern kern_acct.c
Message-ID:  <200511121045.jACAjDdS098701@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
rwatson     2005-11-12 10:45:13 UTC

  FreeBSD src repository

  Modified files:
    sys/kern             kern_acct.c 
  Log:
  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.
  
  MFC after:      2 weeks
  
  Revision  Changes    Path
  1.76      +92 -107   src/sys/kern/kern_acct.c



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200511121045.jACAjDdS098701>