/* unlock the device */ 
static ssize_t idmouse_read(struct file *file, char __user *buffer, size_t count,				loff_t * ppos){	struct usb_idmouse *dev;	int result = 0;	dev = (struct usb_idmouse *) file->private_data;	// lock this object	down (&dev->sem);	// verify that the device wasn't unplugged	if (!dev->present) {		up (&dev->sem);		return -ENODEV;	}	if (*ppos >= IMGSIZE) {		up (&dev->sem);		return 0;	}	if (count > IMGSIZE - *ppos)		count = IMGSIZE - *ppos;	if (copy_to_user (buffer, dev->bulk_in_buffer + *ppos, count)) {		result = -EFAULT;	} else {		result = count;		*ppos += count;	}	// unlock the device 	up(&dev->sem);	return result;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/4244f72436ab77c3c29a6447af81734ab3925d85/idmouse.c/buggy/drivers/usb/misc/idmouse.c