From: Herbert Xu <herbert@gondor.apana.org.au>
To: NeilBrown <neilb@suse.com>
Cc: Thomas Graf <tgraf@suug.ch>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <eric.dumazet@gmail.com>
Subject: Re: [PATCH 5/6] rhashtable: support guaranteed successful insertion.
Date: Thu, 29 Mar 2018 13:22:31 +0800 [thread overview]
Message-ID: <20180329052231.GA21028@gondor.apana.org.au> (raw)
In-Reply-To: <87370j51tu.fsf@notabene.neil.brown.name>
On Thu, Mar 29, 2018 at 08:26:21AM +1100, NeilBrown wrote:
>
> I say "astronomically unlikely", you say "probability .. is extremely
> low". I think we are in agreement here.
>
> The point remains that if an error *can* be returned then I have to
> write code to handle it and test that code. I'd rather not.
You have be able to handle errors anyway because of memory allocation
failures. Ultimately if you keep inserting you will eventually
fail with ENOMEM. So I don't see the issue with an additional
error value.
> > Even if it does happen we won't fail because we will perform
> > an immediate rehash. We only fail if it happens right away
> > after the rehash (that is, at least another 16 elements have
> > been inserted and you're trying to insert a 17th element, all
> > while the new hash table has not been completely populated),
> > which means that somebody has figured out our hash secret and
> > failing in that case makes sense.
BTW, you didn't acknowledge this bit which I think is crucial to
how likely such an error is.
> I never suggested retrying, but I would have to handle it somehow. I'd
> rather not.
...
> While I have no doubt that there are hashtables where someone could try
> to attack the hash, I am quite sure there are others where is such an
> attack is meaningless - any code which could generate the required range of
> keys, could do far worse things more easily.
Our network hashtable has to be secure against adversaries. I
understand that this may not be important to your use-case. However,
given the fact that the failure would only occur if an adversary
is present and actively attacking your hash table, I don't think
it has that much of a negative effect on your use-case either.
Of course if you can reproduce the EBUSY error without your
disable_count patch or even after you have fixed the issue I
have pointed out in your disable_count patch you can still reproduce
it then that would suggest a real bug and we would need to fix it,
for everyone.
> Yes, storing a sharded count in the spinlock table does seem like an
> appropriate granularity. However that leads me to ask: why do we have
> the spinlock table? Why not bit spinlocks in the hashchain head like
> include/linux/list_bl uses?
The spinlock table predates rhashtable. Perhaps Thomas/Eric/Dave
can elucidate this.
> I don't understand how it can ever be "too late", though I appreciate
> that in some cases "sooner" is better than "later"
> If we give up on the single atomic_t counter, then we must accept that
> the number of elements could exceed any given value. The only promise
> we can provide is that it wont exceed N% of the table size for more than
> T seconds.
Sure. However, assuming we use an estimate that is hash-based,
that *should* be fairly accurate assuming that your hash function
is working in the first place. It's completely different vs.
estimating based on a per-cpu count which could be wildly inaccurate.
Cheers,
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
next prev parent reply other threads:[~2018-03-29 5:22 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-26 23:33 [PATCH 0/6] rhashtable: assorted fixes and enhancements NeilBrown
2018-03-26 23:33 ` [PATCH 5/6] rhashtable: support guaranteed successful insertion NeilBrown
2018-03-27 15:56 ` Herbert Xu
2018-03-27 21:34 ` NeilBrown
2018-03-28 6:04 ` Herbert Xu
2018-03-28 7:04 ` NeilBrown
2018-03-28 7:27 ` Herbert Xu
2018-03-28 21:26 ` NeilBrown
2018-03-29 5:22 ` Herbert Xu [this message]
2018-04-06 3:11 ` NeilBrown
2018-04-06 4:13 ` Herbert Xu
2018-03-26 23:33 ` [PATCH 4/6] rhashtable: allow a walk of the hash table without missing objects NeilBrown
2018-03-27 15:49 ` David Miller
2018-03-27 15:54 ` Herbert Xu
2018-03-27 21:50 ` NeilBrown
2018-03-27 15:51 ` Herbert Xu
2018-03-27 21:54 ` NeilBrown
2018-03-28 6:07 ` Herbert Xu
2018-03-28 7:17 ` NeilBrown
2018-03-28 7:30 ` Herbert Xu
2018-03-28 21:34 ` NeilBrown
2018-03-29 1:13 ` NeilBrown
2018-03-26 23:33 ` [PATCH 1/6] rhashtable: improve documentation for rhashtable_walk_peek() NeilBrown
2018-03-27 10:55 ` Sergei Shtylyov
2018-03-27 15:30 ` Herbert Xu
2018-03-27 15:47 ` David Miller
2018-03-27 21:45 ` [PATCH 1/6 v2] " NeilBrown
2018-03-27 22:46 ` [PATCH 1/6] " Andreas Grünbacher
2018-03-28 0:49 ` NeilBrown
2018-03-26 23:33 ` [PATCH 6/6] rhashtable: allow element counting to be disabled NeilBrown
2018-03-26 23:33 ` [PATCH 2/6] rhashtable: remove outdated comments about grow_decision etc NeilBrown
2018-03-26 23:33 ` [PATCH 3/6] rhashtable: reset intr when rhashtable_walk_start sees new table NeilBrown
2018-03-27 15:47 ` Herbert Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180329052231.GA21028@gondor.apana.org.au \
--to=herbert@gondor.apana.org.au \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=neilb@suse.com \
--cc=netdev@vger.kernel.org \
--cc=tgraf@suug.ch \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox