Commit 2a7d5559b346574057dce4672d1ed9aaa9d1e685

Authored by Shaohua Li
Committed by Jens Axboe
1 parent 9cbb175088

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

... ... @@ -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