static int storvsc_dev_remove(struct hv_device *device)
 {
        struct storvsc_device *stor_device;
-       unsigned long flags;
 
        stor_device = hv_get_drvdata(device);
 
-       spin_lock_irqsave(&device->channel->inbound_lock, flags);
        stor_device->destroy = true;
-       spin_unlock_irqrestore(&device->channel->inbound_lock, flags);
+
+       /* Make sure flag is set before waiting */
+       wmb();
 
        /*
         * At this point, all outbound traffic should be disable. We
         * we have drained - to drain the outgoing packets, we need to
         * allow incoming packets.
         */
-       spin_lock_irqsave(&device->channel->inbound_lock, flags);
        hv_set_drvdata(device, NULL);
-       spin_unlock_irqrestore(&device->channel->inbound_lock, flags);
 
        /* Close the channel */
        vmbus_close(device->channel);
 
        u32 ringbuffer_pagecount;
        struct hv_ring_buffer_info outbound;    /* send to parent */
        struct hv_ring_buffer_info inbound;     /* receive from parent */
-       spinlock_t inbound_lock;
 
        struct vmbus_close_msg close_msg;