• Tejun Heo's avatar
    writeback: make writeback initiation functions handle multiple bdi_writeback's · db125360
    Tejun Heo authored
    [try_]writeback_inodes_sb[_nr]() and sync_inodes_sb() currently only
    handle dirty inodes on the root wb (bdi_writeback) of the target bdi.
    This patch implements bdi_split_work_to_wbs() and use it to make these
    functions handle multiple wb's.
    
    bdi_split_work_to_wbs() takes a base wb_writeback_work and create
    clones of it and issue them to the wb's of the target bdi.  The base
    work's nr_pages is distributed using wb_split_bdi_pages() -
    ie. according to each wb's write bandwidth's proportion in the bdi.
    
    Cloning a bdi involves memory allocation which may fail.  In such
    cases, bdi_split_work_to_wbs() issues the base work directly and waits
    for its completion before proceeding to the next wb to guarantee
    forward progress and correctness under memory pressure.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Jens Axboe <axboe@kernel.dk>
    Cc: Jan Kara <jack@suse.cz>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    db125360
fs-writeback.c 51.9 KB