mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
Merge ra.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux
All conflicts were trivial overlapping changes, so reasonably easy to resolve. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -765,7 +765,7 @@ int rhashtable_walk_start_check(struct rhashtable_iter *iter)
|
||||
skip++;
|
||||
if (list == iter->list) {
|
||||
iter->p = p;
|
||||
skip = skip;
|
||||
iter->skip = skip;
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
@@ -955,8 +955,16 @@ EXPORT_SYMBOL_GPL(rhashtable_walk_stop);
|
||||
|
||||
static size_t rounded_hashtable_size(const struct rhashtable_params *params)
|
||||
{
|
||||
return max(roundup_pow_of_two(params->nelem_hint * 4 / 3),
|
||||
(unsigned long)params->min_size);
|
||||
size_t retsize;
|
||||
|
||||
if (params->nelem_hint)
|
||||
retsize = max(roundup_pow_of_two(params->nelem_hint * 4 / 3),
|
||||
(unsigned long)params->min_size);
|
||||
else
|
||||
retsize = max(HASH_DEFAULT_SIZE,
|
||||
(unsigned long)params->min_size);
|
||||
|
||||
return retsize;
|
||||
}
|
||||
|
||||
static u32 rhashtable_jhash2(const void *key, u32 length, u32 seed)
|
||||
@@ -1012,8 +1020,6 @@ int rhashtable_init(struct rhashtable *ht,
|
||||
struct bucket_table *tbl;
|
||||
size_t size;
|
||||
|
||||
size = HASH_DEFAULT_SIZE;
|
||||
|
||||
if ((!params->key_len && !params->obj_hashfn) ||
|
||||
(params->obj_hashfn && !params->obj_cmpfn))
|
||||
return -EINVAL;
|
||||
@@ -1037,8 +1043,7 @@ int rhashtable_init(struct rhashtable *ht,
|
||||
|
||||
ht->p.min_size = max_t(u16, ht->p.min_size, HASH_MIN_SIZE);
|
||||
|
||||
if (params->nelem_hint)
|
||||
size = rounded_hashtable_size(&ht->p);
|
||||
size = rounded_hashtable_size(&ht->p);
|
||||
|
||||
if (params->locks_mul)
|
||||
ht->p.locks_mul = roundup_pow_of_two(params->locks_mul);
|
||||
@@ -1126,13 +1131,14 @@ void rhashtable_free_and_destroy(struct rhashtable *ht,
|
||||
void (*free_fn)(void *ptr, void *arg),
|
||||
void *arg)
|
||||
{
|
||||
struct bucket_table *tbl;
|
||||
struct bucket_table *tbl, *next_tbl;
|
||||
unsigned int i;
|
||||
|
||||
cancel_work_sync(&ht->run_work);
|
||||
|
||||
mutex_lock(&ht->mutex);
|
||||
tbl = rht_dereference(ht->tbl, ht);
|
||||
restart:
|
||||
if (free_fn) {
|
||||
for (i = 0; i < tbl->size; i++) {
|
||||
struct rhash_head *pos, *next;
|
||||
@@ -1149,7 +1155,12 @@ void rhashtable_free_and_destroy(struct rhashtable *ht,
|
||||
}
|
||||
}
|
||||
|
||||
next_tbl = rht_dereference(tbl->future_tbl, ht);
|
||||
bucket_table_free(tbl);
|
||||
if (next_tbl) {
|
||||
tbl = next_tbl;
|
||||
goto restart;
|
||||
}
|
||||
mutex_unlock(&ht->mutex);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rhashtable_free_and_destroy);
|
||||
|
Reference in New Issue
Block a user