Skip to content
  • Konstantin Belousov's avatar
    Do not leak B_BARRIER. · e1ef4c29
    Konstantin Belousov authored
    Normally when a buffer with B_BARRIER is written, the flag is cleared
    by g_vfs_strategy() when creating bio.  But in some cases FFS buffer
    might not reach g_vfs_strategy(), for instance when copy-on-write
    reports an error like ENOSPC.  In this case buffer is returned to
    dirty queue and might be written later by other means.  Among then
    bdwrite() reasonably asserts that B_BARRIER is not set.
    
    In fact, the only current use of B_BARRIER is for lazy inode block
    initialization, where write of the new inode block is fenced against
    cylinder group write to mark inode as used.  The situation could be
    seen that we break dependency by updating cg without written out
    inode.  Practically since CoW was not able to find space for a copy of
    inode block, for the same reason cg group block write should fail.
    
    Reported by:	pho
    Discussed with:	chs, imp, mckusick
    Sponsored by:	The FreeBSD Foundation
    MFC after:	1 week
    Differential revision:	https://reviews.freebsd.org/D26511
    e1ef4c29