From: Greg Kroah-Hartman Date: Mon, 28 Jan 2019 10:15:14 +0000 (+0100) Subject: 4.4-stable patches X-Git-Tag: v4.9.154~47 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ae48c054777ba2a9d283c7940a111cade7d18c54;p=thirdparty%2Fkernel%2Fstable-queue.git 4.4-stable patches added patches: cifs-fix-possible-hang-during-async-mtu-reads-and-writes.patch --- diff --git a/queue-4.4/cifs-fix-possible-hang-during-async-mtu-reads-and-writes.patch b/queue-4.4/cifs-fix-possible-hang-during-async-mtu-reads-and-writes.patch new file mode 100644 index 00000000000..7f159339722 --- /dev/null +++ b/queue-4.4/cifs-fix-possible-hang-during-async-mtu-reads-and-writes.patch @@ -0,0 +1,55 @@ +From acc58d0bab55a50e02c25f00bd6a210ee121595f Mon Sep 17 00:00:00 2001 +From: Pavel Shilovsky +Date: Thu, 17 Jan 2019 08:21:24 -0800 +Subject: CIFS: Fix possible hang during async MTU reads and writes + +From: Pavel Shilovsky + +commit acc58d0bab55a50e02c25f00bd6a210ee121595f upstream. + +When doing MTU i/o we need to leave some credits for +possible reopen requests and other operations happening +in parallel. Currently we leave 1 credit which is not +enough even for reopen only: we need at least 2 credits +if durable handle reconnect fails. Also there may be +other operations at the same time including compounding +ones which require 3 credits at a time each. Fix this +by leaving 8 credits which is big enough to cover most +scenarios. + +Was able to reproduce this when server was configured +to give out fewer credits than usual. + +The proper fix would be to reconnect a file handle first +and then obtain credits for an MTU request but this leads +to bigger code changes and should happen in other patches. + +Cc: +Signed-off-by: Pavel Shilovsky +Signed-off-by: Steve French +Signed-off-by: Greg Kroah-Hartman + +--- + fs/cifs/smb2ops.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/fs/cifs/smb2ops.c ++++ b/fs/cifs/smb2ops.c +@@ -143,14 +143,14 @@ smb2_wait_mtu_credits(struct TCP_Server_ + + scredits = server->credits; + /* can deadlock with reopen */ +- if (scredits == 1) { ++ if (scredits <= 8) { + *num = SMB2_MAX_BUFFER_SIZE; + *credits = 0; + break; + } + +- /* leave one credit for a possible reopen */ +- scredits--; ++ /* leave some credits for reopen and other ops */ ++ scredits -= 8; + *num = min_t(unsigned int, size, + scredits * SMB2_MAX_BUFFER_SIZE); + diff --git a/queue-4.4/series b/queue-4.4/series index 6de5ccf8e3b..96f3e6dfc81 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -14,3 +14,4 @@ char-mwave-fix-potential-spectre-v1-vulnerability.patch staging-rtl8188eu-add-device-code-for-d-link-dwa-121-rev-b1.patch tty-handle-problem-if-line-discipline-does-not-have-receive_buf.patch tty-n_hdlc-fix-__might_sleep-warning.patch +cifs-fix-possible-hang-during-async-mtu-reads-and-writes.patch