• A
    writeback: simplify bdi code a little · 080dcec4
    Artem Bityutskiy 提交于
    This patch simplifies bdi code a little by removing the 'pending_list' which is
    redundant. Indeed, currently the forker thread ('bdi_forker_thread()') is
    working like this:
    
    1. In a loop, fetch all bdi's which have works but have no writeback thread and
       move them to the 'pending_list'.
    2. If the list is empty, sleep for 5 sec.
    3. Otherwise, take one bdi from the list, fork the writeback thread for this
       bdi, and repeat the loop.
    
    IOW, it first moves everything to the 'pending_list', then process only one
    element, and so on. This patch simplifies the algorithm, which is now as
    follows.
    
    1. Find the first bdi which has a work and remove it from the global list of
       bdi's (bdi_list).
    2. If there was not such bdi, sleep 5 sec.
    3. Fork the writeback thread for this bdi and repeat the loop.
    
    IOW, now we find the first bdi to process, process it, and so on. This is
    simpler and involves less lists.
    
    The bonus now is that we can get rid of a couple of functions, as well as
    remove complications which involve 'rcu_call()' and 'bdi->rcu_head'.
    
    This patch also makes sure we use 'list_add_tail_rcu()', instead of plain
    'list_add_tail()', but this piece of code is going to be removed in the next
    patch anyway.
    Signed-off-by: NArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
    Reviewed-by: NChristoph Hellwig <hch@lst.de>
    Signed-off-by: NJens Axboe <jaxboe@fusionio.com>
    080dcec4
backing-dev.h 9.4 KB