Received: by 2002:ac0:950e:0:0:0:0:0 with SMTP id f14csp636927imc; Sat, 16 Mar 2019 11:04:44 -0700 (PDT) X-Google-Smtp-Source: APXvYqw+I2bdV6hczBQaEn6G3eAF8PwaoNGK1cBsbUvXaoHuzBegkS5dyb0RqtlowjSQhLAr8CPY X-Received: by 2002:a17:902:28a7:: with SMTP id f36mr10860272plb.169.1552759484488; Sat, 16 Mar 2019 11:04:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1552759484; cv=none; d=google.com; s=arc-20160816; b=E/WnN/UrcMZn08C56imcpenq19ti4z6d9uv6LvjRzMWTLYux8LCEEfUx6Ie6w8Npsc X1bDcus7nU96n0+uBVsLZEwUK3ILWDMJVXt9IdiVDSx+2aAdwm9q6Py44T397lINIZXv 9BgsTZDGjNoDGTRHGV/PEzN2pFNoaz5lVbkClmc7P/FMV2VXkpiTQ+UbEgEhm6uGjZNz 4AxbqSVl2Er8Qlvu+Hn7PdGkbf6kJqUcXxIR4ficcL18VM4yON+iy1qqP2fLL6N9rD6i 6XvgiQ07yoz2haeZLZjwK0UmCKrYuo1AEtn9287l55/Gt3oCeLYmHZ560TEvMHZzmUaL KmAQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=+H4Asu78BOybMMYm/zG4goDHicRW/UR8XYf7jEe2GwI=; b=Zp+F52N+6Q+038opLF3RzL16CRnCBvK5vDdw03DkhowGTowCa9Sncbkh1lOp3V1xr2 33y9s2c+vroe5xZtrNIUZamGY4HcahJDS+gaPrKEZcaB+tROMrCMLZOaZ4CQ27PD8RT1 dhDWAzJwQW3Qr2tA1xFeDSN3TvyXjOkbBfeN9xnyP/idG/Thy48Ze8GiyHZ8mn7H/MX+ BDY2VasEV/akXmVcsZjSEFp8mEnmSe3tb21kQbF43DhEB6mCTwjgkbzC//G9nS6yerhg 7iki5o23ZBeWnXSv1Vhi9Ujhp0kX23xDuztlAClV8tjaA+Ckdw3M/G3qr0IJGL5plUrl kZSQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Opk2gaHC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k29si4734516pgb.267.2019.03.16.11.04.29; Sat, 16 Mar 2019 11:04:44 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Opk2gaHC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727216AbfCPSDs (ORCPT + 99 others); Sat, 16 Mar 2019 14:03:48 -0400 Received: from mail-lf1-f65.google.com ([209.85.167.65]:38588 "EHLO mail-lf1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726493AbfCPSDr (ORCPT ); Sat, 16 Mar 2019 14:03:47 -0400 Received: by mail-lf1-f65.google.com with SMTP id a6so6651238lfl.5; Sat, 16 Mar 2019 11:03:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=+H4Asu78BOybMMYm/zG4goDHicRW/UR8XYf7jEe2GwI=; b=Opk2gaHCWYRlvARdU89Wj0/oLUfA8I1cYZtCUwaH+cXy4v3qmXfLqKKqurL2DovFd2 Dn/886CDetzQGCmIfcFXE2P314Q91c92Ud+NaKqXrxY8efGUGHBInpfqbHufI083Fms/ X510crI3UIB423QpzdpsnV3bnXhPdf0hr/d5dh0dZ9YBXygozI4Kb4yzianuZ/zh4xiX JfMGq5nryhUvxFvehut7Rq7tA4R9yqWmSmCVphI4YTnFO7AlhfoajWzHnxm8cMDepeWh j770IogqKQxH2gAZa7y/M8nz/pmYn7sPoeVmig8bEwl2HeFQHu1dT1XfAeqCoobk9bq+ yHLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=+H4Asu78BOybMMYm/zG4goDHicRW/UR8XYf7jEe2GwI=; b=in1zFiQ+hMGH8brvjvanxQbvjKGJ78oY+ugIVlxZYpHf+Dr0OfmztCD0BoL6lyFCEq b+qDeBKksOHYmQ7wYNakkNS59UuCFgO+g8jn7ZQz9aYxInOGTfRba2qxDQfbFQl9Xo/c ex08kFISmx2qZiNyfVqSGb5ijtj+QojGEG2Onm4QF4SxJ6CLF322166h8thuaDZPBF+l A0xKRXuhPr7QA0W9KEUyks8k/G+gvN/Svb8WexsWghW59A2sWPQoj8Bt221Z87FzM4kO JCyWvM8siqKSP9ksLUEFBDdNt2b9vfd8DauQxNr3h7Yuo1rKUKPh+DjMnTSA9lxdIGHD TG8Q== X-Gm-Message-State: APjAAAX9fHGeYhoK8jxAUB1DIEpUqowN1J4lUY6zVxJ5BK6yoKuOeN/E XWtm5txFiAVL3HDR7W//pUOoBZ7F4uC3PbKzQU6QnUs= X-Received: by 2002:a19:5506:: with SMTP id n6mr5462486lfe.119.1552759424584; Sat, 16 Mar 2019 11:03:44 -0700 (PDT) MIME-Version: 1.0 References: <20190315075500.27747-1-longli@linuxonhyperv.com> <20190315075500.27747-2-longli@linuxonhyperv.com> In-Reply-To: <20190315075500.27747-2-longli@linuxonhyperv.com> From: Pavel Shilovsky Date: Sat, 16 Mar 2019 11:03:33 -0700 Message-ID: Subject: Re: [Patch v2 2/2] CIFS: Fix an issue with re-sending rdata when transport returning -EAGAIN To: Long Li Cc: Steve French , linux-cifs , samba-technical , Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org =D0=BF=D1=82, 15 =D0=BC=D0=B0=D1=80. 2019 =D0=B3. =D0=B2 00:56, Long Li : > > From: Long Li > > When sending a rdata, transport may return -EAGAIN. In this case > we should re-obtain credits because the session may have been > reconnected. > > Change in v2: adjust_credits before re-sending > > Signed-off-by: Long Li > --- > fs/cifs/file.c | 71 +++++++++++++++++++++++++++++++++-------------------= ------ > 1 file changed, 41 insertions(+), 30 deletions(-) > > diff --git a/fs/cifs/file.c b/fs/cifs/file.c > index 321df1d27422..9d90cc07e38b 100644 > --- a/fs/cifs/file.c > +++ b/fs/cifs/file.c > @@ -3347,44 +3347,55 @@ static int cifs_resend_rdata(struct cifs_readdata= *rdata, > struct TCP_Server_Info *server =3D > tlink_tcon(rdata->cfile->tlink)->ses->server; > > - /* > - * Wait for credits to resend this rdata. > - * Note: we are attempting to resend the whole rdata not in segme= nts > - */ > do { > - rc =3D server->ops->wait_mtu_credits(server, rdata->bytes= , > + if (rdata->cfile->invalidHandle) { > + rc =3D cifs_reopen_file(rdata->cfile, true); > + if (rc =3D=3D -EAGAIN) > + continue; > + else if (rc) > + break; > + } > + > + /* > + * Wait for credits to resend this rdata. > + * Note: we are attempting to resend the whole rdata not = in > + * segments > + */ > + do { > + rc =3D server->ops->wait_mtu_credits(server, rdat= a->bytes, > &rsize, &credits); > > - if (rc) > - goto out; > + if (rc) > + goto fail; > > - if (rsize < rdata->bytes) { > - add_credits_and_wake_if(server, &credits, 0); > - msleep(1000); > - } > - } while (rsize < rdata->bytes); > + if (rsize < rdata->bytes) { > + add_credits_and_wake_if(server, &credits,= 0); > + msleep(1000); > + } > + } while (rsize < rdata->bytes); > + rdata->credits =3D credits; > > - rdata->credits =3D credits; > - rc =3D -EAGAIN; > - while (rc =3D=3D -EAGAIN) { > - rc =3D 0; > - if (rdata->cfile->invalidHandle) > - rc =3D cifs_reopen_file(rdata->cfile, true); > - if (!rc) > - rc =3D server->ops->async_readv(rdata); > - } > + rc =3D adjust_credits(server, &rdata->credits, rdata->byt= es); > + if (!rc) { > + if (rdata->cfile->invalidHandle) > + rc =3D -EAGAIN; > + else > + rc =3D server->ops->async_readv(rdata); > + } > > - if (!rc) { > - /* Add to aio pending list */ > - list_add_tail(&rdata->list, rdata_list); > - return 0; > - } > + /* If the read was successfully sent, we are done */ > + if (!rc) { > + /* Add to aio pending list */ > + list_add_tail(&rdata->list, rdata_list); > + return 0; > + } > > - add_credits_and_wake_if(server, &rdata->credits, 0); > -out: > - kref_put(&rdata->refcount, > - cifs_uncached_readdata_release); > + /* Roll back credits and retry if needed */ > + add_credits_and_wake_if(server, &rdata->credits, 0); > + } while (rc =3D=3D -EAGAIN); > > +fail: > + kref_put(&rdata->refcount, cifs_uncached_readdata_release); > return rc; > } > > -- > 2.14.1 > Reviewed-by: Pavel Shilovsky -- Best regards, Pavel Shilovsky