Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp5812653yba; Tue, 30 Apr 2019 23:44:31 -0700 (PDT) X-Google-Smtp-Source: APXvYqzwjr1SXuBbL1lMl2Nrsls/VAP4/vD7/quLOgldlXj6rAok4Fp32F+9J5/V80bFLDVSlbvK X-Received: by 2002:a65:648c:: with SMTP id e12mr10276582pgv.346.1556693070917; Tue, 30 Apr 2019 23:44:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556693070; cv=none; d=google.com; s=arc-20160816; b=CnLos7CwEalvhj8DIZ+O+5KHwXtfTA9vxryYRM9ft7xDr8VAbIkbcJguGcwt49ssCy RC2rtBOr0VMs+3khApWi4NRHTkiNJh6YxjODIs9LqsDavCEtWBFJJiIybVywequHbkLf zDgjEKNq/N6hijCSqDHG2JMq2nDCMrUE/EdeYXpcJ1hroUKPXoIm5nC7Y3irk6TIhc37 0GlMLSq4DPYY7vDwfLSQjYpn2MROR2ueuqfNYcRx/zsi2KXeRpM/cWKWodylew9kqe1T 6y/ITG70/AaBBZjqXBBK52pHBM06P39Kj6UkYEUD0MfVVepiwgO11CysfvXk1mFSW8Es ZsJw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=j9MH4iiJ+X2ecNXQBhUm1t4pzmUrHFzr5eMR80D9r3g=; b=un8id6CEZa6jzGKuewAeKVlT2FMlp9/7y3C1hTpr3kC+SNSxiNFGDkFa+eTHWFNEnU 06ntaAvVrZjw1DjlQD6iIT8tIPAwUHaGFkb7M9KAeJ1gryOJRPqCXiz7u60KO4oNHIvj VFpvqbBTpH8tCS+N1mBXy4F1ZnuFrHWccPKzKn8fo7t2bjb291Wsupfs/d8ryYJZ0n4W UrkSlD+xDytl8+pilhf/EiL3sHzL96cuIaiQOqqlToXD8wE0iCFAS6rvUeX+tfOHLpgC v5x1LbTZpc4wK9aZaybFggfy9/UHTLE0qk70yBYE1fUZ1DLcmSXleEybM8BmdXeyUnbO 0+Rw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=BVINc4Pj; 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 t16si22819347pfh.45.2019.04.30.23.44.16; Tue, 30 Apr 2019 23:44:30 -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=BVINc4Pj; 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 S1726229AbfEAGnM (ORCPT + 99 others); Wed, 1 May 2019 02:43:12 -0400 Received: from mail-pl1-f193.google.com ([209.85.214.193]:32987 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725776AbfEAGnM (ORCPT ); Wed, 1 May 2019 02:43:12 -0400 Received: by mail-pl1-f193.google.com with SMTP id y3so7001901plp.0; Tue, 30 Apr 2019 23:43:11 -0700 (PDT) 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=j9MH4iiJ+X2ecNXQBhUm1t4pzmUrHFzr5eMR80D9r3g=; b=BVINc4Pj1E93GIlFhXNO6bnORlYT1bhzJWEjTw0CztPg6w051bMroJ0qGm4MEg17o7 Dn4I9jPgxki7xhislO3Vma77vVMmbihJKSOKmE63H5dmnjP57FqXnNM/17uLYJGDNdNB WExXpgU3Cx1/l+LYmO+Lo/tqGufK9Sm1CTF9FXFqegllgXVYWEA8v1G7ApR2WTZjIKFB JwtxQdwDw8UwJ4Mc7pO9g8+As7ip3HUA4B08CJzcIR0kts/27UULtmb1ceD9EwYXywaB npOYtzFKS6vc1w65GYqRMfv3kH25NE4Wg6Tep3b2u6oBp3x845r7QFxBfjy5LpeSUikf 9erw== 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=j9MH4iiJ+X2ecNXQBhUm1t4pzmUrHFzr5eMR80D9r3g=; b=gTj9pjdLTbfl3E8GaHLw8ZPmxpW4MNpfMGpAsyQndEv6AC7SEiKs1OgpqG3+MMFzsZ aWN8VGbG6GhCfQF/QvgscPICku49S50yRpxy5HWAMyFrmFeq46X3sYUcEOOE1MuHa102 ZXKXquevaok1UStg4nY3qMMMEX7yRu+MGwMeTKElCDY0RC1VP/2GgNY4D0lu4GBF53bU +3+qwGR9qQgT+mADJKcv9lrBcKyqNH1NX+aqly4logU4OE35szm2NHhYWUidV2vXNHr2 SjBu8c7YkcnlYSZtOEilg+fIJZa0xFbCoHox3/sNhpN+f+Gn+P4FhT5x21t9fvxTBHHd Qf8g== X-Gm-Message-State: APjAAAW+NDDrCSeoIJ/zY3+2GiTrzsUHVWZWyX7D/VCq+Vl4cCprBdBT BEUHmt1auvlKzzo0KLqlud4= X-Received: by 2002:a17:902:b481:: with SMTP id y1mr76303909plr.161.1556692991321; Tue, 30 Apr 2019 23:43:11 -0700 (PDT) Received: from bridge.localdomain ([119.28.31.106]) by smtp.gmail.com with ESMTPSA id 25sm56800323pfo.145.2019.04.30.23.43.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 30 Apr 2019 23:43:10 -0700 (PDT) From: Wenbin Zeng X-Google-Original-From: Wenbin Zeng To: viro@zeniv.linux.org.uk, davem@davemloft.net, bfields@fieldses.org, jlayton@kernel.org, trond.myklebust@hammerspace.com, anna.schumaker@netapp.com, wenbinzeng@tencent.com, dsahern@gmail.com, nicolas.dichtel@6wind.com, willy@infradead.org, edumazet@google.com, jakub.kicinski@netronome.com, tyhicks@canonical.com, chuck.lever@oracle.com, neilb@suse.com Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-nfs@vger.kernel.org Subject: [PATCH 1/3] nsfs: add evict callback into struct proc_ns_operations Date: Wed, 1 May 2019 14:42:23 +0800 Message-Id: <1556692945-3996-2-git-send-email-wenbinzeng@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1556692945-3996-1-git-send-email-wenbinzeng@tencent.com> References: <1556692945-3996-1-git-send-email-wenbinzeng@tencent.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The newly added evict callback shall be called by nsfs_evict(). Currently only put() callback is called in nsfs_evict(), it is not able to release all netns refcount, for example, a rpc client holds two netns refcounts, these refcounts are supposed to be released when the rpc client is freed, but the code to free rpc client is normally triggered by put() callback only when netns refcount gets to 0, specifically: refcount=0 -> cleanup_net() -> ops_exit_list -> free rpc client But netns refcount will never get to 0 before rpc client gets freed, to break the deadlock, the code to free rpc client can be put into the newly added evict callback. Signed-off-by: Wenbin Zeng --- fs/nsfs.c | 2 ++ include/linux/proc_ns.h | 1 + 2 files changed, 3 insertions(+) diff --git a/fs/nsfs.c b/fs/nsfs.c index 60702d6..5939b12 100644 --- a/fs/nsfs.c +++ b/fs/nsfs.c @@ -49,6 +49,8 @@ static void nsfs_evict(struct inode *inode) struct ns_common *ns = inode->i_private; clear_inode(inode); ns->ops->put(ns); + if (ns->ops->evict) + ns->ops->evict(ns); } static void *__ns_get_path(struct path *path, struct ns_common *ns) diff --git a/include/linux/proc_ns.h b/include/linux/proc_ns.h index d31cb62..919f0d4 100644 --- a/include/linux/proc_ns.h +++ b/include/linux/proc_ns.h @@ -19,6 +19,7 @@ struct proc_ns_operations { int type; struct ns_common *(*get)(struct task_struct *task); void (*put)(struct ns_common *ns); + void (*evict)(struct ns_common *ns); int (*install)(struct nsproxy *nsproxy, struct ns_common *ns); struct user_namespace *(*owner)(struct ns_common *ns); struct ns_common *(*get_parent)(struct ns_common *ns); -- 1.8.3.1