mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
xen blkfront: Delay wait for block devices until after the disk is added
When the xen block frontend driver is built as a module the module load is only synchronous up to the point where the frontend and the backend become connected rather than when the disk is added. This means that there can be a race on boot between loading the module and loading the dm-* modules and doing the scan for LVM physical volumes (all in the initrd). In the failure case the disk is not present until after the scan for physical volumes is complete. Taken from: http://xenbits.xensource.com/linux-2.6.18-xen.hg?rev/11483a00c017 Signed-off-by: Christian Limpach <[email protected]> Signed-off-by: Mark McLoughlin <[email protected]> Signed-off-by: Jeremy Fitzhardinge <[email protected]> Signed-off-by: Ingo Molnar <[email protected]> Signed-off-by: Thomas Gleixner <[email protected]>
This commit is contained in:
parent
53f0e8afcb
commit
1d78d70556
3 changed files with 16 additions and 1 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue