lkml.org 
[lkml]   [2012]   [Aug]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 07/16] net,9p: use new hashtable implementation
    Date
    Switch 9p error table to use the new hashtable implementation. This reduces the amount of
    generic unrelated code in 9p.

    Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
    ---
    net/9p/error.c | 21 ++++++++++-----------
    1 files changed, 10 insertions(+), 11 deletions(-)

    diff --git a/net/9p/error.c b/net/9p/error.c
    index 2ab2de7..a5cc7dd 100644
    --- a/net/9p/error.c
    +++ b/net/9p/error.c
    @@ -34,7 +34,7 @@
    #include <linux/jhash.h>
    #include <linux/errno.h>
    #include <net/9p/9p.h>
    -
    +#include <linux/hashtable.h>
    /**
    * struct errormap - map string errors from Plan 9 to Linux numeric ids
    * @name: string sent over 9P
    @@ -50,8 +50,8 @@ struct errormap {
    struct hlist_node list;
    };

    -#define ERRHASHSZ 32
    -static struct hlist_head hash_errmap[ERRHASHSZ];
    +#define ERR_HASH_BITS 5
    +static DEFINE_HASHTABLE(hash_errmap, ERR_HASH_BITS);

    /* FixMe - reduce to a reasonable size */
    static struct errormap errmap[] = {
    @@ -193,18 +193,17 @@ static struct errormap errmap[] = {
    int p9_error_init(void)
    {
    struct errormap *c;
    - int bucket;
    + u32 hash;

    /* initialize hash table */
    - for (bucket = 0; bucket < ERRHASHSZ; bucket++)
    - INIT_HLIST_HEAD(&hash_errmap[bucket]);
    + hash_init(hash_errmap);

    /* load initial error map into hash table */
    for (c = errmap; c->name != NULL; c++) {
    c->namelen = strlen(c->name);
    - bucket = jhash(c->name, c->namelen, 0) % ERRHASHSZ;
    + hash = jhash(c->name, c->namelen, 0);
    INIT_HLIST_NODE(&c->list);
    - hlist_add_head(&c->list, &hash_errmap[bucket]);
    + hash_add(hash_errmap, &c->list, hash);
    }

    return 1;
    @@ -223,13 +222,13 @@ int p9_errstr2errno(char *errstr, int len)
    int errno;
    struct hlist_node *p;
    struct errormap *c;
    - int bucket;
    + u32 hash;

    errno = 0;
    p = NULL;
    c = NULL;
    - bucket = jhash(errstr, len, 0) % ERRHASHSZ;
    - hlist_for_each_entry(c, p, &hash_errmap[bucket], list) {
    + hash = jhash(errstr, len, 0);
    + hash_for_each_possible(hash_errmap, c, p, list, hash) {
    if (c->namelen == len && !memcmp(c->name, errstr, len)) {
    errno = c->val;
    break;
    --
    1.7.8.6


    \
     
     \ /
      Last update: 2012-08-19 03:41    [W:0.031 / U:0.672 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site