• Ilya Dryomov's avatar
    rbd: don't move requests to the running list on errors · ded080c8
    Ilya Dryomov authored
    The running list is supposed to contain requests that are pinning the
    exclusive lock, i.e. those that must be flushed before exclusive lock
    is released.  When wake_lock_waiters() is called to handle an error,
    requests on the acquiring list are failed with that error and no
    flushing takes place.  Briefly moving them to the running list is not
    only pointless but also harmful: if exclusive lock gets acquired
    before all of their state machines are scheduled and go through
    rbd_lock_del_request(), we trigger
    
        rbd_assert(list_empty(&rbd_dev->running_list));
    
    in rbd_try_acquire_lock().
    
    Cc: stable@vger.kernel.org
    Fixes: 637cd060 ("rbd: new exclusive lock wait/wake code")
    Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
    Reviewed-by: default avatarDongsheng Yang <dongsheng.yang@easystack.cn>
    ded080c8
rbd.c 187 KB