Received: by 2002:ac0:950e:0:0:0:0:0 with SMTP id f14csp635427imc; Sat, 16 Mar 2019 11:02:22 -0700 (PDT) X-Google-Smtp-Source: APXvYqzgvjtFyJHnSvU2yyJNRMZjsHIoSYJM3Re39b1fADt0Iv5d6mCtQQTph2ZT8IiYVm7vupIc X-Received: by 2002:a17:902:1105:: with SMTP id d5mr10958627pla.27.1552759342068; Sat, 16 Mar 2019 11:02:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1552759342; cv=none; d=google.com; s=arc-20160816; b=Yesvn3a/RoTWvYA6+Gw0eQAiVDIahszhzjZUr3qMu/d+N6SbselTBy//MEN5g6HLcC AEYVkO0vzToCu73KQNP1MEZW/gbS0sCi8s0q1hbjJBYU9TUz8Bf+2k07AhBABs4C/rXj v4NfdNZRc6pqdlo9O+F8TZlOHmgVjFYprkF7hoSo1LywHCTRk+UYZku+zHQ03stEQ8t4 Gg0wAzqAex+vpnJgRsqe1VvOUvFDVMHNGukIVLylsPeYGPFZUUdgv5Kin7pG3g5BHQEs gv1dtI9+Z1V7kM99jPVnwnIOkyxxhQ9tYgsibOfrb5WQttIeB32hPsmSwssz2hXE4hov 2DrA== 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=FMDAOxM9QQ0EYxd6HiahnzIt/N/S3BFKKNfFRRGyRIM=; b=dNFAoBVV8+ZBaVHDxkP4oodu9ZMHmboOHvZaGhSdx6gn5+LCcjf9glZz7m7/Vyo10s NKSOBucXIcHm6hSKk93vyK0htwzZtENVA3NjMMfNXlutVxQK/qBjq9BPSgfv9hoTsDl0 9j3ikzxO1Poct3ouDeoQbUfaQ73ebrHI8+23uDROVjO1Q7Uvn4beTdZ9NPud2ulwyXi1 bWshmD+k9CRmHFOIjvJa/Y1ToRPPYgRagb4gqnehKP9utzzRJUTSQLkKc9N+zmCCDxq6 vEr7hJPgxQ1bou4bsvhvF7yrElcfvia0c6PMAO9CAHPWZoorKS+WYPoeGzCvIjh13OXr bIbQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=b4HLseLS; 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 h9si4501485pgp.280.2019.03.16.11.02.07; Sat, 16 Mar 2019 11:02:22 -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=b4HLseLS; 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 S1727233AbfCPSBS (ORCPT + 99 others); Sat, 16 Mar 2019 14:01:18 -0400 Received: from mail-lj1-f195.google.com ([209.85.208.195]:36647 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726571AbfCPSBR (ORCPT ); Sat, 16 Mar 2019 14:01:17 -0400 Received: by mail-lj1-f195.google.com with SMTP id v10so10623563lji.3; Sat, 16 Mar 2019 11:01:15 -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=FMDAOxM9QQ0EYxd6HiahnzIt/N/S3BFKKNfFRRGyRIM=; b=b4HLseLSJ0dkhHUdpobqJx4ntmT1SIAPBI/e+VOI7ySRS0qL4ui0R3oOSqYEEB6kbE tFfEbsAWcmmVN2g266DrfktFka1hKYQsWyr95PTTAKEwZqgXZn75H8VOkuXl6N0jwwgI j5K3fiklqnp8cjRSJ5gHfdV0ZEYLLTQqlZhNujVeCNq9GTmAwzLdYKmLn4Kj8ujr2nL9 LiCMZZnW6PWyNN8N/ZA16iR4JoJdn3y7KeI3R4Vt9AqLpjvlAwtngzkLAnN+YxIrRDQ3 2019RT0He35PrvHTlQ5ftRWnTdX7OVb+jej0/AnbKHQDBy+fTyOR7Y/yxWP2yP9zRgzR Zwdw== 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=FMDAOxM9QQ0EYxd6HiahnzIt/N/S3BFKKNfFRRGyRIM=; b=QXipj4yEGRGmwiDDjLNw2UcaRn/b9JEqHzpU5eLn8t5FbOw0X3B/a4vRXxZyB+BVpi c85KErTcMTdyyOMjd/w0b3MM4Zrb8vBJDZWsV902W8EvtSvzFQIfGon2a1seUYQ04EQG IH6qV0taeohPbP5VHlsJpKeXdiLMIwXmbnazmDMUbKxRgU4wSn3C3XQz+EHE0IQO8ytK PU0q/3ukc9sImjn7DKJLs0JgPbAxhczveerfxSjJnv/MszD0KmLJ3tHTUZhOEuHyQ02o XqVtocfqV+60iGb0+/urfeECnMLFfQR0HIwXaH4W7OVUy0UwMK9IpNdelotyB29U3O4c tDUw== X-Gm-Message-State: APjAAAXWTMzUZpTSzmOojE+sPvpL6pKHmIoDFRuQTEEKxzV/3U3snR9f 4SEr+lE8VHteqiLal/J/UHxIONFjTtPRNwKfdQ== X-Received: by 2002:a2e:9b15:: with SMTP id u21mr5750895lji.82.1552759274778; Sat, 16 Mar 2019 11:01:14 -0700 (PDT) MIME-Version: 1.0 References: <20190315075500.27747-1-longli@linuxonhyperv.com> In-Reply-To: <20190315075500.27747-1-longli@linuxonhyperv.com> From: Pavel Shilovsky Date: Sat, 16 Mar 2019 11:01:03 -0700 Message-ID: Subject: Re: [Patch v2 1/2] CIFS: Fix an issue with re-sending wdata 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 wdata, 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 | 77 ++++++++++++++++++++++++++++++++++------------------= ------ > 1 file changed, 45 insertions(+), 32 deletions(-) > > diff --git a/fs/cifs/file.c b/fs/cifs/file.c > index 9b53f33137b3..321df1d27422 100644 > --- a/fs/cifs/file.c > +++ b/fs/cifs/file.c > @@ -2620,43 +2620,56 @@ cifs_resend_wdata(struct cifs_writedata *wdata, s= truct list_head *wdata_list, > struct TCP_Server_Info *server =3D > tlink_tcon(wdata->cfile->tlink)->ses->server; > > - /* > - * Wait for credits to resend this wdata. > - * Note: we are attempting to resend the whole wdata not in segme= nts > - */ > do { > - rc =3D server->ops->wait_mtu_credits(server, wdata->bytes= , &wsize, > - &credits); > + if (wdata->cfile->invalidHandle) { > + rc =3D cifs_reopen_file(wdata->cfile, false); > + if (rc =3D=3D -EAGAIN) > + continue; > + else if (rc) > + break; > + } > > - if (rc) > - goto out; > > - if (wsize < wdata->bytes) { > - add_credits_and_wake_if(server, &credits, 0); > - msleep(1000); > - } > - } while (wsize < wdata->bytes); > + /* > + * Wait for credits to resend this wdata. > + * Note: we are attempting to resend the whole wdata not = in > + * segments > + */ > + do { > + rc =3D server->ops->wait_mtu_credits(server, wdat= a->bytes, > + &wsize, &credits); > + if (rc) > + goto fail; > + > + if (wsize < wdata->bytes) { > + add_credits_and_wake_if(server, &credits,= 0); > + msleep(1000); > + } > + } while (wsize < wdata->bytes); > + wdata->credits =3D credits; > > - wdata->credits =3D credits; > - rc =3D -EAGAIN; > - while (rc =3D=3D -EAGAIN) { > - rc =3D 0; > - if (wdata->cfile->invalidHandle) > - rc =3D cifs_reopen_file(wdata->cfile, false); > - if (!rc) > - rc =3D server->ops->async_writev(wdata, > + rc =3D adjust_credits(server, &wdata->credits, wdata->byt= es); > + > + if (!rc) { > + if (wdata->cfile->invalidHandle) > + rc =3D -EAGAIN; > + else > + rc =3D server->ops->async_writev(wdata, > cifs_uncached_writedata_release); > - } > + } > > - if (!rc) { > - list_add_tail(&wdata->list, wdata_list); > - return 0; > - } > + /* If the write was successfully sent, we are done */ > + if (!rc) { > + list_add_tail(&wdata->list, wdata_list); > + return 0; > + } > > - add_credits_and_wake_if(server, &wdata->credits, 0); > -out: > - kref_put(&wdata->refcount, cifs_uncached_writedata_release); > + /* Roll back credits and retry if needed */ > + add_credits_and_wake_if(server, &wdata->credits, 0); > + } while (rc =3D=3D -EAGAIN); > > +fail: > + kref_put(&wdata->refcount, cifs_uncached_writedata_release); > return rc; > } > > @@ -2884,12 +2897,12 @@ static void collect_uncached_write_data(struct ci= fs_aio_ctx *ctx) > wdata->bytes, &tmp_from, > ctx->cfile, cifs_sb, &tmp= _list, > ctx); > + > + kref_put(&wdata->refcount, > + cifs_uncached_writedata_r= elease); > } > > list_splice(&tmp_list, &ctx->list); > - > - kref_put(&wdata->refcount, > - cifs_uncached_writedata_release)= ; > goto restart_loop; > } > } > -- > 2.14.1 > Reviewed-by: Pavel Shilovsky -- Best regards, Pavel Shilovsky