{
        unsigned long flags;
        spin_lock_irqsave(&q->lock, flags);
-       /* _urb_unlink needs to know which spinlock to use, thus mb(). */
-       _urb->queue = q; mb(); list_add(&_urb->list, &q->head);
+       /* _urb_unlink needs to know which spinlock to use, thus smp_mb(). */
+       _urb->queue = q; smp_mb(); list_add(&_urb->list, &q->head);
        spin_unlock_irqrestore(&q->lock, flags);
 }
 
 {
        unsigned long flags;
        spin_lock_irqsave(&q->lock, flags);
-       /* _urb_unlink needs to know which spinlock to use, thus mb(). */
-       _urb->queue = q; mb(); list_add_tail(&_urb->list, &q->head);
+       /* _urb_unlink needs to know which spinlock to use, thus smp_mb(). */
+       _urb->queue = q; smp_mb(); list_add_tail(&_urb->list, &q->head);
        spin_unlock_irqrestore(&q->lock, flags);
 }
 
        struct _urb_queue *q;
        unsigned long flags;
 
-       mb();
+       smp_mb();
        q = _urb->queue;
        /* If q is NULL, it will die at easy-to-debug NULL pointer dereference.
           No need to BUG(). */