Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp1886852imm; Sun, 15 Jul 2018 20:28:16 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfQXGG0617xwUBP9SDhkrLlvp9DNq7GZcvqE/hx1cizm/9x2UbTzFult1IJnQwcyplRSs8s X-Received: by 2002:a65:53cb:: with SMTP id z11-v6mr13946837pgr.218.1531711696849; Sun, 15 Jul 2018 20:28:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531711696; cv=none; d=google.com; s=arc-20160816; b=v0YEOaJazYzEFObMbxfGX4hxVhJvVnaIPLe36nclBlOrZN+4ep8a0zGRlNkIVsYrT5 O4W3ookddWsIrUpMW0qfbyIt1Owy3Eur7siiGCHMKn5o9s0p3PihAJL8NJc8OqEgGX86 v7c2qOltG8AMU91jTiE1qIa7hWJdlrVP6sRwDl4/TKhCxeyyI9KDTRBzW1nYo4AH2yKz CNGX9Y9WBoxNWu7m1kwKZZeBxuU6oB+He+UvNDHg0PwKJCqh6o8/rXkQzW4257kWdPSg CqClgk448bb6s+zdPdCPOe2cCNgrglMfV03eiVN4g19V2G8GGyTEy/J/z0vmd+eu/hX3 71Aw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:references :in-reply-to:subject:cc:date:to:from:arc-authentication-results; bh=dZUhXXHZUAdadLKKmX6P3fpqSgvqRvsPkpEKQqicr58=; b=0tA/5te7hEpTS/vmQ9JxkgXwzV4P/+aIEJaczHJw4ZOFMrbXlYXdQx14tq1GR0NhEB Pg46Sh0sE6t/7VPVWCxLuxR/Fw2fItpkqaPuSueZ/bre280iMaYAz8qjsJr0uAfivf4T q7qre/Pamvq1M8SSaW9oNwvxjS7sbze5iXk8K3LsBXeo0t18mFpt1MsnL86DT3Y3G2IR trBzzpk7X7xlNhw9G3Znf/1GO5VQbMD/4EOBdBW/3FdiuDadLJDkFPBPnClAf+zEpgEV NZBN96KQZKyK8Unh3mDZh+IWrUV/RiYMXMPpoI53A3W+u4K4nvyYJNwQXyU+XwDvOnOl twwg== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n13-v6si31790891pfd.50.2018.07.15.20.27.49; Sun, 15 Jul 2018 20:28:16 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727613AbeGPDwI (ORCPT + 99 others); Sun, 15 Jul 2018 23:52:08 -0400 Received: from mx2.suse.de ([195.135.220.15]:44044 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727374AbeGPDwI (ORCPT ); Sun, 15 Jul 2018 23:52:08 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 5F259ACD0; Mon, 16 Jul 2018 03:26:51 +0000 (UTC) From: NeilBrown To: Herbert Xu Date: Mon, 16 Jul 2018 13:26:42 +1000 Cc: David Miller , tgraf@suug.ch, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, eric.dumazet@gmail.com Subject: Re: [PATCH - revised] rhashtable: detect when object movement might have invalidated a lookup In-Reply-To: <20180716021653.xtbyetdfc2uzxub3@gondor.apana.org.au> References: <20180601160613.7ud25g2ux55k3bma@gondor.apana.org.au> <87k1q8yh70.fsf@notabene.neil.brown.name> <20180711.224658.2077863065492745521.davem@davemloft.net> <20180711.224801.1129067473269289703.davem@davemloft.net> <87fu0kt5m0.fsf@notabene.neil.brown.name> <20180716005134.q4rfkfn3m5zzwt62@gondor.apana.org.au> <874lh0t1ls.fsf@notabene.neil.brown.name> <20180716021653.xtbyetdfc2uzxub3@gondor.apana.org.au> Message-ID: <871sc3uah9.fsf@notabene.neil.brown.name> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable On Mon, Jul 16 2018, Herbert Xu wrote: > On Mon, Jul 16, 2018 at 11:23:43AM +1000, NeilBrown wrote: >> >> kmem_cache_free() directly. For this, I need rhashtable to be safe if >> an object is deleted and immediately re-inserted into the same hash >> chain. > > This means that > > rcu_read_lock(); > A =3D rhashtable_lookup(); > use(A); > rcu_read_unlock(); > > A can turn into object B when it is used. That is just too strange > for words. Can we see some actual code on how this works? Look in Documenation/RCU/rculist_nulls.txt. The very first example is a typical lookup for a nulls list. The above sample code would read: rcu_read_lock(); begin: A =3D rhashtable_lookup(table, key); if (IS_ERR(A)) { rcu_read_unlock(); goto not_found; } if (!try_get_ref(A)) goto again; if (A->key !=3D key) { put_ref(A); goto again; } rcu_read_unlock(); use(A); If you particularly need to see real code rather than sample code, I can have something for you in a day or so. Thanks, NeilBrown > > For comparison, the existing net code where this happens A doesn't > actually change and it simply moves from one hashtable to another. > > I'm relucant to add semantics that would restrain on how rhashtable > works unless we have real and valid use-cases for it. > > Cheers, > --=20 > Email: Herbert Xu > Home Page: http://gondor.apana.org.au/~herbert/ > PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEG8Yp69OQ2HB7X0l6Oeye3VZigbkFAltMEHIACgkQOeye3VZi gbk5cxAAvpidPqQh63nN6GdyYYWEnwormiljs0uTGOlOplBwsJqWnBo0Nm08Epzt 09nKdLbUQXKsQcZMN8E0TPUBKk3q0rUYADMnMASjT79l2qt1VV+Rhyxw9L10Nd1i 2h/ScrDSW9XLFcINFgXKAhu3GCgH/NQvlIMffEQDc6Aol1q1wXxVlaI5CfdZAMt6 Br5k6M0VHGDTz0A3pakc9Rz+EkpedSO5ftW/658nZISkZ06tje4DNS5bccYPPwlw 99afEi0NNVhD21hDYsOezlZ9pk3XISe/2e8kWiE1Ann8fYfbxuwKV7E01w8YUcPE vmWgtYZlFyygRJewdRE04VoMRtUVEr2vywGWNlhgMRzYFwlcAFDSVWiJ/JHIoNfM Ni3nIMdTr7eZxD6AW4um7sgPSLhRGr4wfP4LTMWDF6NeJB5Hmn6hEhecfqCnaKIS GescQIMVGkPLiElIVT2J7CDjiGcG59k312PjGutk0G/sncPmYkmuEAbJz4eNHZhm oxcHlt1uA51dDfa5htjT0ek5FFA5IXiqCcmsA6jbDMxFuNy7I64ls3Ps6wBl8OCd hvnYDbCWv1AlqT61F9XfnsX1fDvWeKCVl2Czo0sdlWci8QufXD7ZdDQsOrCDxPFW cS3073e/ojrfCcRsfQNev1DN61ZXBKsItu1/54M4UzH5SmwNtnk= =E5JH -----END PGP SIGNATURE----- --=-=-=--