[Hyper-V] vmbus: Fix a bug in hv_need_to_signal_on_read()
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
linux (Ubuntu) |
Fix Released
|
High
|
Unassigned | ||
Trusty |
Fix Released
|
High
|
Unassigned | ||
Wily |
Fix Released
|
High
|
Unassigned | ||
Xenial |
Fix Released
|
High
|
Unassigned | ||
linux-lts-vivid (Ubuntu) |
Fix Committed
|
High
|
Unassigned | ||
Trusty |
Fix Released
|
High
|
Unassigned |
Bug Description
The following patch has been submitted upstream in response to investigation of customer issues with network connections hanging under high load.
On the consumer side, we have interrupt driven flow management of the producer. It is sufficient to base the signalling decision on the amount of space that is available to write after the read is complete. The current code samples the previous available space and uses this in making the signalling decision. This state can be stale and is unnecessary. Since the state can be stale, we end up not signalling the host (when we should) and this can result in a hang. Fix this problem by removing the unnecessary check.
I would like to thank Arseney Romanenko <email address hidden>
for pointing out this bug.
Signed-off-by: K. Y. Srinivasan <email address hidden>
Tested-by: Dexuan Cui <email address hidden>
Cc: <email address hidden>
---
drivers/
1 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/
index 5613e2b..085003a 100644
--- a/drivers/
+++ b/drivers/
@@ -103,8 +103,7 @@ static bool hv_need_
* there is room for the producer to send the pending packet.
*/
-static bool hv_need_
- struct hv_ring_buffer_info *rbi)
+static bool hv_need_
{
u32 cur_write_sz;
u32 r_size;
@@ -120,7 +119,7 @@ static bool hv_need_
- if ((prev_write_sz < pending_sz) && (cur_write_sz >= pending_sz))
+ if (cur_write_sz >= pending_sz)
return false;
@@ -455,7 +454,7 @@ int hv_ringbuffer_
/* Update the read index */
- *signal = hv_need_
+ *signal = hv_need_
return ret;
}
We have customers who are encountering this issue. Although this patch is not yet accepted upstream, we would like to get them a test kernel as soon as we can.
Changed in linux (Ubuntu Xenial): | |
status: | In Progress → Fix Committed |
Changed in linux-lts-vivid (Ubuntu Trusty): | |
status: | In Progress → Fix Committed |
Changed in linux (Ubuntu Wily): | |
status: | In Progress → Fix Committed |
Changed in linux (Ubuntu Trusty): | |
status: | In Progress → Fix Committed |
Changed in linux-lts-vivid (Ubuntu): | |
status: | In Progress → Fix Committed |
tags: |
added: verification-done-vivid removed: verification-needed-vivid |
This bug is missing log files that will aid in diagnosing the problem. From a terminal window please run:
apport-collect 1556264
and then change the status of the bug to 'Confirmed'.
If, due to the nature of the issue you have encountered, you are unable to run this command, please add a comment stating that fact and change the bug status to 'Confirmed'.
This change has been made by an automated script, maintained by the Ubuntu Kernel Team.