[INET]: Consolidate xxx_find() in fragment management
Here we need another callback ->match to check whether the entry found in hash matches the key passed. The key used is the same as the creation argument for inet_frag_create. Yet again, this ->match is the same for netfilter and ipv6. Running a frew steps forward - this callback will later replace the ->equal one. Since the inet_frag_find() uses the already consolidated inet_frag_create() remove the xxx_frag_create from protocol codes. Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
c6fda28229
commit
abd6523d15
@@ -226,8 +226,8 @@ static struct inet_frag_queue *inet_frag_alloc(struct inet_frags *f, void *arg)
|
||||
return q;
|
||||
}
|
||||
|
||||
struct inet_frag_queue *inet_frag_create(struct inet_frags *f, void *arg,
|
||||
unsigned int hash)
|
||||
static struct inet_frag_queue *inet_frag_create(struct inet_frags *f,
|
||||
void *arg, unsigned int hash)
|
||||
{
|
||||
struct inet_frag_queue *q;
|
||||
|
||||
@@ -237,4 +237,23 @@ struct inet_frag_queue *inet_frag_create(struct inet_frags *f, void *arg,
|
||||
|
||||
return inet_frag_intern(q, f, hash);
|
||||
}
|
||||
EXPORT_SYMBOL(inet_frag_create);
|
||||
|
||||
struct inet_frag_queue *inet_frag_find(struct inet_frags *f, void *key,
|
||||
unsigned int hash)
|
||||
{
|
||||
struct inet_frag_queue *q;
|
||||
struct hlist_node *n;
|
||||
|
||||
read_lock(&f->lock);
|
||||
hlist_for_each_entry(q, n, &f->hash[hash], list) {
|
||||
if (f->match(q, key)) {
|
||||
atomic_inc(&q->refcnt);
|
||||
read_unlock(&f->lock);
|
||||
return q;
|
||||
}
|
||||
}
|
||||
read_unlock(&f->lock);
|
||||
|
||||
return inet_frag_create(f, key, hash);
|
||||
}
|
||||
EXPORT_SYMBOL(inet_frag_find);
|
||||
|
Reference in New Issue
Block a user