Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 drivers/block/ub.c                  |    8 ++++----
 drivers/net/irda/irda-usb.c         |   13 ++-----------
 drivers/usb/atm/cxacru.c            |    2 --
 drivers/usb/core/message.c          |    4 +---
 drivers/usb/core/urb.c              |   26 ++++----------------------
 drivers/usb/input/hid-core.c        |    6 +++---
 drivers/usb/misc/auerswald.c        |    3 +--
 drivers/usb/misc/sisusbvga/sisusb.c |    4 ++--
 drivers/usb/misc/usbtest.c          |    2 --
 drivers/usb/net/catc.c              |    2 --
 drivers/usb/net/kaweth.c            |    1 -
 drivers/usb/net/pegasus.c           |    1 -
 drivers/usb/net/rtl8150.c           |    1 -
 drivers/usb/net/usbnet.c            |    2 --
 drivers/usb/net/zd1201.c            |    1 -
 drivers/usb/storage/transport.c     |    7 +++----
 include/linux/usb.h                 |    9 +--------
 sound/usb/usbaudio.c                |   10 ++++------
 18 files changed, 25 insertions(+), 77 deletions(-)

diff -puN drivers/block/ub.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK drivers/block/ub.c
--- devel/drivers/block/ub.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK	2005-09-07 20:10:18.000000000 -0700
+++ devel-akpm/drivers/block/ub.c	2005-09-07 20:10:18.000000000 -0700
@@ -1010,7 +1010,7 @@ static int ub_scsi_cmd_start(struct ub_d
 	sc->last_pipe = sc->send_bulk_pipe;
 	usb_fill_bulk_urb(&sc->work_urb, sc->dev, sc->send_bulk_pipe,
 	    bcb, US_BULK_CB_WRAP_LEN, ub_urb_complete, sc);
-	sc->work_urb.transfer_flags = URB_ASYNC_UNLINK;
+	sc->work_urb.transfer_flags = 0;
 
 	/* Fill what we shouldn't be filling, because usb-storage did so. */
 	sc->work_urb.actual_length = 0;
@@ -1395,7 +1395,7 @@ static void ub_data_start(struct ub_dev 
 	usb_fill_bulk_urb(&sc->work_urb, sc->dev, pipe,
 	    page_address(sg->page) + sg->offset, sg->length,
 	    ub_urb_complete, sc);
-	sc->work_urb.transfer_flags = URB_ASYNC_UNLINK;
+	sc->work_urb.transfer_flags = 0;
 	sc->work_urb.actual_length = 0;
 	sc->work_urb.error_count = 0;
 	sc->work_urb.status = 0;
@@ -1442,7 +1442,7 @@ static int __ub_state_stat(struct ub_dev
 	sc->last_pipe = sc->recv_bulk_pipe;
 	usb_fill_bulk_urb(&sc->work_urb, sc->dev, sc->recv_bulk_pipe,
 	    &sc->work_bcs, US_BULK_CS_WRAP_LEN, ub_urb_complete, sc);
-	sc->work_urb.transfer_flags = URB_ASYNC_UNLINK;
+	sc->work_urb.transfer_flags = 0;
 	sc->work_urb.actual_length = 0;
 	sc->work_urb.error_count = 0;
 	sc->work_urb.status = 0;
@@ -1563,7 +1563,7 @@ static int ub_submit_clear_stall(struct 
 
 	usb_fill_control_urb(&sc->work_urb, sc->dev, sc->send_ctrl_pipe,
 	    (unsigned char*) cr, NULL, 0, ub_urb_complete, sc);
-	sc->work_urb.transfer_flags = URB_ASYNC_UNLINK;
+	sc->work_urb.transfer_flags = 0;
 	sc->work_urb.actual_length = 0;
 	sc->work_urb.error_count = 0;
 	sc->work_urb.status = 0;
diff -puN drivers/net/irda/irda-usb.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK drivers/net/irda/irda-usb.c
--- devel/drivers/net/irda/irda-usb.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK	2005-09-07 20:10:18.000000000 -0700
+++ devel-akpm/drivers/net/irda/irda-usb.c	2005-09-07 20:10:18.000000000 -0700
@@ -267,7 +267,7 @@ static void irda_usb_change_speed_xbofs(
                       frame, IRDA_USB_SPEED_MTU,
                       speed_bulk_callback, self);
 	urb->transfer_buffer_length = USB_IRDA_HEADER;
-	urb->transfer_flags = URB_ASYNC_UNLINK;
+	urb->transfer_flags = 0;
 
 	/* Irq disabled -> GFP_ATOMIC */
 	if ((ret = usb_submit_urb(urb, GFP_ATOMIC))) {
@@ -401,15 +401,12 @@ static int irda_usb_hard_xmit(struct sk_
                       skb->data, IRDA_SKB_MAX_MTU,
                       write_bulk_callback, skb);
 	urb->transfer_buffer_length = skb->len;
-	/* Note : unlink *must* be Asynchronous because of the code in 
-	 * irda_usb_net_timeout() -> call in irq - Jean II */
-	urb->transfer_flags = URB_ASYNC_UNLINK;
 	/* This flag (URB_ZERO_PACKET) indicates that what we send is not
 	 * a continuous stream of data but separate packets.
 	 * In this case, the USB layer will insert an empty USB frame (TD)
 	 * after each of our packets that is exact multiple of the frame size.
 	 * This is how the dongle will detect the end of packet - Jean II */
-	urb->transfer_flags |= URB_ZERO_PACKET;
+	urb->transfer_flags = URB_ZERO_PACKET;
 
 	/* Generate min turn time. FIXME: can we do better than this? */
 	/* Trying to a turnaround time at this level is trying to measure
@@ -630,8 +627,6 @@ static void irda_usb_net_timeout(struct 
 			 * in completion handler, because urb->status will
 			 * be -ENOENT. We will fix that at the next watchdog,
 			 * leaving more time to USB to recover...
-			 * Also, we are in interrupt, so we need to have
-			 * URB_ASYNC_UNLINK to work properly...
 			 * Jean II */
 			done = 1;
 			break;
@@ -1008,9 +1003,7 @@ static int irda_usb_net_close(struct net
 		}
 	}
 	/* Cancel Tx and speed URB - need to be synchronous to avoid races */
-	self->tx_urb->transfer_flags &= ~URB_ASYNC_UNLINK;
 	usb_kill_urb(self->tx_urb);
-	self->speed_urb->transfer_flags &= ~URB_ASYNC_UNLINK;
 	usb_kill_urb(self->speed_urb);
 
 	/* Stop and remove instance of IrLAP */
@@ -1521,9 +1514,7 @@ static void irda_usb_disconnect(struct u
 			usb_kill_urb(self->rx_urb[i]);
 		/* Cancel Tx and speed URB.
 		 * Toggle flags to make sure it's synchronous. */
-		self->tx_urb->transfer_flags &= ~URB_ASYNC_UNLINK;
 		usb_kill_urb(self->tx_urb);
-		self->speed_urb->transfer_flags &= ~URB_ASYNC_UNLINK;
 		usb_kill_urb(self->speed_urb);
 	}
 
diff -puN drivers/usb/atm/cxacru.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK drivers/usb/atm/cxacru.c
--- devel/drivers/usb/atm/cxacru.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK	2005-09-07 20:10:18.000000000 -0700
+++ devel-akpm/drivers/usb/atm/cxacru.c	2005-09-07 20:10:18.000000000 -0700
@@ -715,13 +715,11 @@ static int cxacru_bind(struct usbatm_dat
 			usb_dev, usb_rcvintpipe(usb_dev, CXACRU_EP_CMD),
 			instance->rcv_buf, PAGE_SIZE,
 			cxacru_blocking_completion, &instance->rcv_done, 1);
-	instance->rcv_urb->transfer_flags |= URB_ASYNC_UNLINK;
 
 	usb_fill_int_urb(instance->snd_urb,
 			usb_dev, usb_sndintpipe(usb_dev, CXACRU_EP_CMD),
 			instance->snd_buf, PAGE_SIZE,
 			cxacru_blocking_completion, &instance->snd_done, 4);
-	instance->snd_urb->transfer_flags |= URB_ASYNC_UNLINK;
 
 	init_MUTEX(&instance->cm_serialize);
 
diff -puN drivers/usb/core/message.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK drivers/usb/core/message.c
--- devel/drivers/usb/core/message.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK	2005-09-07 20:10:18.000000000 -0700
+++ devel-akpm/drivers/usb/core/message.c	2005-09-07 20:10:18.000000000 -0700
@@ -48,7 +48,6 @@ static int usb_start_wait_urb(struct urb
 
 	init_completion(&done); 	
 	urb->context = &done;
-	urb->transfer_flags |= URB_ASYNC_UNLINK;
 	urb->actual_length = 0;
 	status = usb_submit_urb(urb, GFP_NOIO);
 
@@ -357,8 +356,7 @@ int usb_sg_init (
 	if (!io->urbs)
 		goto nomem;
 
-	urb_flags = URB_ASYNC_UNLINK | URB_NO_TRANSFER_DMA_MAP
-			| URB_NO_INTERRUPT;
+	urb_flags = URB_NO_TRANSFER_DMA_MAP | URB_NO_INTERRUPT;
 	if (usb_pipein (pipe))
 		urb_flags |= URB_SHORT_NOT_OK;
 
diff -puN drivers/usb/core/urb.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK drivers/usb/core/urb.c
--- devel/drivers/usb/core/urb.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK	2005-09-07 20:10:18.000000000 -0700
+++ devel-akpm/drivers/usb/core/urb.c	2005-09-07 20:10:18.000000000 -0700
@@ -309,9 +309,8 @@ int usb_submit_urb(struct urb *urb, unsi
 	unsigned int	allowed;
 
 	/* enforce simple/standard policy */
-	allowed = URB_ASYNC_UNLINK;	// affects later unlinks
-	allowed |= (URB_NO_TRANSFER_DMA_MAP | URB_NO_SETUP_DMA_MAP);
-	allowed |= URB_NO_INTERRUPT;
+	allowed = (URB_NO_TRANSFER_DMA_MAP | URB_NO_SETUP_DMA_MAP |
+			URB_NO_INTERRUPT);
 	switch (temp) {
 	case PIPE_BULK:
 		if (is_out)
@@ -400,14 +399,8 @@ int usb_submit_urb(struct urb *urb, unsi
  * canceled (rather than any other code) and will quickly be removed
  * from host controller data structures.
  *
- * In the past, clearing the URB_ASYNC_UNLINK transfer flag for the
- * URB indicated that the request was synchronous.  This usage is now
- * deprecated; if the flag is clear the call will be forwarded to
- * usb_kill_urb() and the return value will be 0.  In the future, drivers
- * should call usb_kill_urb() directly for synchronous unlinking.
- *
- * When the URB_ASYNC_UNLINK transfer flag for the URB is set, this
- * request is asynchronous.  Success is indicated by returning -EINPROGRESS,
+ * This request is always asynchronous.
+ * Success is indicated by returning -EINPROGRESS,
  * at which time the URB will normally have been unlinked but not yet
  * given back to the device driver.  When it is called, the completion
  * function will see urb->status == -ECONNRESET.  Failure is indicated
@@ -453,17 +446,6 @@ int usb_unlink_urb(struct urb *urb)
 {
 	if (!urb)
 		return -EINVAL;
-	if (!(urb->transfer_flags & URB_ASYNC_UNLINK)) {
-#ifdef CONFIG_DEBUG_KERNEL
-		if (printk_ratelimit()) {
-			printk(KERN_NOTICE "usb_unlink_urb() is deprecated for "
-				"synchronous unlinks.  Use usb_kill_urb() instead.\n");
-			WARN_ON(1);
-		}
-#endif
-		usb_kill_urb(urb);
-		return 0;
-	}
 	if (!(urb->dev && urb->dev->bus && urb->dev->bus->op))
 		return -ENODEV;
 	return urb->dev->bus->op->unlink_urb(urb, -ECONNRESET);
diff -puN drivers/usb/input/hid-core.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK drivers/usb/input/hid-core.c
--- devel/drivers/usb/input/hid-core.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK	2005-09-07 20:10:18.000000000 -0700
+++ devel-akpm/drivers/usb/input/hid-core.c	2005-09-07 20:10:18.000000000 -0700
@@ -1722,7 +1722,7 @@ static struct hid_device *usb_hid_config
 			usb_fill_int_urb(hid->urbin, dev, pipe, hid->inbuf, insize,
 					 hid_irq_in, hid, interval);
 			hid->urbin->transfer_dma = hid->inbuf_dma;
-			hid->urbin->transfer_flags |=(URB_NO_TRANSFER_DMA_MAP | URB_ASYNC_UNLINK);
+			hid->urbin->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
 		} else {
 			if (hid->urbout)
 				continue;
@@ -1732,7 +1732,7 @@ static struct hid_device *usb_hid_config
 			usb_fill_int_urb(hid->urbout, dev, pipe, hid->outbuf, 0,
 					 hid_irq_out, hid, interval);
 			hid->urbout->transfer_dma = hid->outbuf_dma;
-			hid->urbout->transfer_flags |= (URB_NO_TRANSFER_DMA_MAP | URB_ASYNC_UNLINK);
+			hid->urbout->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
 		}
 	}
 
@@ -1784,7 +1784,7 @@ static struct hid_device *usb_hid_config
 			     hid->ctrlbuf, 1, hid_ctrl, hid);
 	hid->urbctrl->setup_dma = hid->cr_dma;
 	hid->urbctrl->transfer_dma = hid->ctrlbuf_dma;
-	hid->urbctrl->transfer_flags |= (URB_NO_TRANSFER_DMA_MAP | URB_NO_SETUP_DMA_MAP | URB_ASYNC_UNLINK);
+	hid->urbctrl->transfer_flags |= (URB_NO_TRANSFER_DMA_MAP | URB_NO_SETUP_DMA_MAP);
 
 	return hid;
 
diff -puN drivers/usb/misc/auerswald.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK drivers/usb/misc/auerswald.c
--- devel/drivers/usb/misc/auerswald.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK	2005-09-07 20:10:18.000000000 -0700
+++ devel-akpm/drivers/usb/misc/auerswald.c	2005-09-07 20:10:18.000000000 -0700
@@ -426,7 +426,7 @@ static int auerchain_submit_urb (pauerch
 
 /* cancel an urb which is submitted to the chain
    the result is 0 if the urb is cancelled, or -EINPROGRESS if
-   URB_ASYNC_UNLINK is set and the function is successfully started.
+   the function is successfully started.
 */
 static int auerchain_unlink_urb (pauerchain_t acp, struct urb * urb)
 {
@@ -515,7 +515,6 @@ static void auerchain_unlink_all (pauerc
         acep = acp->active;
         if (acep) {
                 urbp = acep->urbp;
-                urbp->transfer_flags &= ~URB_ASYNC_UNLINK;
                 dbg ("unlink active urb");
                 usb_kill_urb (urbp);
         }
diff -puN drivers/usb/misc/sisusbvga/sisusb.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK drivers/usb/misc/sisusbvga/sisusb.c
--- devel/drivers/usb/misc/sisusbvga/sisusb.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK	2005-09-07 20:10:18.000000000 -0700
+++ devel-akpm/drivers/usb/misc/sisusbvga/sisusb.c	2005-09-07 20:10:18.000000000 -0700
@@ -229,7 +229,7 @@ sisusb_bulkout_msg(struct sisusb_usb_dat
 	usb_fill_bulk_urb(urb, sisusb->sisusb_dev, pipe, data, len,
 		sisusb_bulk_completeout, &sisusb->urbout_context[index]);
 
-	urb->transfer_flags |= (tflags | URB_ASYNC_UNLINK);
+	urb->transfer_flags |= tflags;
 	urb->actual_length = 0;
 
 	if ((urb->transfer_dma = transfer_dma))
@@ -295,7 +295,7 @@ sisusb_bulkin_msg(struct sisusb_usb_data
 	usb_fill_bulk_urb(urb, sisusb->sisusb_dev, pipe, data, len,
 			sisusb_bulk_completein, sisusb);
 
-	urb->transfer_flags |= (tflags | URB_ASYNC_UNLINK);
+	urb->transfer_flags |= tflags;
 	urb->actual_length = 0;
 
 	if ((urb->transfer_dma = transfer_dma))
diff -puN drivers/usb/misc/usbtest.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK drivers/usb/misc/usbtest.c
--- devel/drivers/usb/misc/usbtest.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK	2005-09-07 20:10:18.000000000 -0700
+++ devel-akpm/drivers/usb/misc/usbtest.c	2005-09-07 20:10:18.000000000 -0700
@@ -986,7 +986,6 @@ test_ctrl_queue (struct usbtest_dev *dev
 
 		u->context = &context;
 		u->complete = ctrl_complete;
-		u->transfer_flags |= URB_ASYNC_UNLINK;
 	}
 
 	/* queue the urbs */
@@ -1052,7 +1051,6 @@ static int unlink1 (struct usbtest_dev *
 	urb = simple_alloc_urb (testdev_to_usbdev (dev), pipe, size);
 	if (!urb)
 		return -ENOMEM;
-	urb->transfer_flags |= URB_ASYNC_UNLINK;
 	urb->context = &completion;
 	urb->complete = unlink1_callback;
 
diff -puN drivers/usb/net/catc.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK drivers/usb/net/catc.c
--- devel/drivers/usb/net/catc.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK	2005-09-07 20:10:18.000000000 -0700
+++ devel-akpm/drivers/usb/net/catc.c	2005-09-07 20:10:18.000000000 -0700
@@ -383,7 +383,6 @@ static void catc_tx_done(struct urb *urb
 
 	if (urb->status == -ECONNRESET) {
 		dbg("Tx Reset.");
-		urb->transfer_flags &= ~URB_ASYNC_UNLINK;
 		urb->status = 0;
 		catc->netdev->trans_start = jiffies;
 		catc->stats.tx_errors++;
@@ -445,7 +444,6 @@ static void catc_tx_timeout(struct net_d
 	struct catc *catc = netdev_priv(netdev);
 
 	warn("Transmit timed out.");
-	catc->tx_urb->transfer_flags |= URB_ASYNC_UNLINK;
 	usb_unlink_urb(catc->tx_urb);
 }
 
diff -puN drivers/usb/net/kaweth.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK drivers/usb/net/kaweth.c
--- devel/drivers/usb/net/kaweth.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK	2005-09-07 20:10:18.000000000 -0700
+++ devel-akpm/drivers/usb/net/kaweth.c	2005-09-07 20:10:18.000000000 -0700
@@ -787,7 +787,6 @@ static int kaweth_start_xmit(struct sk_b
 		      kaweth_usb_transmit_complete,
 		      kaweth);
 	kaweth->end = 0;
-	kaweth->tx_urb->transfer_flags |= URB_ASYNC_UNLINK;
 
 	if((res = usb_submit_urb(kaweth->tx_urb, GFP_ATOMIC)))
 	{
diff -puN drivers/usb/net/pegasus.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK drivers/usb/net/pegasus.c
--- devel/drivers/usb/net/pegasus.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK	2005-09-07 20:10:18.000000000 -0700
+++ devel-akpm/drivers/usb/net/pegasus.c	2005-09-07 20:10:18.000000000 -0700
@@ -825,7 +825,6 @@ static void pegasus_tx_timeout(struct ne
 	pegasus_t *pegasus = netdev_priv(net);
 	if (netif_msg_timer(pegasus))
 		printk(KERN_WARNING "%s: tx timeout\n", net->name);
-	pegasus->tx_urb->transfer_flags |= URB_ASYNC_UNLINK;
 	usb_unlink_urb(pegasus->tx_urb);
 	pegasus->stats.tx_errors++;
 }
diff -puN drivers/usb/net/rtl8150.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK drivers/usb/net/rtl8150.c
--- devel/drivers/usb/net/rtl8150.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK	2005-09-07 20:10:18.000000000 -0700
+++ devel-akpm/drivers/usb/net/rtl8150.c	2005-09-07 20:10:18.000000000 -0700
@@ -653,7 +653,6 @@ static void rtl8150_tx_timeout(struct ne
 {
 	rtl8150_t *dev = netdev_priv(netdev);
 	warn("%s: Tx timeout.", netdev->name);
-	dev->tx_urb->transfer_flags |= URB_ASYNC_UNLINK;
 	usb_unlink_urb(dev->tx_urb);
 	dev->stats.tx_errors++;
 }
diff -puN drivers/usb/net/usbnet.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK drivers/usb/net/usbnet.c
--- devel/drivers/usb/net/usbnet.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK	2005-09-07 20:10:18.000000000 -0700
+++ devel-akpm/drivers/usb/net/usbnet.c	2005-09-07 20:10:18.000000000 -0700
@@ -2987,7 +2987,6 @@ static void rx_submit (struct usbnet *de
 
 	usb_fill_bulk_urb (urb, dev->udev, dev->in,
 		skb->data, size, rx_complete, skb);
-	urb->transfer_flags |= URB_ASYNC_UNLINK;
 
 	spin_lock_irqsave (&dev->rxq.lock, lockflags);
 
@@ -3561,7 +3560,6 @@ static int usbnet_start_xmit (struct sk_
 
 	usb_fill_bulk_urb (urb, dev->udev, dev->out,
 			skb->data, skb->len, tx_complete, skb);
-	urb->transfer_flags |= URB_ASYNC_UNLINK;
 
 	/* don't assume the hardware handles USB_ZERO_PACKET
 	 * NOTE:  strictly conforming cdc-ether devices should expect
diff -puN drivers/usb/net/zd1201.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK drivers/usb/net/zd1201.c
--- devel/drivers/usb/net/zd1201.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK	2005-09-07 20:10:18.000000000 -0700
+++ devel-akpm/drivers/usb/net/zd1201.c	2005-09-07 20:10:18.000000000 -0700
@@ -847,7 +847,6 @@ static void zd1201_tx_timeout(struct net
 		return;
 	dev_warn(&zd->usb->dev, "%s: TX timeout, shooting down urb\n",
 	    dev->name);
-	zd->tx_urb->transfer_flags |= URB_ASYNC_UNLINK;
 	usb_unlink_urb(zd->tx_urb);
 	zd->stats.tx_errors++;
 	/* Restart the timeout to quiet the watchdog: */
diff -puN drivers/usb/storage/transport.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK drivers/usb/storage/transport.c
--- devel/drivers/usb/storage/transport.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK	2005-09-07 20:10:18.000000000 -0700
+++ devel-akpm/drivers/usb/storage/transport.c	2005-09-07 20:10:18.000000000 -0700
@@ -96,8 +96,8 @@
  * or before the URB_ACTIVE bit was set.  If so, it's essential to cancel
  * the URB if it hasn't been cancelled already (i.e., if the URB_ACTIVE bit
  * is still set).  Either way, the function must then wait for the URB to
- * finish.  Note that because the URB_ASYNC_UNLINK flag is set, the URB can
- * still be in progress even after a call to usb_unlink_urb() returns.
+ * finish.  Note that the URB can still be in progress even after a call to
+ * usb_unlink_urb() returns.
  *
  * The idea is that (1) once the ABORTING or DISCONNECTING bit is set,
  * either the stop_transport() function or the submitting function
@@ -158,8 +158,7 @@ static int usb_stor_msg_common(struct us
 	 * hasn't been mapped for DMA.  Yes, this is clunky, but it's
 	 * easier than always having the caller tell us whether the
 	 * transfer buffer has already been mapped. */
-	us->current_urb->transfer_flags =
-			URB_ASYNC_UNLINK | URB_NO_SETUP_DMA_MAP;
+	us->current_urb->transfer_flags = URB_NO_SETUP_DMA_MAP;
 	if (us->current_urb->transfer_buffer == us->iobuf)
 		us->current_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
 	us->current_urb->transfer_dma = us->iobuf_dma;
diff -puN include/linux/usb.h~gregkh-usb-usb-remove-URB_ASYNC_UNLINK include/linux/usb.h
--- devel/include/linux/usb.h~gregkh-usb-usb-remove-URB_ASYNC_UNLINK	2005-09-07 20:10:18.000000000 -0700
+++ devel-akpm/include/linux/usb.h	2005-09-07 20:10:18.000000000 -0700
@@ -616,7 +616,6 @@ extern int usb_disabled(void);
 #define URB_ISO_ASAP		0x0002	/* iso-only, urb->start_frame ignored */
 #define URB_NO_TRANSFER_DMA_MAP	0x0004	/* urb->transfer_dma valid on submit */
 #define URB_NO_SETUP_DMA_MAP	0x0008	/* urb->setup_dma valid on submit */
-#define URB_ASYNC_UNLINK	0x0010	/* usb_unlink_urb() returns asap */
 #define URB_NO_FSBR		0x0020	/* UHCI-specific */
 #define URB_ZERO_PACKET		0x0040	/* Finish bulk OUTs with short packet */
 #define URB_NO_INTERRUPT	0x0080	/* HINT: no non-error interrupt needed */
@@ -724,13 +723,7 @@ typedef void (*usb_complete_t)(struct ur
  * Initialization:
  *
  * All URBs submitted must initialize the dev, pipe, transfer_flags (may be
- * zero), and complete fields.
- * The URB_ASYNC_UNLINK transfer flag affects later invocations of
- * the usb_unlink_urb() routine.  Note: Failure to set URB_ASYNC_UNLINK
- * with usb_unlink_urb() is deprecated.  For synchronous unlinks use
- * usb_kill_urb() instead.
- *
- * All URBs must also initialize 
+ * zero), and complete fields.  All URBs must also initialize
  * transfer_buffer and transfer_buffer_length.  They may provide the
  * URB_SHORT_NOT_OK transfer flag, indicating that short reads are
  * to be treated as errors; that flag is invalid for write requests.
diff -puN sound/usb/usbaudio.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK sound/usb/usbaudio.c
--- devel/sound/usb/usbaudio.c~gregkh-usb-usb-remove-URB_ASYNC_UNLINK	2005-09-07 20:10:18.000000000 -0700
+++ devel-akpm/sound/usb/usbaudio.c	2005-09-07 20:10:18.000000000 -0700
@@ -735,10 +735,9 @@ static int deactivate_urbs(snd_usb_subst
 		if (test_bit(i, &subs->active_mask)) {
 			if (! test_and_set_bit(i, &subs->unlink_mask)) {
 				struct urb *u = subs->dataurb[i].urb;
-				if (async) {
-					u->transfer_flags |= URB_ASYNC_UNLINK;
+				if (async)
 					usb_unlink_urb(u);
-				} else
+				else
 					usb_kill_urb(u);
 			}
 		}
@@ -748,10 +747,9 @@ static int deactivate_urbs(snd_usb_subst
 			if (test_bit(i+16, &subs->active_mask)) {
  				if (! test_and_set_bit(i+16, &subs->unlink_mask)) {
 					struct urb *u = subs->syncurb[i].urb;
-					if (async) {
-						u->transfer_flags |= URB_ASYNC_UNLINK;
+					if (async)
 						usb_unlink_urb(u);
-					} else
+					else
 						usb_kill_urb(u);
 				}
 			}
_