Lines Matching refs:flow
75 struct atm_flow_data *flow; in lookup_flow() local
77 list_for_each_entry(flow, &p->flows, list) { in lookup_flow()
78 if (flow->common.classid == classid) in lookup_flow()
79 return flow; in lookup_flow()
88 struct atm_flow_data *flow = (struct atm_flow_data *)arg; in atm_tc_graft() local
91 sch, p, flow, new, old); in atm_tc_graft()
92 if (list_empty(&flow->list)) in atm_tc_graft()
96 *old = flow->q; in atm_tc_graft()
97 flow->q = new; in atm_tc_graft()
105 struct atm_flow_data *flow = (struct atm_flow_data *)cl; in atm_tc_leaf() local
107 pr_debug("atm_tc_leaf(sch %p,flow %p)\n", sch, flow); in atm_tc_leaf()
108 return flow ? flow->q : NULL; in atm_tc_leaf()
114 struct atm_flow_data *flow; in atm_tc_find() local
117 flow = lookup_flow(sch, classid); in atm_tc_find()
118 pr_debug("%s: flow %p\n", __func__, flow); in atm_tc_find()
119 return (unsigned long)flow; in atm_tc_find()
126 struct atm_flow_data *flow; in atm_tc_bind_filter() local
129 flow = lookup_flow(sch, classid); in atm_tc_bind_filter()
130 if (flow) in atm_tc_bind_filter()
131 flow->ref++; in atm_tc_bind_filter()
132 pr_debug("%s: flow %p\n", __func__, flow); in atm_tc_bind_filter()
133 return (unsigned long)flow; in atm_tc_bind_filter()
144 struct atm_flow_data *flow = (struct atm_flow_data *)cl; in atm_tc_put() local
146 pr_debug("atm_tc_put(sch %p,[qdisc %p],flow %p)\n", sch, p, flow); in atm_tc_put()
147 if (--flow->ref) in atm_tc_put()
150 list_del_init(&flow->list); in atm_tc_put()
151 pr_debug("atm_tc_put: qdisc %p\n", flow->q); in atm_tc_put()
152 qdisc_destroy(flow->q); in atm_tc_put()
153 tcf_block_put(flow->block); in atm_tc_put()
154 if (flow->sock) { in atm_tc_put()
156 file_count(flow->sock->file)); in atm_tc_put()
157 flow->vcc->pop = flow->old_pop; in atm_tc_put()
158 sockfd_put(flow->sock); in atm_tc_put()
160 if (flow->excess) in atm_tc_put()
161 atm_tc_put(sch, (unsigned long)flow->excess); in atm_tc_put()
162 if (flow != &p->link) in atm_tc_put()
163 kfree(flow); in atm_tc_put()
197 struct atm_flow_data *flow = (struct atm_flow_data *)*arg; in atm_tc_change() local
206 "flow %p,opt %p)\n", sch, p, classid, parent, flow, opt); in atm_tc_change()
219 if (flow) in atm_tc_change()
277 flow = kzalloc(sizeof(struct atm_flow_data) + hdr_len, GFP_KERNEL); in atm_tc_change()
278 pr_debug("atm_tc_change: flow %p\n", flow); in atm_tc_change()
279 if (!flow) { in atm_tc_change()
284 error = tcf_block_get(&flow->block, &flow->filter_list); in atm_tc_change()
286 kfree(flow); in atm_tc_change()
290 flow->q = qdisc_create_dflt(sch->dev_queue, &pfifo_qdisc_ops, classid); in atm_tc_change()
291 if (!flow->q) in atm_tc_change()
292 flow->q = &noop_qdisc; in atm_tc_change()
293 pr_debug("atm_tc_change: qdisc %p\n", flow->q); in atm_tc_change()
294 flow->sock = sock; in atm_tc_change()
295 flow->vcc = ATM_SD(sock); /* speedup */ in atm_tc_change()
296 flow->vcc->user_back = flow; in atm_tc_change()
297 pr_debug("atm_tc_change: vcc %p\n", flow->vcc); in atm_tc_change()
298 flow->old_pop = flow->vcc->pop; in atm_tc_change()
299 flow->parent = p; in atm_tc_change()
300 flow->vcc->pop = sch_atm_pop; in atm_tc_change()
301 flow->common.classid = classid; in atm_tc_change()
302 flow->ref = 1; in atm_tc_change()
303 flow->excess = excess; in atm_tc_change()
304 list_add(&flow->list, &p->link.list); in atm_tc_change()
305 flow->hdr_len = hdr_len; in atm_tc_change()
307 memcpy(flow->hdr, hdr, hdr_len); in atm_tc_change()
309 memcpy(flow->hdr, llc_oui_ip, sizeof(llc_oui_ip)); in atm_tc_change()
310 *arg = (unsigned long)flow; in atm_tc_change()
320 struct atm_flow_data *flow = (struct atm_flow_data *)arg; in atm_tc_delete() local
322 pr_debug("atm_tc_delete(sch %p,[qdisc %p],flow %p)\n", sch, p, flow); in atm_tc_delete()
323 if (list_empty(&flow->list)) in atm_tc_delete()
325 if (rcu_access_pointer(flow->filter_list) || flow == &p->link) in atm_tc_delete()
331 if (flow->ref < 2) { in atm_tc_delete()
332 pr_err("atm_tc_delete: flow->ref == %d\n", flow->ref); in atm_tc_delete()
335 if (flow->ref > 2) in atm_tc_delete()
344 struct atm_flow_data *flow; in atm_tc_walk() local
349 list_for_each_entry(flow, &p->flows, list) { in atm_tc_walk()
351 walker->fn(sch, (unsigned long)flow, walker) < 0) { in atm_tc_walk()
362 struct atm_flow_data *flow = (struct atm_flow_data *)cl; in atm_tc_tcf_block() local
364 pr_debug("atm_tc_find_tcf(sch %p,[qdisc %p],flow %p)\n", sch, p, flow); in atm_tc_tcf_block()
365 return flow ? flow->block : p->link.block; in atm_tc_tcf_block()
374 struct atm_flow_data *flow; in atm_tc_enqueue() local
381 flow = NULL; in atm_tc_enqueue()
383 !(flow = (struct atm_flow_data *)atm_tc_find(sch, skb->priority))) { in atm_tc_enqueue()
386 list_for_each_entry(flow, &p->flows, list) { in atm_tc_enqueue()
387 fl = rcu_dereference_bh(flow->filter_list); in atm_tc_enqueue()
392 flow = (struct atm_flow_data *)res.class; in atm_tc_enqueue()
393 if (!flow) in atm_tc_enqueue()
394 flow = lookup_flow(sch, res.classid); in atm_tc_enqueue()
398 flow = NULL; in atm_tc_enqueue()
402 if (!flow) { in atm_tc_enqueue()
403 flow = &p->link; in atm_tc_enqueue()
405 if (flow->vcc) in atm_tc_enqueue()
406 ATM_SKB(skb)->atm_options = flow->vcc->atm_options; in atm_tc_enqueue()
419 if (flow->excess) in atm_tc_enqueue()
420 flow = flow->excess; in atm_tc_enqueue()
428 ret = qdisc_enqueue(skb, flow->q, to_free); in atm_tc_enqueue()
433 if (flow) in atm_tc_enqueue()
434 flow->qstats.drops++; in atm_tc_enqueue()
447 if (flow == &p->link) { in atm_tc_enqueue()
466 struct atm_flow_data *flow; in sch_atm_dequeue() local
470 list_for_each_entry(flow, &p->flows, list) { in sch_atm_dequeue()
471 if (flow == &p->link) in sch_atm_dequeue()
477 while ((skb = flow->q->ops->peek(flow->q))) { in sch_atm_dequeue()
478 if (!atm_may_send(flow->vcc, skb->truesize)) in sch_atm_dequeue()
481 skb = qdisc_dequeue_peeked(flow->q); in sch_atm_dequeue()
486 bstats_update(&flow->bstats, skb); in sch_atm_dequeue()
487 pr_debug("atm_tc_dequeue: sending on class %p\n", flow); in sch_atm_dequeue()
490 if (skb_headroom(skb) < flow->hdr_len) { in sch_atm_dequeue()
493 new = skb_realloc_headroom(skb, flow->hdr_len); in sch_atm_dequeue()
501 ATM_SKB(skb)->vcc = flow->vcc; in sch_atm_dequeue()
502 memcpy(skb_push(skb, flow->hdr_len), flow->hdr, in sch_atm_dequeue()
503 flow->hdr_len); in sch_atm_dequeue()
505 &sk_atm(flow->vcc)->sk_wmem_alloc); in sch_atm_dequeue()
507 flow->vcc->send(flow->vcc, skb); in sch_atm_dequeue()
564 struct atm_flow_data *flow; in atm_tc_reset() local
567 list_for_each_entry(flow, &p->flows, list) in atm_tc_reset()
568 qdisc_reset(flow->q); in atm_tc_reset()
575 struct atm_flow_data *flow, *tmp; in atm_tc_destroy() local
578 list_for_each_entry(flow, &p->flows, list) { in atm_tc_destroy()
579 tcf_block_put(flow->block); in atm_tc_destroy()
580 flow->block = NULL; in atm_tc_destroy()
583 list_for_each_entry_safe(flow, tmp, &p->flows, list) { in atm_tc_destroy()
584 if (flow->ref > 1) in atm_tc_destroy()
585 pr_err("atm_destroy: %p->ref = %d\n", flow, flow->ref); in atm_tc_destroy()
586 atm_tc_put(sch, (unsigned long)flow); in atm_tc_destroy()
595 struct atm_flow_data *flow = (struct atm_flow_data *)cl; in atm_tc_dump_class() local
599 sch, p, flow, skb, tcm); in atm_tc_dump_class()
600 if (list_empty(&flow->list)) in atm_tc_dump_class()
602 tcm->tcm_handle = flow->common.classid; in atm_tc_dump_class()
603 tcm->tcm_info = flow->q->handle; in atm_tc_dump_class()
609 if (nla_put(skb, TCA_ATM_HDR, flow->hdr_len, flow->hdr)) in atm_tc_dump_class()
611 if (flow->vcc) { in atm_tc_dump_class()
617 pvc.sap_addr.itf = flow->vcc->dev ? flow->vcc->dev->number : -1; in atm_tc_dump_class()
618 pvc.sap_addr.vpi = flow->vcc->vpi; in atm_tc_dump_class()
619 pvc.sap_addr.vci = flow->vcc->vci; in atm_tc_dump_class()
622 state = ATM_VF2VS(flow->vcc->flags); in atm_tc_dump_class()
626 if (flow->excess) { in atm_tc_dump_class()
627 if (nla_put_u32(skb, TCA_ATM_EXCESS, flow->common.classid)) in atm_tc_dump_class()
643 struct atm_flow_data *flow = (struct atm_flow_data *)arg; in atm_tc_dump_class_stats() local
646 d, NULL, &flow->bstats) < 0 || in atm_tc_dump_class_stats()
647 gnet_stats_copy_queue(d, NULL, &flow->qstats, flow->q->q.qlen) < 0) in atm_tc_dump_class_stats()