• N
    drbd: remove BIOSET_NEED_RESCUER flag from drbd_{md_,}io_bio_set · 974c5856
    NeilBrown 提交于
    Careful analysis shows that this flag is not needed.
    
    The RESCUER flag is only needed when a make_request_fn might:
     - allocate a bio from the bioset
     - submit it with generic_make_request() or similar
     - allocate another bio from the bioset
    
    The second allocation can block until the first bio is processed, so
    a rescuer is needed to ensure the first bio does get processed.  With
    a rescuer it will only get processed when the make_request_fn completes.
    
    In drbd, allocations from drbd_io_bio_set happen from drbd_new_req()
    or w_restart_disk_io() which is only called to handle
    RESTART_FROZEN_DISK_IO.
    
    In former is called precisely once from the make_request_fn.
    The later is never called by within the make_request_fn.
    
    So there cannot be two allocations in the same call to the
    make_request_fn, so a rescuer is not needed.
    
    Allocations from drbd_md_io_bio_set are used for IO to the bitmap and
    the activity log.  There are only accessed from worker threads and
    workqueues, never directly from make_request_fn.
    Again, the rescuer isn't needed.
    Signed-off-by: NNeilBrown <neilb@suse.com>
    Signed-off-by: NPhilipp Reisner <philipp.reisner@linbit.com>
    Signed-off-by: NJens Axboe <axboe@kernel.dk>
    974c5856
drbd_main.c 112.7 KB