From patchwork Fri Nov 17 17:45:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joshua Watt X-Patchwork-Id: 10063073 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 548376023A for ; Fri, 17 Nov 2017 17:46:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 427A92AD37 for ; Fri, 17 Nov 2017 17:46:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 32AD82AD16; Fri, 17 Nov 2017 17:46:26 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BABAF2AD16 for ; Fri, 17 Nov 2017 17:46:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161118AbdKQRqY (ORCPT ); Fri, 17 Nov 2017 12:46:24 -0500 Received: from mail-io0-f195.google.com ([209.85.223.195]:36478 "EHLO mail-io0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1161128AbdKQRqR (ORCPT ); Fri, 17 Nov 2017 12:46:17 -0500 Received: by mail-io0-f195.google.com with SMTP id 79so1960318ioi.3 for ; Fri, 17 Nov 2017 09:46:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=aBb/OnXP4xERg5aD5/ZD7R61dAnYI3t7Q1mtT3tQkUM=; b=oR/XC+YRr+EHDrhu4n6iJoL7Ceio3GF3EJejRx5VkREi/t86hRiD50tt51+GOVtY+z LEQVekfSvi+mY7fl0M3bnLLpvQEusbO0yUuOKgbNZAPkotoYOZcONzzAFZlA3Dh4RCla 4Oq25IMc8EhSb7yA+tR9r+Lf7EBJfZWcPdPFwLPmSTu7LFtCy17UAdt3aLt1KzJPB9Me aMKVr12lDrVXiJKPzh4UROrjZoFCdKluXZlhjoK+Ab3SI0wh+xLoyV6mLHly8R4pgeC4 vPDxFoAxYT6kNpOUEKp0BGxpxhxLNrTMbiOC2dyxqpQGApn9yDwjl72iic4edO1v/Sdb hMVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=aBb/OnXP4xERg5aD5/ZD7R61dAnYI3t7Q1mtT3tQkUM=; b=esikNjhvkwPWBTeFJEonbb1eVX12Ce4GbJ3ObZEfkNbowwdDE3QxXUkhYWcbWt9AfF cjRsDT316mb7G0i3PDxXVjIo+QdAq1BBMCO2N1vlAAZXWUFsFNghaJROYJTjtAAe7XDE CEtof9GG+8GmgPnSmEfTvxzj4xtvaP6dme7gMg4OcZkVA2e2/jNRyEeWNdEZdUgw2clw 8nt5+i1B4jEutVMYQa0Ib2n5STxrA5EHOaiO5t5vQ6aSmd6/+HnrFx8zQleQZdWTB2j7 mxSnarDzXW8msw+nIwMhMLDl8WoTDvchba+dS3JMyDjM9MPYrklozDsCFsdoNCiG11wl nkag== X-Gm-Message-State: AJaThX6H130zARDf5vKFXsH3wHne6yyPlhWo6h/xYmzmR/qUH6+m01xK N2HJRIKs/I6YoesuAsZGDT0= X-Google-Smtp-Source: AGs4zMYT4GPajl2Cy1p1zBZOswxKppFwqrUxvhaT/TgHjQNkPt+Y3vtUq1g6Eq2+lxvB7HilmD4Wqw== X-Received: by 10.107.164.225 with SMTP id d94mr3558529ioj.175.1510940776217; Fri, 17 Nov 2017 09:46:16 -0800 (PST) Received: from ola-842mrw1.ad.garmin.com ([204.77.163.55]) by smtp.googlemail.com with ESMTPSA id h21sm1878189iod.59.2017.11.17.09.46.15 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 17 Nov 2017 09:46:15 -0800 (PST) From: Joshua Watt X-Google-Original-From: Joshua Watt To: NeilBrown , Jeff Layton , Trond Myklebust , "J . Bruce Fields" Cc: linux-nfs@vger.kernel.org, Al Viro , David Howells , Joshua Watt Subject: [RFC v4 8/9] NFS: Don't shared transient clients Date: Fri, 17 Nov 2017 11:45:51 -0600 Message-Id: <20171117174552.18722-9-JPEWhacker@gmail.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20171117174552.18722-1-JPEWhacker@gmail.com> References: <20171117174552.18722-1-JPEWhacker@gmail.com> Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP If the transient mount option is set the client should not be shared so that operations done to it will not affect other mounts. Signed-off-by: Joshua Watt --- fs/nfs/client.c | 9 +++++++-- fs/nfs/nfs3client.c | 2 ++ fs/nfs/nfs4client.c | 4 ++++ include/linux/nfs_fs_sb.h | 1 + 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/fs/nfs/client.c b/fs/nfs/client.c index 7bab47d0dd07..9d88dea4bc59 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c @@ -328,6 +328,10 @@ static struct nfs_client *nfs_match_client(const struct nfs_client_initdata *dat if (clp->cl_cons_state < 0) continue; + /* Don't match clients that don't want to be shared */ + if (test_bit(NFS_CS_UNSHARED, &clp->cl_flags)) + continue; + /* Different NFS versions cannot share the same nfs_client */ if (clp->rpc_ops != data->nfs_mod->rpc_ops) continue; @@ -428,7 +432,7 @@ init_client(struct nfs_client *new, const struct nfs_client_initdata *cl_init) */ struct nfs_client *nfs_get_client(const struct nfs_client_initdata *cl_init) { - struct nfs_client *clp, *new = NULL; + struct nfs_client *clp = NULL, *new = NULL; struct nfs_net *nn = net_generic(cl_init->net, nfs_net_id); const struct nfs_rpc_ops *rpc_ops = cl_init->nfs_mod->rpc_ops; @@ -441,7 +445,8 @@ struct nfs_client *nfs_get_client(const struct nfs_client_initdata *cl_init) do { spin_lock(&nn->nfs_client_lock); - clp = nfs_match_client(cl_init); + if (!test_bit(NFS_CS_UNSHARED, &cl_init->init_flags)) + clp = nfs_match_client(cl_init); if (clp) { spin_unlock(&nn->nfs_client_lock); if (new) diff --git a/fs/nfs/nfs3client.c b/fs/nfs/nfs3client.c index 7879f2a0fcfd..a627a925f210 100644 --- a/fs/nfs/nfs3client.c +++ b/fs/nfs/nfs3client.c @@ -102,6 +102,8 @@ struct nfs_client *nfs3_set_ds_client(struct nfs_server *mds_srv, if (mds_srv->flags & NFS_MOUNT_NORESVPORT) set_bit(NFS_CS_NORESVPORT, &cl_init.init_flags); + if (mds_srv->flags & NFS_MOUNT_TRANSIENT) + __set_bit(NFS_CS_UNSHARED, &cl_init.init_flags); /* Use the MDS nfs_client cl_ipaddr. */ nfs_init_timeout_values(&ds_timeout, ds_proto, ds_timeo, ds_retrans); diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c index ef725106e45c..ffbc1143a4ab 100644 --- a/fs/nfs/nfs4client.c +++ b/fs/nfs/nfs4client.c @@ -852,6 +852,8 @@ static int nfs4_set_client(struct nfs_server *server, set_bit(NFS_CS_MIGRATION, &cl_init.init_flags); if (test_bit(NFS_MIG_TSM_POSSIBLE, &server->mig_status)) set_bit(NFS_CS_TSM_POSSIBLE, &cl_init.init_flags); + if (server->flags & NFS_MOUNT_TRANSIENT) + __set_bit(NFS_CS_UNSHARED, &cl_init.init_flags); /* Allocate or find a client reference we can use */ clp = nfs_get_client(&cl_init); @@ -910,6 +912,8 @@ struct nfs_client *nfs4_set_ds_client(struct nfs_server *mds_srv, if (mds_srv->flags & NFS_MOUNT_NORESVPORT) __set_bit(NFS_CS_NORESVPORT, &cl_init.init_flags); + if (mds_srv->flags & NFS_MOUNT_TRANSIENT) + __set_bit(NFS_CS_UNSHARED, &cl_init.init_flags); /* * Set an authflavor equual to the MDS value. Use the MDS nfs_client diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index 5dac856355f0..0eb7093faea7 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h @@ -45,6 +45,7 @@ struct nfs_client { #define NFS_CS_INFINITE_SLOTS 3 /* - don't limit TCP slots */ #define NFS_CS_NO_RETRANS_TIMEOUT 4 /* - Disable retransmit timeouts */ #define NFS_CS_TSM_POSSIBLE 5 /* - Maybe state migration */ +#define NFS_CS_UNSHARED 6 /* - Client state not shared */ struct sockaddr_storage cl_addr; /* server identifier */ size_t cl_addrlen; char * cl_hostname; /* hostname of server */