]> git.baikalelectronics.ru Git - kernel.git/commit
kyber: fix hang on domain token wait queue
authorOmar Sandoval <osandov@fb.com>
Wed, 11 Oct 2017 17:39:15 +0000 (10:39 -0700)
committerJens Axboe <axboe@kernel.dk>
Tue, 17 Oct 2017 22:18:11 +0000 (16:18 -0600)
commit74517b21aa4bbcd3d6e97b80d4f6259d07ac8136
treeb6c504e5f61c4d5712cf4f54e077de551e9467fa
parent2b80e044e13af0ae150aacf63d86c630c635b5ca
kyber: fix hang on domain token wait queue

When we're getting a domain token, if we fail to get a token on our
first attempt, we put the current hardware queue on a wait queue and
then try again just in case a token was freed after our initial attempt
but before we got on the wait queue. If this second attempt succeeds, we
currently leave the hardware queue on the wait queue. Usually this is
okay; we'll just run the hardware queue one extra time when another
token is freed. However, if the hardware queue doesn't have any other
requests waiting, then when it it gets the extra wakeup, it won't have
anything to free and therefore won't wake up any other hardware queues.
If tokens are limited, then we won't make forward progress and the
device will hang.

Reported-by: Bin Zha <zhabin.zb@alibaba-inc.com>
Signed-off-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/kyber-iosched.c