diff options
author | Neil Brown <neilb@suse.de> | 2015-06-15 08:55:30 +0300 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2015-06-16 18:13:21 +0300 |
commit | 298073181112a6ab6c30fe7971b99de968daf81e (patch) | |
tree | 9e5475e6fa6b3816663d26e33d80ee1182c8f487 /Documentation | |
parent | 6f02dc88be1d5ecfcc2b708250f4e5d49295326c (diff) | |
download | linux-298073181112a6ab6c30fe7971b99de968daf81e.tar.xz |
SUNRPC: never enqueue a ->rq_cong request on ->sending
If the sending queue has a task without ->rq_cong set at the front,
and then a number of tasks with ->rq_cong set such that they use
the entire congestion window, then the queue deadlocks. The first
entry cannot be processed until later entries complete.
This scenario has been seen with a client using UDP to access a server,
and the network connection breaking for a period of time - it doesn't
recover.
It never really makes sense for an ->rq_cong request to be on the ->sending
queue, but it can happen when a request is being retried, and finds
the transport if locked (XPRT_LOCKED). In this case we simple call
__xprt_put_cong() and the deadlock goes away.
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'Documentation')
0 files changed, 0 insertions, 0 deletions