kernel - Fix issue in UFS related to new nvtruncbuf() API use
commit09327129c8183ca84176e5c2c5c21a2d1638edd6
authorMatthew Dillon <dillon@apollo.backplane.com>
Fri, 29 Jan 2010 18:55:34 +0000 (29 10:55 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Fri, 29 Jan 2010 18:55:34 +0000 (29 10:55 -0800)
treeb314555aba96c2302a4999c3ce0a476d38109cfc
parent6362a262e633b546c510362dad6fd7adfea9f32e
kernel - Fix issue in UFS related to new nvtruncbuf() API use

* When a UFS truncation must downsize a block it must sometimes call
  FSYNC twice, the second time to flush out softdep block dependencies
  related to the original indirect block.

  UFS depends on the first FSYNC call to prevent the buffer cache buffer
  straddling the new file/directory EOF from becoming dirty.  However,
  nvtruncbuf() defeats this by re-dirtying the bp.

  The solution is to simply undirty the bp prior to the second FSYNC,
  which works fine since it will be written out later with a b*write()
  anyway.

* Fixes 'locking against myself' panic w/UFS.

Reported-by: Stathis Kamperis <ekamperi@gmail.com>
sys/vfs/ufs/ffs_inode.c