• Nick Piggin's avatar
    fs: remove WB_SYNC_HOLD · 4f5a99d6
    Nick Piggin authored
    Remove WB_SYNC_HOLD.  The primary motiviation is the design of my
    anti-starvation code for fsync.  It requires taking an inode lock over the
    sync operation, so we could run into lock ordering problems with multiple
    inodes.  It is possible to take a single global lock to solve the ordering
    problem, but then that would prevent a future nice implementation of "sync
    multiple inodes" based on lock order via inode address.
    
    Seems like a backward step to remove this, but actually it is busted
    anyway: we can't use the inode lists for data integrity wait: an inode can
    be taken off the dirty lists but still be under writeback.  In order to
    satisfy data integrity semantics, we should wait for it to finish
    writeback, but if we only search the dirty lists, we'll miss it.
    
    It would be possible to have a "writeback" list, for sys_sync, I suppose.
    But why complicate things by prematurely optimise?  For unmounting, we
    could avoid the "livelock avoidance" code, which would be easier, but
    again premature IMO.
    
    Fixing the existing data integrity problem will come next.
    Signed-off-by: default avatarNick Piggin <npiggin@suse.de>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    4f5a99d6
fs-writeback.c 22 KB