VDEBUG (data->dev, "%s read %d OUT, status %d\n", data->name, len, value);
VDEBUG (data->dev, "%s read %zu OUT, status %d\n", data->name, len, (int) value);
ep_read (struct file *fd, char __user *buf, size_t len, loff_t *ptr){	struct ep_data		*data = fd->private_data;	void			*kbuf;	ssize_t			value;	if ((value = get_ready_ep (fd->f_flags, data)) < 0)		return value;	/* halt any endpoint by doing a "wrong direction" i/o call */	if (data->desc.bEndpointAddress & USB_DIR_IN) {		if ((data->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)				== USB_ENDPOINT_XFER_ISOC)			return -EINVAL;		DBG (data->dev, "%s halt\n", data->name);		spin_lock_irq (&data->dev->lock);		if (likely (data->ep != NULL))			usb_ep_set_halt (data->ep);		spin_unlock_irq (&data->dev->lock);		up (&data->lock);		return -EBADMSG;	}	/* FIXME readahead for O_NONBLOCK and poll(); careful with ZLPs */	value = -ENOMEM;	kbuf = kmalloc (len, SLAB_KERNEL);	if (unlikely (!kbuf))		goto free1;	value = ep_io (data, kbuf, len);	VDEBUG (data->dev, "%s read %d OUT, status %d\n",		data->name, len, value);	if (value >= 0 && copy_to_user (buf, kbuf, value))		value = -EFAULT;free1:	up (&data->lock);	kfree (kbuf);	return value;}