Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 3 Oct 1998 12:17:12 -0700 (PDT)
From:      Nate Williams <nate@FreeBSD.ORG>
To:        cvs-committers@FreeBSD.ORG, cvs-all@FreeBSD.ORG
Subject:   cvs commit: src/contrib/sys/softupdates ffs_softdep.c
Message-ID:  <199810031917.MAA25250@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
nate        1998/10/03 12:17:12 PDT

  Modified files:
    contrib/sys/softupdates ffs_softdep.c 
  Log:
  Fix 'noatime' bug that was unrelated to use of noatime.
  
  The problem is caused when a directory block is compacted.  When this
  occurs, softdep_change_directoryentry_offset() is called to relocate each
  directory entry and adjust its matching diradd structure, if any, to match
  the new location of the entry.  The bug is that while
  softdep_change_directoryentry_offset() correctly adjusts the offsets of
  the diradd structures on the pd_diraddhd[] lists (which are not yet ready
  to be committed to disk), it fails to adjust the offsets of the diradd
  structures on the pd_pendinghd list (which are ready to be committed to
  disk).  This causes the dependency structures to be inconsistent with
  the buf contents.  Now, if the compaction has moved a directory entry to
  the same offset as one of the diradd structures on the pd_pendinghd list
  *and* a syscall is done that tries to remove this directory entry before
  this directory block has been written to disk (which would empty
  pd_pendinghd), a sanity check in newdirrem() will call panic() when it
  notices that the inode number in the entry that it is to be removed doesn't
  match the inode number in the diradd structure with that offset of that
  entry.
  
  Reviewed by:	Kirk McKusick <mckusick@McKusick.COM>
  Submitted by:	Don Lewis <Don.Lewis@tsc.tdk.com>
  
  Revision  Changes    Path
  1.15      +10 -1     src/contrib/sys/softupdates/ffs_softdep.c



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