Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1118255yba; Thu, 9 May 2019 11:02:08 -0700 (PDT) X-Google-Smtp-Source: APXvYqy2XKUYIsPTZ2e5zN1xY6k8GDFTLfO6+B94QmNg5qH0Z2u5cyuP11gRBZQ3SVdUveId0261 X-Received: by 2002:a17:902:aa5:: with SMTP id 34mr7041234plp.263.1557424928150; Thu, 09 May 2019 11:02:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557424928; cv=none; d=google.com; s=arc-20160816; b=YH6CPl5//QcywbsXvefyjyt0HggzCyQgnLyP9eOSqQ+5Oabs76qx2VJCJx6k8RuzqL DzQ0zqJL6JH4aZjRcDfDgn80qwg5xB1iOI3eNNbd0VLBs6IavT+1m2XlOenafzTRvQHu Xe6B1mvOtzVkj6TeXH4KGn8hcJMzuwlokd21/RqEXRVtMe672mz5HhGtYaujD0q7WS3t DBH5EJZeO7hEsTz3fhSTUjALJktr+IjA9C0IS4OTwnn8KxyLG3y755ukIP9qfV9e1p+U BnF3OWYf3j9xClOrLQRDGtE+uza5u7wgRBVqUB9KUz8CQYPEPijysiTg/yD+wLHqtBYA Op5w== 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=8IBAb1U4AHGolLyRh4wnILWJ7YPjMF8I4QRhEu/lDNQ=; b=eFDkd/oYSJJ0eJ//XMZ3B+mbjc8lz3ZI2Sl4WI1zcynNRAh+Bhjc6mc6Mc9qSiD78c rv9JJ4DhLTspqlLChB5D4/7ynZCfChFtpUOA8AY7vA1RjtTr/7mMmTAWLqrrMNOryctB INhxwWD7eMB8lMBq5eLhNQDOPh8sFQH3+2u/WsKUJdllSqU9rIyw4M3gjppOqTxwGR/L KoNJ68hZ3iVSKoE/RQ558OCQwcLwf/3ZPFBBp7FMnyZ/LByM8SzDdq61pcQg8BLswSzK jler4lxP7ce1qvip5UpPwwclCKdOvQzPZHwPSDKRY1H4aWnBKFaQHz5LHUOt4L0ypREN D3pg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=oZz3d9Y8; 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 q12si4241618pgh.594.2019.05.09.11.01.50; Thu, 09 May 2019 11:02:08 -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=oZz3d9Y8; 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 S1726779AbfEISAp (ORCPT + 99 others); Thu, 9 May 2019 14:00:45 -0400 Received: from mail-lf1-f66.google.com ([209.85.167.66]:38063 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726658AbfEISAp (ORCPT ); Thu, 9 May 2019 14:00:45 -0400 Received: by mail-lf1-f66.google.com with SMTP id y19so2213197lfy.5; Thu, 09 May 2019 11:00:43 -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=8IBAb1U4AHGolLyRh4wnILWJ7YPjMF8I4QRhEu/lDNQ=; b=oZz3d9Y8lqRxl8XUFIBauj79NFGzhaIgVCsRnDu+nHqOgGtg/KfXxBmtyEa4iYIAtR 3ODP2NMrBGgfZUJbb3He9Ow/q7sqqEwi2lXjijncwPpBDRMY1qvFJdwVEcJ1AkgQ+QbZ gOPJhJwu+BPpBnbR0OosoLxmUAZOL+XHUDJwPOpIhXwKC6/AOp8VtkhtzADVEQTc7p7Q aaCwVlKMM+RMkmMm05UC8VXUEHPoPZXzWexnQS+99CT3OepvNZFWeLmptO/2H0sc+EOE zLuheTVRB9E3d138PWMdUm7+LgWv3gLjaIWP7Y6tHlG0zxcF4FQ2oV2q0P+iya7Nf8ax F/nQ== 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=8IBAb1U4AHGolLyRh4wnILWJ7YPjMF8I4QRhEu/lDNQ=; b=ex8cZlLMl7DXirAJ4pgFNIA04O31UoAUeaVJKbywox9vREbclVANaj2AYyyQaRFC1h OlEUKvHm1pm6vEz3CZXeNhLd4lqHtZhpRcz/s0JcK0pmUiM1sKnSOrs3cVU8Uts7IOYm oYdExW7ruycn806f5w5daZ+1KXqY1D0nQ2dHMMimxQjFuuxhJSvhhP6wZlzAiYFVorg9 AcagSPnWvcYUb2stTicQQ332YlZPa0CBnUY4ixAf8zZZddrOBcBUuUG4LlIiQ7JDLz5Y 0LGeisQECsjPTAZFeEQiEootAmlOdCQtrxeHMLlTA1WoKPscUtD0SYBTXYyV0WyGSza/ 5vCw== X-Gm-Message-State: APjAAAXQ7IkvCFnlZgqZ9+oeMPY1Xbr7qNUHdNGKryYaCb+gXbkDeyTl ukyv+bpVlNeFgJfW/mxobblugVjtkRQt0cDOp8rn5mQ= X-Received: by 2002:a19:fc04:: with SMTP id a4mr3210598lfi.39.1557424842743; Thu, 09 May 2019 11:00:42 -0700 (PDT) MIME-Version: 1.0 References: <20190405213635.24383-1-longli@linuxonhyperv.com> <20190405213635.24383-5-longli@linuxonhyperv.com> In-Reply-To: <20190405213635.24383-5-longli@linuxonhyperv.com> From: Pavel Shilovsky Date: Thu, 9 May 2019 11:00:31 -0700 Message-ID: Subject: Re: [Patch (resend) 5/5] cifs: Call MID callback before destroying transport 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, 5 =D0=B0=D0=BF=D1=80. 2019 =D0=B3. =D0=B2 14:39, Long Li : > > From: Long Li > > When transport is being destroyed, it's possible that some processes may > hold memory registrations that need to be deregistred. > > Call them first so nobody is using transport resources, and it can be > destroyed. > > Signed-off-by: Long Li > --- > fs/cifs/connect.c | 36 +++++++++++++++++++----------------- > 1 file changed, 19 insertions(+), 17 deletions(-) > > diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c > index 33e4d98..084756cf 100644 > --- a/fs/cifs/connect.c > +++ b/fs/cifs/connect.c > @@ -528,22 +528,6 @@ cifs_reconnect(struct TCP_Server_Info *server) > /* do not want to be sending data on a socket we are freeing */ > cifs_dbg(FYI, "%s: tearing down socket\n", __func__); > mutex_lock(&server->srv_mutex); > - if (server->ssocket) { > - cifs_dbg(FYI, "State: 0x%x Flags: 0x%lx\n", > - server->ssocket->state, server->ssocket->flags); > - kernel_sock_shutdown(server->ssocket, SHUT_WR); > - cifs_dbg(FYI, "Post shutdown state: 0x%x Flags: 0x%lx\n", > - server->ssocket->state, server->ssocket->flags); > - sock_release(server->ssocket); > - server->ssocket =3D NULL; > - } else if (cifs_rdma_enabled(server)) > - smbd_destroy(server); > - server->sequence_number =3D 0; > - server->session_estab =3D false; > - kfree(server->session_key.response); > - server->session_key.response =3D NULL; > - server->session_key.len =3D 0; > - server->lstrp =3D jiffies; > > /* mark submitted MIDs for retry and issue callback */ > INIT_LIST_HEAD(&retry_list); > @@ -556,7 +540,6 @@ cifs_reconnect(struct TCP_Server_Info *server) > list_move(&mid_entry->qhead, &retry_list); > } > spin_unlock(&GlobalMid_Lock); > - mutex_unlock(&server->srv_mutex); > > cifs_dbg(FYI, "%s: issuing mid callbacks\n", __func__); > list_for_each_safe(tmp, tmp2, &retry_list) { > @@ -565,6 +548,25 @@ cifs_reconnect(struct TCP_Server_Info *server) > mid_entry->callback(mid_entry); > } The original call was issuing callbacks without holding srv_mutex - callbacks may take this mutex for its internal needs. With the proposed patch the code will deadlock. Also the idea of destroying the socket first is to allow possible retries (from callbacks) to return a proper error instead of trying to send anything through the reconnecting socket. > > + if (server->ssocket) { > + cifs_dbg(FYI, "State: 0x%x Flags: 0x%lx\n", > + server->ssocket->state, server->ssocket->flags); > + kernel_sock_shutdown(server->ssocket, SHUT_WR); > + cifs_dbg(FYI, "Post shutdown state: 0x%x Flags: 0x%lx\n", > + server->ssocket->state, server->ssocket->flags); > + sock_release(server->ssocket); > + server->ssocket =3D NULL; > + } else if (cifs_rdma_enabled(server)) > + smbd_destroy(server); If we need to call smbd_destroy() *after* callbacks, let's just move it alone without the rest of the code. > + server->sequence_number =3D 0; > + server->session_estab =3D false; > + kfree(server->session_key.response); > + server->session_key.response =3D NULL; > + server->session_key.len =3D 0; > + server->lstrp =3D jiffies; > + > + mutex_unlock(&server->srv_mutex); > + > do { > try_to_freeze(); > > -- > 2.7.4 > -- Best regards, Pavel Shilovsky