提交 3888f36e 编写于 作者: J Josef Bacik 提交者: Xie XiuQi

rq-qos: don't reset has_sleepers on spurious wakeups

mainline inclusion
from mainline-5.3-rc2
commit 64e7ea875ef63b2801be7954cf7257d1bfccc266
category: bugfix
bugzilla: 21211
CVE: NA

---------------------------

If we raced with somebody else getting an inflight counter we could fail
to get an inflight counter with no sleepers on the list, and thus need
to go to sleep.  In this case has_sleepers should be true because we are
now relying on the waker to get our inflight counter for us.  And in the
case of spurious wakeups we'd still want this to be the case.  So set
has_sleepers to true if we went to sleep to make sure we're woken up the
proper way.
Reviewed-by: NOleg Nesterov <oleg@redhat.com>
Signed-off-by: NJosef Bacik <josef@toxicpanda.com>
Signed-off-by: NJens Axboe <axboe@kernel.dk>

Conflicts:
	block/blk-rq-qos.c
[yan: the code was in __wbt_wait()]
Signed-off-by: NJason Yan <yanaijie@huawei.com>
Reviewed-by: NYufen Yu <yuyufen@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 f42073ee
...@@ -569,7 +569,7 @@ static void __wbt_wait(struct rq_wb *rwb, enum wbt_flags wb_acct, ...@@ -569,7 +569,7 @@ static void __wbt_wait(struct rq_wb *rwb, enum wbt_flags wb_acct,
} else } else
io_schedule(); io_schedule();
has_sleeper = false; has_sleeper = true;
} while (1); } while (1);
finish_wait(&rqw->wait, &data.wq); finish_wait(&rqw->wait, &data.wq);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册