if (urb->status == -EINPROGRESS) { /* Should never happen */ err("%s - flushing while urb is active !", __FUNCTION__); return; } 
static void ipaq_write_gather(struct usb_serial_port *port){	struct ipaq_private	*priv = usb_get_serial_port_data(port);	struct usb_serial	*serial = port->serial;	int			count, room;	struct ipaq_packet	*pkt, *tmp;	struct urb		*urb = port->write_urb;	if (urb->status == -EINPROGRESS) {		/* Should never happen */		err("%s - flushing while urb is active !", __FUNCTION__);		return;	}	room = URBDATA_SIZE;	list_for_each_entry_safe(pkt, tmp, &priv->queue, list) {		count = min(room, (int)(pkt->len - pkt->written));		memcpy(urb->transfer_buffer + (URBDATA_SIZE - room),		       pkt->data + pkt->written, count);		room -= count;		pkt->written += count;		priv->queue_len -= count;		if (pkt->written == pkt->len) {			list_move(&pkt->list, &priv->freelist);			priv->free_len += PACKET_SIZE;		}		if (room == 0) {			break;		}	}	count = URBDATA_SIZE - room;	usb_fill_bulk_urb(port->write_urb, serial->dev, 		      usb_sndbulkpipe(serial->dev, port->bulk_out_endpointAddress),		      port->write_urb->transfer_buffer, count, ipaq_write_bulk_callback,		      port);	return;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/507ca9bc0476662f3463888d583864834eab1e11/ipaq.c/buggy/drivers/usb/serial/ipaq.c