usb_unregister_notify(&mon_nb); 
static void __exit mon_exit(void){	struct mon_bus *mbus;	struct list_head *p;	usb_mon_deregister();	down(&mon_lock);	while (!list_empty(&mon_buses)) {		p = mon_buses.next;		mbus = list_entry(p, struct mon_bus, bus_link);		list_del(p);		debugfs_remove(mbus->dent_t);		debugfs_remove(mbus->dent_s);		/*		 * This never happens, because the open/close paths in		 * file level maintain module use counters and so rmmod fails		 * before reaching here. However, better be safe...		 */		if (mbus->nreaders) {			printk(KERN_ERR TAG			    ": Outstanding opens (%d) on usb%d, leaking...\n",			    mbus->nreaders, mbus->u_bus->busnum);			atomic_set(&mbus->ref.refcount, 2);	/* Force leak */		}		mon_dissolve(mbus, mbus->u_bus);		kref_put(&mbus->ref, mon_bus_drop);	}	up(&mon_lock);	debugfs_remove(mon_dir);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/72adaa962741e8e910300b66bb123b1a9c31a8a8/mon_main.c/clean/drivers/usb/mon/mon_main.c