Commit 2a7d5559b346574057dce4672d1ed9aaa9d1e685
Committed by
Jens Axboe
1 parent
9cbb175088
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
block: stack unplug
MD raid1 prepares to dispatch request in unplug callback. If make_request in low level queue also uses unplug callback to dispatch request, the low level queue's unplug callback will not be called. Recheck the callback list helps this case. Signed-off-by: Shaohua Li <shli@fusionio.com> Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Showing 1 changed file with 7 additions and 8 deletions Side-by-side Diff
block/blk-core.c
... | ... | @@ -2913,17 +2913,16 @@ |
2913 | 2913 | { |
2914 | 2914 | LIST_HEAD(callbacks); |
2915 | 2915 | |
2916 | - if (list_empty(&plug->cb_list)) | |
2917 | - return; | |
2916 | + while (!list_empty(&plug->cb_list)) { | |
2917 | + list_splice_init(&plug->cb_list, &callbacks); | |
2918 | 2918 | |
2919 | - list_splice_init(&plug->cb_list, &callbacks); | |
2920 | - | |
2921 | - while (!list_empty(&callbacks)) { | |
2922 | - struct blk_plug_cb *cb = list_first_entry(&callbacks, | |
2919 | + while (!list_empty(&callbacks)) { | |
2920 | + struct blk_plug_cb *cb = list_first_entry(&callbacks, | |
2923 | 2921 | struct blk_plug_cb, |
2924 | 2922 | list); |
2925 | - list_del(&cb->list); | |
2926 | - cb->callback(cb); | |
2923 | + list_del(&cb->list); | |
2924 | + cb->callback(cb); | |
2925 | + } | |
2927 | 2926 | } |
2928 | 2927 | } |
2929 | 2928 |