dev_kfree_skb(privptr->pk_skb); 
dev_kfree_skb_any(privptr->pk_skb); 
claw_release(struct net_device *dev){        int                rc;        int                i;        unsigned long      saveflags;        unsigned long      parm;        struct claw_privbk *privptr;        DECLARE_WAITQUEUE(wait, current);        struct ccwbk*             p_this_ccw;        struct ccwbk*             p_buf;	if (!dev)                return 0;        privptr = (struct claw_privbk *) dev->priv;        if (!privptr)                return 0;#ifdef FUNCTRACE        printk(KERN_INFO "%s:%s Enter  \n",dev->name,__FUNCTION__);#endif	CLAW_DBF_TEXT(4,trace,"release");#ifdef DEBUGMSG        printk(KERN_INFO "%s: variable dev =\n",dev->name);        dumpit((char *) dev, sizeof(struct net_device));	printk(KERN_INFO "Priv Buffalloc %d\n",privptr->buffs_alloc);	printk(KERN_INFO "Priv p_buff_ccw = %p\n",&privptr->p_buff_ccw);#endif        privptr->release_pend=1;        claw_setbit_busy(TB_STOP,dev);        for ( i = 1; i >=0 ;  i--) {                spin_lock_irqsave(			get_ccwdev_lock(privptr->channel[i].cdev), saveflags);             /*   del_timer(&privptr->channel[READ].timer);  */ 		privptr->channel[i].claw_state = CLAW_STOP;                privptr->channel[i].IO_active = 0;                parm = (unsigned long) &privptr->channel[i];		if (i == WRITE)			claw_purge_skb_queue(				&privptr->channel[WRITE].collect_queue);                rc = ccw_device_halt (privptr->channel[i].cdev, parm);	        if (privptr->system_validate_comp==0x00)  /* never opened? */                   init_waitqueue_head(&privptr->channel[i].wait);                add_wait_queue(&privptr->channel[i].wait, &wait);                set_current_state(TASK_INTERRUPTIBLE);	        spin_unlock_irqrestore(			get_ccwdev_lock(privptr->channel[i].cdev), saveflags);	        schedule();		set_current_state(TASK_RUNNING);	        remove_wait_queue(&privptr->channel[i].wait, &wait);	        if (rc != 0) {                        ccw_check_return_code(privptr->channel[i].cdev, rc);                }        }	if (privptr->pk_skb != NULL) {		dev_kfree_skb(privptr->pk_skb);		privptr->pk_skb = NULL;	}	if(privptr->buffs_alloc != 1) {#ifdef FUNCTRACE	printk(KERN_INFO "%s:%s Exit on line %d\n",		dev->name,__FUNCTION__,__LINE__);#endif		CLAW_DBF_TEXT(4,trace,"none2fre");		return 0;	}	CLAW_DBF_TEXT(4,trace,"freebufs");	if (privptr->p_buff_ccw != NULL) {        	free_pages((unsigned long)privptr->p_buff_ccw,	        	(int)pages_to_order_of_mag(privptr->p_buff_ccw_num));	}	CLAW_DBF_TEXT(4,trace,"freeread");        if (privptr->p_env->read_size < PAGE_SIZE) {	    if (privptr->p_buff_read != NULL) {                free_pages((unsigned long)privptr->p_buff_read,		      (int)pages_to_order_of_mag(privptr->p_buff_read_num));		}        }        else {                p_buf=privptr->p_read_active_first;                while (p_buf!=NULL) {                        free_pages((unsigned long)p_buf->p_buffer,			     (int)pages_to_order_of_mag(			     	privptr->p_buff_pages_perread ));                        p_buf=p_buf->next;                }        }	 CLAW_DBF_TEXT(4,trace,"freewrit");        if (privptr->p_env->write_size < PAGE_SIZE ) {                free_pages((unsigned long)privptr->p_buff_write,		      (int)pages_to_order_of_mag(privptr->p_buff_write_num));        }        else {                p_buf=privptr->p_write_active_first;                while (p_buf!=NULL) {                        free_pages((unsigned long)p_buf->p_buffer,			      (int)pages_to_order_of_mag(			      privptr->p_buff_pages_perwrite ));                        p_buf=p_buf->next;                }        }	 CLAW_DBF_TEXT(4,trace,"clearptr");	privptr->buffs_alloc = 0;        privptr->p_buff_ccw=NULL;        privptr->p_buff_read=NULL;        privptr->p_buff_write=NULL;        privptr->system_validate_comp=0;        privptr->release_pend=0;        /*      Remove any writes that were pending and reset all reads   */        p_this_ccw=privptr->p_read_active_first;        while (p_this_ccw!=NULL) {                p_this_ccw->header.length=0xffff;                p_this_ccw->header.opcode=0xff;                p_this_ccw->header.flag=0x00;                p_this_ccw=p_this_ccw->next;        }        while (privptr->p_write_active_first!=NULL) {                p_this_ccw=privptr->p_write_active_first;                p_this_ccw->header.flag=CLAW_PENDING;                privptr->p_write_active_first=p_this_ccw->next;                p_this_ccw->next=privptr->p_write_free_chain;                privptr->p_write_free_chain=p_this_ccw;                ++privptr->write_free_count;        }        privptr->p_write_active_last=NULL;        privptr->mtc_logical_link = -1;        privptr->mtc_skipping = 1;        privptr->mtc_offset=0;        if (((privptr->channel[READ].last_dstat |		privptr->channel[WRITE].last_dstat) &		~(DEV_STAT_CHN_END | DEV_STAT_DEV_END)) != 0x00) {                printk(KERN_WARNING "%s: channel problems during close - "			"read: %02x -  write: %02x\n",                dev->name,		privptr->channel[READ].last_dstat,		privptr->channel[WRITE].last_dstat);		 CLAW_DBF_TEXT(2,trace,"badclose");        }#ifdef FUNCTRACE	printk(KERN_INFO "%s:%s Exit on line %d\n",		dev->name,__FUNCTION__,__LINE__);#endif	CLAW_DBF_TEXT(4,trace,"rlsexit");        return 0;}      /* end of claw_release     */
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/8e84c801bad50d2e0e9f802610d2c13f8d342230/claw.c/clean/drivers/s390/net/claw.c