if (us->unusual_dev->initFunction) us->unusual_dev->initFunction(us);  up(&us->dev_semaphore); 
if (us->unusual_dev->initFunction) { p = us->unusual_dev->initFunction(us); if (p) return p; } 
static int usb_stor_acquire_resources(struct us_data *us){	int p;	us->current_urb = usb_alloc_urb(0, GFP_KERNEL);	if (!us->current_urb) {		US_DEBUGP("URB allocation failed\n");		return -ENOMEM;	}	/* Lock the device while we carry out the next two operations */	down(&us->dev_semaphore);	/* For bulk-only devices, determine the max LUN value */	if (us->protocol == US_PR_BULK) {		p = usb_stor_Bulk_max_lun(us);		if (p < 0) {			up(&us->dev_semaphore);			return p;		}		us->max_lun = p;	}	/* Just before we start our control thread, initialize	 * the device if it needs initialization */	if (us->unusual_dev->initFunction)		us->unusual_dev->initFunction(us);	up(&us->dev_semaphore);	/* Start up our control thread */	p = kernel_thread(usb_stor_control_thread, us, CLONE_VM);	if (p < 0) {		printk(KERN_WARNING USB_STORAGE 		       "Unable to start control thread\n");		return p;	}	us->pid = p;	atomic_inc(&total_threads);	/* Wait for the thread to start */	wait_for_completion(&(us->notify));	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/b876aef7f890d8c59a45b78858a36cf60fddf522/usb.c/clean/drivers/usb/storage/usb.c