From patchwork Thu Feb 21 12:07:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?QmrDtnJuIFTDtnBlbA==?= X-Patchwork-Id: 1046109 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ZgJa5zp/"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 444tXW2Sfsz9s21 for ; Thu, 21 Feb 2019 23:08:11 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726258AbfBUMIJ (ORCPT ); Thu, 21 Feb 2019 07:08:09 -0500 Received: from mail-pf1-f195.google.com ([209.85.210.195]:42113 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725891AbfBUMIJ (ORCPT ); Thu, 21 Feb 2019 07:08:09 -0500 Received: by mail-pf1-f195.google.com with SMTP id n74so13695698pfi.9 for ; Thu, 21 Feb 2019 04:08:08 -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:mime-version :content-transfer-encoding; bh=i6Gciewk9LSlo9aGgw+sMlQlfdORdiNlxXadR6at5w4=; b=ZgJa5zp/0dmnc5lhQY8WdUotnCk+HdU/R06t7vVBnSZTH8NH2Yp9aVKKfCoqzh7ZWP 2LbfxOFGmwyfLU5LLZSGJC+A6Hs9PSPQi5M4DWRAt8LoadNtt32NXDBj1MmYwlhfwbNd t6i5lGG2/Qs/Rx+3D7zppq4ZHZtg15YQF7+GL9CHBa23zbip6oXgApcEJNUxUnhjVMRN 3VdtXVlAOObg4xV9hAT/zTIoNB3BaSgugysrJsh3+7hNLMKq2eyJDXK9v1x0bRpJ9ZnD kkvioI+IU2YqOTp60wKujt9zwq2B2QVszNUlUl+aYZIIH+dETyAPxI243ZFrffeFechp qzeg== 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:mime-version :content-transfer-encoding; bh=i6Gciewk9LSlo9aGgw+sMlQlfdORdiNlxXadR6at5w4=; b=ODVPaFxGNY+0FPIUpuMqfOIQ+g0qjTViS9VE3S+W9TJo5Q0SxxBVQ16mbD5ea8rXXa RYDszYVc5i6cfpdPOEkcaB7xahKVZYG19NUQjMiIU/0MybEJI+HGT0rH6WnkNAcJ38Vu p5vNFIQBnm5qqK1i06B8tHWU+2MSnPjEPUjKiAY7p447TPB/ij4ilQLFwa90cORDpNzy oVFxEVhPtGLrh9inpEYHc0wBRjK5rDA9uX/7B+MnS5y4n0tX+mZTtKadDfPOzxRkUEKj z4mvmz5MlDIrGSbfzVknqG7vZ+RTSa+wZdrfOZlNMpNDpKBVUDAZahYZe0vSG4668nQK bVIg== X-Gm-Message-State: AHQUAuZ7wErc3ksbb8gssUJVrQoYyaiMfdBaBp1MFJ8cwdfXHSIEBJ5V fjXIOF6CzgUi13bER1wfZYA= X-Google-Smtp-Source: AHgI3IYSoyJ53WXF4OLKhtbp0mkQgH4rpQKk6PPqzN+PoYUoCfLLd+hzxcX42w9/4cJ3qH3XQ0w+nQ== X-Received: by 2002:a63:4c18:: with SMTP id z24mr34342420pga.62.1550750888131; Thu, 21 Feb 2019 04:08:08 -0800 (PST) Received: from btopel-mobl.ger.intel.com ([192.55.54.40]) by smtp.gmail.com with ESMTPSA id w10sm30278182pge.8.2019.02.21.04.08.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 21 Feb 2019 04:08:07 -0800 (PST) From: =?utf-8?b?QmrDtnJuIFTDtnBlbA==?= To: ast@kernel.org, daniel@iogearbox.net, netdev@vger.kernel.org Cc: =?utf-8?b?QmrDtnJuIFTDtnBlbA==?= , magnus.karlsson@intel.com, magnus.karlsson@gmail.com Subject: [PATCH bpf] Revert "xsk: simplify AF_XDP socket teardown" Date: Thu, 21 Feb 2019 13:07:38 +0100 Message-Id: <20190221120738.24608-1-bjorn.topel@gmail.com> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Björn Töpel This reverts commit e2ce3674883ecba2605370404208c9d4a07ae1c3. It turns out that the sock destructor xsk_destruct was needed after all. The cleanup simplification broke the skb transmit cleanup path, due to that the umem was prematurely destroyed. The umem cannot be destroyed until all outstanding skbs are freed, which means that we cannot remove the umem until the sk_destruct has been called. Signed-off-by: Björn Töpel --- net/xdp/xsk.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/net/xdp/xsk.c b/net/xdp/xsk.c index 45f3b528dc09..85e4fe4f18cc 100644 --- a/net/xdp/xsk.c +++ b/net/xdp/xsk.c @@ -366,7 +366,6 @@ static int xsk_release(struct socket *sock) xskq_destroy(xs->rx); xskq_destroy(xs->tx); - xdp_put_umem(xs->umem); sock_orphan(sk); sock->sk = NULL; @@ -718,6 +717,18 @@ static const struct proto_ops xsk_proto_ops = { .sendpage = sock_no_sendpage, }; +static void xsk_destruct(struct sock *sk) +{ + struct xdp_sock *xs = xdp_sk(sk); + + if (!sock_flag(sk, SOCK_DEAD)) + return; + + xdp_put_umem(xs->umem); + + sk_refcnt_debug_dec(sk); +} + static int xsk_create(struct net *net, struct socket *sock, int protocol, int kern) { @@ -744,6 +755,9 @@ static int xsk_create(struct net *net, struct socket *sock, int protocol, sk->sk_family = PF_XDP; + sk->sk_destruct = xsk_destruct; + sk_refcnt_debug_inc(sk); + sock_set_flag(sk, SOCK_RCU_FREE); xs = xdp_sk(sk);