diff options
| author | Srinivasarao P <spathi@codeaurora.org> | 2019-02-11 16:35:39 +0530 |
|---|---|---|
| committer | Srinivasarao P <spathi@codeaurora.org> | 2019-02-11 16:36:15 +0530 |
| commit | 95ddd086583a023d517d0d61871b4b3e910fec83 (patch) | |
| tree | 3dbbf49bcba1bf884ea75f514c1750e93a77385f /lib | |
| parent | b4248fb5b9970c6c6ae704c5e910250170608c8d (diff) | |
| parent | 62872f952d6b6d44c30616195a1eba5fe1766815 (diff) | |
Merge android-4.4.174 (62872f9) into msm-4.4
* refs/heads/tmp-62872f9
Linux 4.4.174
rcu: Force boolean subscript for expedited stall warnings
net: ipv4: do not handle duplicate fragments as overlapping
net: fix pskb_trim_rcsum_slow() with odd trim offset
inet: frags: better deal with smp races
ipv4: frags: precedence bug in ip_expire()
ip: frags: fix crash in ip_do_fragment()
ip: process in-order fragments efficiently
ip: add helpers to process in-order fragments faster.
ip: use rb trees for IP frag queue.
net: pskb_trim_rcsum() and CHECKSUM_COMPLETE are friends
ipv6: defrag: drop non-last frags smaller than min mtu
net: modify skb_rbtree_purge to return the truesize of all purged skbs.
ip: discard IPv4 datagrams with overlapping segments.
inet: frags: fix ip6frag_low_thresh boundary
inet: frags: get rid of ipfrag_skb_cb/FRAG_CB
inet: frags: reorganize struct netns_frags
rhashtable: reorganize struct rhashtable layout
ipv6: frags: rewrite ip6_expire_frag_queue()
inet: frags: do not clone skb in ip_expire()
inet: frags: break the 2GB limit for frags storage
inet: frags: remove inet_frag_maybe_warn_overflow()
inet: frags: get rif of inet_frag_evicting()
inet: frags: remove some helpers
ipfrag: really prevent allocation on netns exit
net: ieee802154: 6lowpan: fix frag reassembly
inet: frags: use rhashtables for reassembly units
rhashtable: add schedule points
rhashtable: Add rhashtable_lookup()
rhashtable: add rhashtable_lookup_get_insert_key()
inet: frags: refactor lowpan_net_frag_init()
inet: frags: refactor ipv6_frag_init()
inet: frags: refactor ipfrag_init()
inet: frags: add a pointer to struct netns_frags
inet: frags: change inet_frags_init_net() return value
Change-Id: I1f6e2fd6f7960509fa52b726458c74c9fb070b5b
Signed-off-by: Srinivasarao P <spathi@codeaurora.org>
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/rhashtable.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/lib/rhashtable.c b/lib/rhashtable.c index 37ea94b636a3..7bb8649429bf 100644 --- a/lib/rhashtable.c +++ b/lib/rhashtable.c @@ -250,8 +250,10 @@ static int rhashtable_rehash_table(struct rhashtable *ht) if (!new_tbl) return 0; - for (old_hash = 0; old_hash < old_tbl->size; old_hash++) + for (old_hash = 0; old_hash < old_tbl->size; old_hash++) { rhashtable_rehash_chain(ht, old_hash); + cond_resched(); + } /* Publish the new table pointer. */ rcu_assign_pointer(ht->tbl, new_tbl); @@ -441,7 +443,8 @@ EXPORT_SYMBOL_GPL(rhashtable_insert_rehash); struct bucket_table *rhashtable_insert_slow(struct rhashtable *ht, const void *key, struct rhash_head *obj, - struct bucket_table *tbl) + struct bucket_table *tbl, + void **data) { struct rhash_head *head; unsigned int hash; @@ -452,8 +455,11 @@ struct bucket_table *rhashtable_insert_slow(struct rhashtable *ht, spin_lock_nested(rht_bucket_lock(tbl, hash), SINGLE_DEPTH_NESTING); err = -EEXIST; - if (key && rhashtable_lookup_fast(ht, key, ht->p)) - goto exit; + if (key) { + *data = rhashtable_lookup_fast(ht, key, ht->p); + if (*data) + goto exit; + } err = -E2BIG; if (unlikely(rht_grow_above_max(ht, tbl))) @@ -838,6 +844,7 @@ void rhashtable_free_and_destroy(struct rhashtable *ht, for (i = 0; i < tbl->size; i++) { struct rhash_head *pos, *next; + cond_resched(); for (pos = rht_dereference(tbl->buckets[i], ht), next = !rht_is_a_nulls(pos) ? rht_dereference(pos->next, ht) : NULL; |
