• J
    btrfs: replace cleaner_delayed_iput_mutex with a waitqueue · 034f784d
    Josef Bacik 提交于
    The throttle path doesn't take cleaner_delayed_iput_mutex, which means
    we could think we're done flushing iputs in the data space reservation
    path when we could have a throttler doing an iput.  There's no real
    reason to serialize the delayed iput flushing, so instead of taking the
    cleaner_delayed_iput_mutex whenever we flush the delayed iputs just
    replace it with an atomic counter and a waitqueue.  This removes the
    short (or long depending on how big the inode is) window where we think
    there are no more pending iputs when there really are some.
    
    The waiting is killable as it could be indirectly called from user
    operations like fallocate or zero-range. Such call sites should handle
    the error but otherwise it's not necessary. Eg. flush_space just needs
    to attempt to make space by waiting on iputs.
    Signed-off-by: NJosef Bacik <josef@toxicpanda.com>
    [ add killable comment and changelog parts ]
    Signed-off-by: NDavid Sterba <dsterba@suse.com>
    034f784d
disk-io.c 124.2 KB