FreeSkb(oskb); 
dev_kfree_skb(oskb); 
l2_pull_iqueue(struct FsmInst *fi, int event, void *arg){	struct PStack *st = fi->userdata;	struct sk_buff *skb, *oskb;	struct Layer2 *l2 = &st->l2;	u_char header[MAX_HEADER_LEN];	int i;	int unsigned p1;	u_long flags;	if (!cansend(st))		return;	skb = skb_dequeue(&l2->i_queue);	if (!skb)		return;	spin_lock_irqsave(&l2->lock, flags);	if(test_bit(FLG_MOD128, &l2->flag))		p1 = (l2->vs - l2->va) % 128;	else		p1 = (l2->vs - l2->va) % 8;	p1 = (p1 + l2->sow) % l2->window;	if (l2->windowar[p1]) {		printk(KERN_WARNING "isdnl2 try overwrite ack queue entry %d\n",		       p1);		dev_kfree_skb(l2->windowar[p1]);	}	l2->windowar[p1] = skb_clone(skb, GFP_ATOMIC);	i = sethdraddr(&st->l2, header, CMD);	if (test_bit(FLG_MOD128, &l2->flag)) {		header[i++] = l2->vs << 1;		header[i++] = l2->vr << 1;		l2->vs = (l2->vs + 1) % 128;	} else {		header[i++] = (l2->vr << 5) | (l2->vs << 1);		l2->vs = (l2->vs + 1) % 8;	}	spin_unlock_irqrestore(&l2->lock, flags);	p1 = skb->data - skb->head;	if (p1 >= i)		memcpy(skb_push(skb, i), header, i);	else {		printk(KERN_WARNING		"isdl2 pull_iqueue skb header(%d/%d) too short\n", i, p1);		oskb = skb;		skb = alloc_skb(oskb->len + i, GFP_ATOMIC);		memcpy(skb_put(skb, i), header, i);		memcpy(skb_put(skb, oskb->len), oskb->data, oskb->len);		FreeSkb(oskb);	}	st->l2.l2l1(st, PH_PULL | INDICATION, skb);	test_and_clear_bit(FLG_ACK_PEND, &st->l2.flag);	if (!test_and_set_bit(FLG_T200_RUN, &st->l2.flag)) {		FsmDelTimer(&st->l2.t203, 13);		FsmAddTimer(&st->l2.t200, st->l2.T200, EV_L2_T200, NULL, 11);	}	if (skb_queue_len(&l2->i_queue) && cansend(st))		st->l2.l2l1(st, PH_PULL | REQUEST, NULL);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/672c3fd9069e5a138f9d4afc9aeb5aa34aacce32/isdnl2.c/buggy/drivers/isdn/hisax/isdnl2.c