void *qht_do_lookup(struct qht_bucket *head, qht_lookup_func_t func,

                    const void *userp, uint32_t hash)

{

    struct qht_bucket *b = head;

    int i;



    do {

        for (i = 0; i < QHT_BUCKET_ENTRIES; i++) {

            if (b->hashes[i] == hash) {

                /* The pointer is dereferenced before seqlock_read_retry,

                 * so (unlike qht_insert__locked) we need to use

                 * atomic_rcu_read here.

                 */

                void *p = atomic_rcu_read(&b->pointers[i]);



                if (likely(p) && likely(func(p, userp))) {

                    return p;

                }

            }

        }

        b = atomic_rcu_read(&b->next);

    } while (b);



    return NULL;

}

void *qht_do_lookup(struct qht_bucket *head, qht_lookup_func_t func,

                    const void *userp, uint32_t hash)

{

    struct qht_bucket *b = head;

    int i;



    do {

        for (i = 0; i < QHT_BUCKET_ENTRIES; i++) {

            if (b->hashes[i] == hash) {

                







                void *p = atomic_rcu_read(&b->pointers[i]);



                if (likely(p) && likely(func(p, userp))) {

                    return p;

                }

            }

        }

        b = atomic_rcu_read(&b->next);

    } while (b);



    return NULL;

}

            if (b->hashes[i] == hash) {
void *FUNC_0(struct qht_bucket *VAR_0, qht_lookup_func_t VAR_1,

                    const void *VAR_2, uint32_t VAR_3)

{

    struct qht_bucket *VAR_4 = VAR_0;

    int VAR_5;



    do {

        for (VAR_5 = 0; VAR_5 < QHT_BUCKET_ENTRIES; VAR_5++) {

            if (VAR_4->hashes[VAR_5] == VAR_3) {

                







                void *p = atomic_rcu_read(&VAR_4->pointers[VAR_5]);



                if (likely(p) && likely(VAR_1(p, VAR_2))) {

                    return p;

                }

            }

        }

        VAR_4 = atomic_rcu_read(&VAR_4->next);

    } while (VAR_4);



    return NULL;

}

void *FUNC_0(struct qht_bucket *VAR_0, qht_lookup_func_t VAR_1,
const void *VAR_2, uint32_t VAR_3)
{ struct qht_bucket *VAR_4 = VAR_0; int VAR_5; do { for (VAR_5 = 0; VAR_5 < QHT_BUCKET_ENTRIES; VAR_5++) { if (VAR_4->hashes[VAR_5] == VAR_3) { void *p = atomic_rcu_read(&VAR_4->pointers[VAR_5]); if (likely(p) && likely(VAR_1(p, VAR_2))) { return p; } } } VAR_4 = atomic_rcu_read(&VAR_4->next); } while (VAR_4); return NULL; }