Revert to Fedora kernel-2.6.17-1.2187_FC5 patched with vs2.0.2.1; there are too many...
[linux-2.6.git] / drivers / xen / blkfront / blkfront.c
index 2b16200..a911c76 100644 (file)
@@ -46,7 +46,6 @@
 #include <xen/interface/grant_table.h>
 #include <xen/gnttab.h>
 #include <asm/hypervisor.h>
-#include <asm/maddr.h>
 
 #define BLKIF_STATE_DISCONNECTED 0
 #define BLKIF_STATE_CONNECTED    1
@@ -256,10 +255,10 @@ static void backend_changed(struct xenbus_device *dev,
        DPRINTK("blkfront:backend_changed.\n");
 
        switch (backend_state) {
+       case XenbusStateUnknown:
        case XenbusStateInitialising:
        case XenbusStateInitWait:
        case XenbusStateInitialised:
-       case XenbusStateUnknown:
        case XenbusStateClosed:
                break;
 
@@ -355,14 +354,12 @@ static void blkfront_closing(struct xenbus_device *dev)
        blk_stop_queue(info->rq);
        /* No more gnttab callback work. */
        gnttab_cancel_free_callback(&info->callback);
-       spin_unlock_irqrestore(&blkif_io_lock, flags);
-
-       /* Flush gnttab callback work. Must be done with no locks held. */
        flush_scheduled_work();
+       spin_unlock_irqrestore(&blkif_io_lock, flags);
 
        xlvbd_del(info);
 
-       xenbus_frontend_closed(dev);
+       xenbus_switch_state(dev, XenbusStateClosed);
 }
 
 
@@ -716,10 +713,8 @@ static void blkif_free(struct blkfront_info *info, int suspend)
                blk_stop_queue(info->rq);
        /* No more gnttab callback work. */
        gnttab_cancel_free_callback(&info->callback);
-       spin_unlock_irq(&blkif_io_lock);
-
-       /* Flush gnttab callback work. Must be done with no locks held. */
        flush_scheduled_work();
+       spin_unlock_irq(&blkif_io_lock);
 
        /* Free resources associated with old device channel. */
        if (info->ring_ref != GRANT_INVALID_REF) {