|
@@ -88,6 +88,7 @@ struct blkfront_info
|
|
|
struct blk_shadow shadow[BLK_RING_SIZE];
|
|
|
unsigned long shadow_free;
|
|
|
int feature_barrier;
|
|
|
+ int is_ready;
|
|
|
|
|
|
/**
|
|
|
* The number of people holding this device open. We won't allow a
|
|
@@ -839,6 +840,8 @@ static void blkfront_connect(struct blkfront_info *info)
|
|
|
spin_unlock_irq(&blkif_io_lock);
|
|
|
|
|
|
add_disk(info->gd);
|
|
|
+
|
|
|
+ info->is_ready = 1;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -931,6 +934,13 @@ static int blkfront_remove(struct xenbus_device *dev)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int blkfront_is_ready(struct xenbus_device *dev)
|
|
|
+{
|
|
|
+ struct blkfront_info *info = dev->dev.driver_data;
|
|
|
+
|
|
|
+ return info->is_ready;
|
|
|
+}
|
|
|
+
|
|
|
static int blkif_open(struct inode *inode, struct file *filep)
|
|
|
{
|
|
|
struct blkfront_info *info = inode->i_bdev->bd_disk->private_data;
|
|
@@ -977,6 +987,7 @@ static struct xenbus_driver blkfront = {
|
|
|
.remove = blkfront_remove,
|
|
|
.resume = blkfront_resume,
|
|
|
.otherend_changed = backend_changed,
|
|
|
+ .is_ready = blkfront_is_ready,
|
|
|
};
|
|
|
|
|
|
static int __init xlblk_init(void)
|