Lines Matching refs:q
51 static unsigned int lowpan_hashfn(const struct inet_frag_queue *q) in lowpan_hashfn() argument
55 fq = container_of(q, struct lowpan_frag_queue, q); in lowpan_hashfn()
59 static bool lowpan_frag_match(const struct inet_frag_queue *q, const void *a) in lowpan_frag_match() argument
64 fq = container_of(q, struct lowpan_frag_queue, q); in lowpan_frag_match()
70 static void lowpan_frag_init(struct inet_frag_queue *q, const void *a) in lowpan_frag_init() argument
75 fq = container_of(q, struct lowpan_frag_queue, q); in lowpan_frag_init()
88 fq = container_of((struct inet_frag_queue *)data, struct frag_queue, q); in lowpan_frag_expire()
89 net = container_of(fq->q.net, struct net, ieee802154_lowpan.frags); in lowpan_frag_expire()
91 spin_lock(&fq->q.lock); in lowpan_frag_expire()
93 if (fq->q.flags & INET_FRAG_COMPLETE) in lowpan_frag_expire()
96 inet_frag_kill(&fq->q, &lowpan_frags); in lowpan_frag_expire()
98 spin_unlock(&fq->q.lock); in lowpan_frag_expire()
99 inet_frag_put(&fq->q, &lowpan_frags); in lowpan_frag_expire()
107 struct inet_frag_queue *q; in fq_find() local
120 q = inet_frag_find(&ieee802154_lowpan->frags, in fq_find()
122 if (IS_ERR_OR_NULL(q)) { in fq_find()
123 inet_frag_maybe_warn_overflow(q, pr_fmt()); in fq_find()
126 return container_of(q, struct lowpan_frag_queue, q); in fq_find()
136 if (fq->q.flags & INET_FRAG_COMPLETE) in lowpan_frag_queue()
147 if (end < fq->q.len || in lowpan_frag_queue()
148 ((fq->q.flags & INET_FRAG_LAST_IN) && end != fq->q.len)) in lowpan_frag_queue()
150 fq->q.flags |= INET_FRAG_LAST_IN; in lowpan_frag_queue()
151 fq->q.len = end; in lowpan_frag_queue()
153 if (end > fq->q.len) { in lowpan_frag_queue()
155 if (fq->q.flags & INET_FRAG_LAST_IN) in lowpan_frag_queue()
157 fq->q.len = end; in lowpan_frag_queue()
165 prev = fq->q.fragments_tail; in lowpan_frag_queue()
173 for (next = fq->q.fragments; next != NULL; next = next->next) { in lowpan_frag_queue()
184 fq->q.fragments_tail = skb; in lowpan_frag_queue()
188 fq->q.fragments = skb; in lowpan_frag_queue()
194 fq->q.stamp = skb->tstamp; in lowpan_frag_queue()
196 fq->q.flags |= INET_FRAG_FIRST_IN; in lowpan_frag_queue()
198 fq->q.meat += skb->len; in lowpan_frag_queue()
199 add_frag_mem_limit(fq->q.net, skb->truesize); in lowpan_frag_queue()
201 if (fq->q.flags == (INET_FRAG_FIRST_IN | INET_FRAG_LAST_IN) && in lowpan_frag_queue()
202 fq->q.meat == fq->q.len) { in lowpan_frag_queue()
229 struct sk_buff *fp, *head = fq->q.fragments; in lowpan_frag_reasm()
232 inet_frag_kill(&fq->q, &lowpan_frags); in lowpan_frag_reasm()
244 fq->q.fragments_tail = fp; in lowpan_frag_reasm()
247 skb_morph(head, fq->q.fragments); in lowpan_frag_reasm()
248 head->next = fq->q.fragments->next; in lowpan_frag_reasm()
250 consume_skb(fq->q.fragments); in lowpan_frag_reasm()
251 fq->q.fragments = head; in lowpan_frag_reasm()
279 add_frag_mem_limit(fq->q.net, clone->truesize); in lowpan_frag_reasm()
302 sub_frag_mem_limit(fq->q.net, sum_truesize); in lowpan_frag_reasm()
306 head->tstamp = fq->q.stamp; in lowpan_frag_reasm()
308 fq->q.fragments = NULL; in lowpan_frag_reasm()
309 fq->q.fragments_tail = NULL; in lowpan_frag_reasm()
436 spin_lock(&fq->q.lock); in lowpan_frag_rcv()
438 spin_unlock(&fq->q.lock); in lowpan_frag_rcv()
440 inet_frag_put(&fq->q, &lowpan_frags); in lowpan_frag_rcv()