ulpqueue.c (d49d91d79a8dc5e85108a5ae1c8eef23dec135c1) ulpqueue.c (3ff50b7997fe06cd5d276b229967bb52d6b3b6c1)
1/* SCTP kernel reference Implementation
2 * (C) Copyright IBM Corp. 2001, 2004
3 * Copyright (c) 1999-2000 Cisco, Inc.
4 * Copyright (c) 1999-2001 Motorola, Inc.
5 * Copyright (c) 2001 Intel Corp.
6 * Copyright (c) 2001 Nokia, Inc.
7 * Copyright (c) 2001 La Monte H.P. Yarroll
8 *

--- 377 unchanged lines hidden (view full) ---

386 /* Remove the fragment from the reassembly queue. */
387 __skb_unlink(pos, queue);
388
389 /* Break if we have reached the last fragment. */
390 if (pos == l_frag)
391 break;
392 pos->next = pnext;
393 pos = pnext;
1/* SCTP kernel reference Implementation
2 * (C) Copyright IBM Corp. 2001, 2004
3 * Copyright (c) 1999-2000 Cisco, Inc.
4 * Copyright (c) 1999-2001 Motorola, Inc.
5 * Copyright (c) 2001 Intel Corp.
6 * Copyright (c) 2001 Nokia, Inc.
7 * Copyright (c) 2001 La Monte H.P. Yarroll
8 *

--- 377 unchanged lines hidden (view full) ---

386 /* Remove the fragment from the reassembly queue. */
387 __skb_unlink(pos, queue);
388
389 /* Break if we have reached the last fragment. */
390 if (pos == l_frag)
391 break;
392 pos->next = pnext;
393 pos = pnext;
394 };
394 }
395
396 event = sctp_skb2event(f_frag);
397 SCTP_INC_STATS(SCTP_MIB_REASMUSRMSGS);
398
399 return event;
400}
401
402

--- 68 unchanged lines hidden (view full) ---

471 break;
472
473 case SCTP_DATA_LAST_FRAG:
474 if (first_frag && (ctsn == next_tsn))
475 goto found;
476 else
477 first_frag = NULL;
478 break;
395
396 event = sctp_skb2event(f_frag);
397 SCTP_INC_STATS(SCTP_MIB_REASMUSRMSGS);
398
399 return event;
400}
401
402

--- 68 unchanged lines hidden (view full) ---

471 break;
472
473 case SCTP_DATA_LAST_FRAG:
474 if (first_frag && (ctsn == next_tsn))
475 goto found;
476 else
477 first_frag = NULL;
478 break;
479 };
479 }
480 }
481
482 asoc = ulpq->asoc;
483 if (pd_first) {
484 /* Make sure we can enter partial deliver.
485 * We can trigger partial delivery only if framgent
486 * interleave is set, or the socket is not already
487 * in partial delivery.

--- 63 unchanged lines hidden (view full) ---

551 first_frag = pos;
552 else if (ctsn != next_tsn)
553 goto done;
554 last_frag = pos;
555 is_last = 1;
556 goto done;
557 default:
558 return NULL;
480 }
481
482 asoc = ulpq->asoc;
483 if (pd_first) {
484 /* Make sure we can enter partial deliver.
485 * We can trigger partial delivery only if framgent
486 * interleave is set, or the socket is not already
487 * in partial delivery.

--- 63 unchanged lines hidden (view full) ---

551 first_frag = pos;
552 else if (ctsn != next_tsn)
553 goto done;
554 last_frag = pos;
555 is_last = 1;
556 goto done;
557 default:
558 return NULL;
559 };
559 }
560 }
561
562 /* We have the reassembled event. There is no need to look
563 * further.
564 */
565done:
566 retval = sctp_make_reassembled_event(&ulpq->reasm, first_frag, last_frag);
567 if (retval && is_last)

--- 75 unchanged lines hidden (view full) ---

643 if (ctsn == next_tsn) {
644 next_tsn++;
645 last_frag = pos;
646 } else
647 goto done;
648 break;
649 default:
650 return NULL;
560 }
561
562 /* We have the reassembled event. There is no need to look
563 * further.
564 */
565done:
566 retval = sctp_make_reassembled_event(&ulpq->reasm, first_frag, last_frag);
567 if (retval && is_last)

--- 75 unchanged lines hidden (view full) ---

643 if (ctsn == next_tsn) {
644 next_tsn++;
645 last_frag = pos;
646 } else
647 goto done;
648 break;
649 default:
650 return NULL;
651 };
651 }
652 }
653
654 /* We have the reassembled event. There is no need to look
655 * further.
656 */
657done:
658 retval = sctp_make_reassembled_event(&ulpq->reasm, first_frag, last_frag);
659 return retval;

--- 350 unchanged lines hidden ---
652 }
653
654 /* We have the reassembled event. There is no need to look
655 * further.
656 */
657done:
658 retval = sctp_make_reassembled_event(&ulpq->reasm, first_frag, last_frag);
659 return retval;

--- 350 unchanged lines hidden ---