From: Tejun Heo <tj@kernel.org>
To: Sasha Levin <levinsasha928@gmail.com>
Cc: torvalds@linux-foundation.org, akpm@linux-foundation.org,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
paul.gortmaker@windriver.com
Subject: Re: [RFC 1/4] hashtable: introduce a small and naive hashtable
Date: Tue, 31 Jul 2012 11:23:30 -0700 [thread overview]
Message-ID: <20120731182330.GD21292@google.com> (raw)
In-Reply-To: <1343757920-19713-2-git-send-email-levinsasha928@gmail.com>
Hello, Sasha.
On Tue, Jul 31, 2012 at 08:05:17PM +0200, Sasha Levin wrote:
> +#define HASH_INIT(name) \
> +({ \
> + int __i; \
> + for (__i = 0 ; __i < HASH_SIZE(name) ; __i++) \
> + INIT_HLIST_HEAD(&name[__i]); \
> +})
Why use macro?
> +#define HASH_ADD(name, obj, key) \
> + hlist_add_head(obj, &name[ \
> + hash_long((unsigned long)key, HASH_BITS(name))]);
Ditto.
> +#define HASH_GET(name, key, type, member, cmp_fn) \
> +({ \
> + struct hlist_node *__node; \
> + typeof(key) __key = key; \
> + type *__obj = NULL; \
> + hlist_for_each_entry(__obj, __node, &name[ \
> + hash_long((unsigned long) __key, \
> + HASH_BITS(name))], member) \
> + if (cmp_fn(__obj, __key)) \
> + break; \
> + __obj; \
> +})
Wouldn't it be simpler to have something like the following
hash_for_each_possible_match(pos, hash, key)
and let the caller handle the actual comparison? Callbacks often are
painful to use and I don't think the above dancing buys much.
> +#define HASH_DEL(obj, member) \
> + hlist_del(&obj->member)
@obj is struct hlist_node in HASH_ADD and the containing type here?
Most in-kernel generic data containers implement just the container
itself and let the caller handle the conversions between container
node and the containing object. I think it would better not to
deviate from that.
> +#define HASH_FOR_EACH(bkt, node, name, obj, member) \
> + for (bkt = 0; bkt < HASH_SIZE(name); bkt++) \
> + hlist_for_each_entry(obj, node, &name[i], member)
Why in caps? Most for_each macros are in lower case.
Thanks.
--
tejun
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2012-07-31 18:23 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-31 18:05 [RFC 0/4] generic hashtable implementation Sasha Levin
2012-07-31 18:05 ` [RFC 1/4] hashtable: introduce a small and naive hashtable Sasha Levin
2012-07-31 18:23 ` Tejun Heo [this message]
2012-07-31 20:31 ` Sasha Levin
2012-08-01 18:19 ` Sasha Levin
2012-08-01 18:21 ` Tejun Heo
2012-08-01 18:24 ` Sasha Levin
2012-08-01 18:27 ` Tejun Heo
2012-08-01 19:06 ` Sasha Levin
2012-08-01 20:24 ` Tejun Heo
2012-08-01 22:41 ` Sasha Levin
2012-08-01 22:45 ` Tejun Heo
2012-08-02 10:00 ` Sasha Levin
2012-08-02 10:32 ` Josh Triplett
2012-08-02 11:23 ` Sasha Levin
2012-08-02 13:04 ` Sasha Levin
2012-08-02 16:15 ` Josh Triplett
2012-08-02 16:48 ` Sasha Levin
2012-08-02 17:44 ` Josh Triplett
2012-08-02 17:54 ` Sasha Levin
2012-08-02 20:41 ` Josh Triplett
2012-08-02 21:47 ` Sasha Levin
2012-08-03 17:59 ` Josh Triplett
2012-08-02 16:03 ` Eric W. Biederman
2012-08-02 16:34 ` Sasha Levin
2012-08-02 16:40 ` Eric W. Biederman
2012-08-02 17:32 ` Linus Torvalds
2012-08-02 17:48 ` Eric Dumazet
2012-08-02 17:59 ` Josh Triplett
2012-08-02 18:08 ` Linus Torvalds
2012-08-02 20:25 ` Josh Triplett
2012-08-02 20:32 ` Linus Torvalds
2012-08-02 21:21 ` Josh Triplett
2012-08-02 21:50 ` Linus Torvalds
2012-08-02 9:35 ` Josh Triplett
2012-07-31 18:05 ` [RFC 2/4] user_ns: use new hashtable implementation Sasha Levin
2012-07-31 18:05 ` [RFC 3/4] mm,ksm: " Sasha Levin
2012-07-31 18:05 ` [RFC 4/4] workqueue: " Sasha Levin
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=20120731182330.GD21292@google.com \
--to=tj@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=levinsasha928@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=paul.gortmaker@windriver.com \
--cc=torvalds@linux-foundation.org \
/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;
as well as URLs for NNTP newsgroup(s).