spin_lock_irq(&backdev_io_lock);
/* No more blkif_request(). */
blk_stop_queue(info->gd->queue);
+ uinfo->backdev = NULL;
spin_unlock_irq(&backdev_io_lock);
del_gendisk(info->gd);
blkif_put(uinfo->blkif);
- uinfo->backdev = NULL;
kfree(info);
clear_bit(4, &uinfo->dev_inuse);
{
struct backdev_info *info;
+ spin_lock_irq(&backdev_io_lock);
+
info = uinfo->backdev;
if (info == NULL || info->gd == NULL || info->gd->queue == NULL)
- return;
+ goto out;
if (!RING_FULL(&uinfo->ufe_ring)) {
- spin_lock_irq(&backdev_io_lock);
/* Re-enable calldowns. */
if (blk_queue_stopped(info->gd->queue))
blk_start_queue(info->gd->queue);
/* Kick things off immediately. */
process_backdev_request(uinfo, info);
- spin_unlock_irq(&backdev_io_lock);
}
+
+out:
+ spin_unlock_irq(&backdev_io_lock);
return;
}