Lines Matching refs:st

2630  * @st: state variable
2636 unsigned int to, struct skb_seq_state *st)
2638 st->lower_offset = from;
2639 st->upper_offset = to;
2640 st->root_skb = st->cur_skb = skb;
2641 st->frag_idx = st->stepped_offset = 0;
2642 st->frag_data = NULL;
2650 * @st: state variable
2672 struct skb_seq_state *st)
2674 unsigned int block_limit, abs_offset = consumed + st->lower_offset;
2677 if (unlikely(abs_offset >= st->upper_offset)) {
2678 if (st->frag_data) {
2679 kunmap_atomic(st->frag_data);
2680 st->frag_data = NULL;
2686 block_limit = skb_headlen(st->cur_skb) + st->stepped_offset;
2688 if (abs_offset < block_limit && !st->frag_data) {
2689 *data = st->cur_skb->data + (abs_offset - st->stepped_offset);
2693 if (st->frag_idx == 0 && !st->frag_data)
2694 st->stepped_offset += skb_headlen(st->cur_skb);
2696 while (st->frag_idx < skb_shinfo(st->cur_skb)->nr_frags) {
2697 frag = &skb_shinfo(st->cur_skb)->frags[st->frag_idx];
2698 block_limit = skb_frag_size(frag) + st->stepped_offset;
2701 if (!st->frag_data)
2702 st->frag_data = kmap_atomic(skb_frag_page(frag));
2704 *data = (u8 *) st->frag_data + frag->page_offset +
2705 (abs_offset - st->stepped_offset);
2710 if (st->frag_data) {
2711 kunmap_atomic(st->frag_data);
2712 st->frag_data = NULL;
2715 st->frag_idx++;
2716 st->stepped_offset += skb_frag_size(frag);
2719 if (st->frag_data) {
2720 kunmap_atomic(st->frag_data);
2721 st->frag_data = NULL;
2724 if (st->root_skb == st->cur_skb && skb_has_frag_list(st->root_skb)) {
2725 st->cur_skb = skb_shinfo(st->root_skb)->frag_list;
2726 st->frag_idx = 0;
2728 } else if (st->cur_skb->next) {
2729 st->cur_skb = st->cur_skb->next;
2730 st->frag_idx = 0;
2740 * @st: state variable
2745 void skb_abort_seq_read(struct skb_seq_state *st)
2747 if (st->frag_data)
2748 kunmap_atomic(st->frag_data);