From patchwork Thu Jun 1 06:57:56 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hangbin Liu X-Patchwork-Id: 769498 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3wddVf0kTYz9sDG for ; Thu, 1 Jun 2017 16:59:06 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="NUWlpJYY"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751404AbdFAG6y (ORCPT ); Thu, 1 Jun 2017 02:58:54 -0400 Received: from mail-pf0-f195.google.com ([209.85.192.195]:35564 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751113AbdFAG6w (ORCPT ); Thu, 1 Jun 2017 02:58:52 -0400 Received: by mail-pf0-f195.google.com with SMTP id u26so6970063pfd.2 for ; Wed, 31 May 2017 23:58:52 -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=qOk/EAKfecc+NaZiqG22R6Qbp6X4HGu99d03Pj5QIzE=; b=NUWlpJYYGyeZ2x/xM76OGUCvCWvWSuYj7KXHQmtFai/Q4DqSGS7qjCgPoFg0hg4+ZK bsy5dV4aGsh1EP5LNE4W9H9DlORQEQaLaGoX7qxFiPfhbrVr6QLjsI127L9qtoDnNBBh nn4C59lXwjfmU/C8ZIJBdsIKwQ27ZGHVPMzc1QAhKO3mIgaHPS95j06vh5eiTehGfDrg c8X6Jczgqdiv5qzbwLpccjMJoEpzLGzKv2JysglKIGPb6FZ436ivqNo7UHxhCu1kGHE+ UrNAzvmmXtrkONFicew8uCBIhPhXS+6188wOBmf8l5OwZVj9yf/mPIH8gtBkt/foJKsV Lcew== 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=qOk/EAKfecc+NaZiqG22R6Qbp6X4HGu99d03Pj5QIzE=; b=HAzJvLzQ+AEXWwzrkDEu0+Y4weVwf/dIxzjxg9PjAdu2bNrpSuzJMkbI1WDjYPDRGf 53JLtA8xQGQk8cPrLZBn0FJqdj67HqNteLf0wUeGboLJEWuUQgX/24+EnElpHZkwuHSG mLgE2sqm7jNh/+gpnBl+Y9JBpM9A3SAn23TWpPrMdqqZz9GlLHgQ2I8b37TadtnzPlOA aSVAYcZ/YdO3dNOS1P4TulUAjTD4lUt9OUs6S4sRVvycc6DlR/WaB0ZbVteNIze3MWHR QE4tt5UwbS2ha2xCmsWtidBz4A9wMftodyefUCKzrCKZWZx597bhLkNoAheTEB1YSKvx yRdw== X-Gm-Message-State: AODbwcC6OHultSuByqqgr1pS82FdY4u7Onn/mamLcQMoxj3su2BmaH7v KYTv9vakJ+HeQPUp X-Received: by 10.98.15.23 with SMTP id x23mr7016pfi.86.1496300331715; Wed, 31 May 2017 23:58:51 -0700 (PDT) Received: from leo.usersys.redhat.com ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id n87sm31832199pfi.124.2017.05.31.23.58.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 31 May 2017 23:58:51 -0700 (PDT) From: Hangbin Liu To: netdev@vger.kernel.org Cc: Guy Shapiro , Steffen Klassert , David Miller , Hangbin Liu Subject: [PATCH v2] xfrm: fix xfrm_dev_event() missing when compile without CONFIG_XFRM_OFFLOAD Date: Thu, 1 Jun 2017 14:57:56 +0800 Message-Id: <1496300276-30901-1-git-send-email-liuhangbin@gmail.com> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1496277502-10642-1-git-send-email-liuhangbin@gmail.com> References: <1496277502-10642-1-git-send-email-liuhangbin@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org In commit d77e38e612a0 ("xfrm: Add an IPsec hardware offloading API") we make xfrm_device.o only compiled when enable option CONFIG_XFRM_OFFLOAD. But this will make xfrm_dev_event() missing if we only enable default XFRM options. Then if we set down and unregister an interface with IPsec on it. there will no xfrm_garbage_collect(), which will cause dev usage count hold and get error like: unregister_netdevice: waiting for to become free. Usage count = 4 Fixes: d77e38e612a0 ("xfrm: Add an IPsec hardware offloading API") Signed-off-by: Hangbin Liu --- include/net/xfrm.h | 7 ++----- net/xfrm/Makefile | 3 +-- net/xfrm/xfrm_device.c | 2 ++ 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/include/net/xfrm.h b/include/net/xfrm.h index 7e7e2b0..62f5a25 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h @@ -1850,8 +1850,9 @@ static inline struct xfrm_offload *xfrm_offload(struct sk_buff *skb) } #endif -#ifdef CONFIG_XFRM_OFFLOAD void __net_init xfrm_dev_init(void); + +#ifdef CONFIG_XFRM_OFFLOAD int validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t features); int xfrm_dev_state_add(struct net *net, struct xfrm_state *x, struct xfrm_user_offload *xuo); @@ -1877,10 +1878,6 @@ static inline void xfrm_dev_state_free(struct xfrm_state *x) } } #else -static inline void __net_init xfrm_dev_init(void) -{ -} - static inline int validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t features) { return 0; diff --git a/net/xfrm/Makefile b/net/xfrm/Makefile index abf81b3..55b2ac3 100644 --- a/net/xfrm/Makefile +++ b/net/xfrm/Makefile @@ -4,8 +4,7 @@ obj-$(CONFIG_XFRM) := xfrm_policy.o xfrm_state.o xfrm_hash.o \ xfrm_input.o xfrm_output.o \ - xfrm_sysctl.o xfrm_replay.o -obj-$(CONFIG_XFRM_OFFLOAD) += xfrm_device.o + xfrm_sysctl.o xfrm_replay.o xfrm_device.o obj-$(CONFIG_XFRM_STATISTICS) += xfrm_proc.o obj-$(CONFIG_XFRM_ALGO) += xfrm_algo.o obj-$(CONFIG_XFRM_USER) += xfrm_user.o diff --git a/net/xfrm/xfrm_device.c b/net/xfrm/xfrm_device.c index 574e6f3..5aba036 100644 --- a/net/xfrm/xfrm_device.c +++ b/net/xfrm/xfrm_device.c @@ -22,6 +22,7 @@ #include #include +#ifdef CONFIG_XFRM_OFFLOAD int validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t features) { int err; @@ -137,6 +138,7 @@ bool xfrm_dev_offload_ok(struct sk_buff *skb, struct xfrm_state *x) return true; } EXPORT_SYMBOL_GPL(xfrm_dev_offload_ok); +#endif int xfrm_dev_register(struct net_device *dev) {