Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 309672 Details for
Bug 447315
parted error: Can't open /dev/xvda while probing disks during installation
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
Fix for anaconda/kudzu failure
pvhvm-anaconda-block-detach.patch (text/plain), 4.57 KB, created by
Don Dutile (Red Hat)
on 2008-06-17 20:37:55 UTC
(
hide
)
Description:
Fix for anaconda/kudzu failure
Filename:
MIME Type:
Creator:
Don Dutile (Red Hat)
Created:
2008-06-17 20:37:55 UTC
Size:
4.57 KB
patch
obsolete
>--- linux-2.6.9/drivers/xen/xenbus/xenbus_probe.c.orig 2008-06-05 15:18:16.000000000 -0400 >+++ linux-2.6.9/drivers/xen/xenbus/xenbus_probe.c 2008-06-17 14:38:15.000000000 -0400 >@@ -67,6 +67,14 @@ static unsigned long xen_store_mfn; > > extern struct semaphore xenwatch_mutex; > >+/* struct & lock to remove unconnected vbd's at boostrap */ >+struct xendev_rem { >+ struct list_head list; >+ struct xenbus_device* xendev; >+}; >+struct xendev_rem xendev_rem_hd; >+static spinlock_t xendev_rem_lock = SPIN_LOCK_UNLOCKED; >+ > static struct notifier_block *xenstore_chain; > > static void wait_for_devices(struct xenbus_driver *xendrv); >@@ -79,7 +87,9 @@ static int xenbus_probe_backend(const ch > #endif > static int xenbus_dev_probe(struct device *_dev); > static int xenbus_dev_remove(struct device *_dev); >-// static void xenbus_dev_shutdown(struct device *_dev); >+#ifdef CONFIG_XEN_PV_ON_HVM >+static void xenbus_dev_shutdown(struct device *_dev); >+#endif > > /* If something in array of ids matches this device, return it. */ > static const struct xenbus_device_id * >@@ -433,7 +443,7 @@ static int xenbus_dev_remove(struct devi > return 0; > } > >-#if 0 >+#ifdef CONFIG_XEN_PV_ON_HVM > static void xenbus_dev_shutdown(struct device *_dev) > { > struct xenbus_device *dev = to_xenbus_device(_dev); >@@ -454,7 +464,7 @@ static void xenbus_dev_shutdown(struct d > out: > put_device(&dev->dev); > } >-#endif >+#endif /* XEN_PV_ON_HVM */ > > static int xenbus_register_driver_common(struct xenbus_driver *drv, > struct xen_bus_type *bus) >@@ -465,7 +475,9 @@ static int xenbus_register_driver_common > drv->driver.bus = &bus->bus; > drv->driver.probe = xenbus_dev_probe; > drv->driver.remove = xenbus_dev_remove; >- >+#ifdef CONFIG_XEN_PV_ON_HVM >+ drv->driver.shutdown = xenbus_dev_shutdown; >+#endif > down(&xenwatch_mutex); > ret = driver_register(&drv->driver); > up(&xenwatch_mutex); >@@ -1265,6 +1277,40 @@ static int exists_disconnected_device(st > is_disconnected_device); > } > >+static void xendev_rem_add(struct xenbus_device *dev) >+{ >+ struct xendev_rem *new; >+ struct xendev_rem *ptr; >+ >+ /* only add vbd devices */ >+ if (strncmp(dev->dev.bus_id, "vbd", 3)) >+ return; >+ >+ new = kmalloc(sizeof(*new), GFP_KERNEL); >+ if (new == 0L) { >+ printk(KERN_INFO "XENBUS: failed xendev_rem struct alloc\n"); >+ printk(KERN_INFO "- couldn't removed %s from avail dev list\n", >+ dev->nodename); >+ return; >+ } >+ new->xendev = dev; >+ >+ spin_lock(&xendev_rem_lock); >+ /* make sure xendev not already on the list */ >+ list_for_each_entry(ptr, &xendev_rem_hd.list, list) { >+ struct xenbus_device *xendev = ptr->xendev; >+ if (xendev == dev) { >+ /* ok to have dev added via multiple code paths */ >+ spin_unlock(&xendev_rem_lock); >+ kfree(new); >+ return; >+ } >+ } >+ list_add_tail(&new->list, &xendev_rem_hd.list); >+ spin_unlock(&xendev_rem_lock); >+ >+ return; >+} > static int print_device_status(struct device *dev, void *data) > { > struct xenbus_device *xendev = to_xenbus_device(dev); >@@ -1278,15 +1324,42 @@ static int print_device_status(struct de > /* Information only: is this too noisy? */ > printk(KERN_INFO "XENBUS: Device with no driver: %s\n", > xendev->nodename); >+ xendev_rem_add(xendev); > } else if (xendev->state != XenbusStateConnected) { > printk(KERN_WARNING "XENBUS: Timeout connecting " > "to device: %s (state %d)\n", > xendev->nodename, xendev->state); >+ xendev_rem_add(xendev); > } > > return 0; > } > >+/* >+ * Remove unused xvd's (vbd devices) at bootstrap so anaconda >+ * doesn't have a nutty seeing xvd's that are not connected >+ */ >+static void >+xvd_dev_shutdown(void) >+{ >+ struct xendev_rem *ptr; >+ struct xendev_rem *tmp; >+ >+ spin_lock(&xendev_rem_lock); >+ list_for_each_entry_safe(ptr, tmp, &xendev_rem_hd.list, list) { >+ struct device *dev = &ptr->xendev->dev; >+ device_remove_file(dev, &dev_attr_devtype); >+ device_remove_file(dev, &dev_attr_nodename); >+ device_unregister(dev); >+ put_device(dev); >+ /* remove list entry once processed */ >+ list_del(&ptr->list); >+ /* free memory of this list entry */ >+ kfree(ptr); >+ } >+ spin_unlock(&xendev_rem_lock); >+} >+ > /* We only wait for device setup after most initcalls have run. */ > static int ready_to_wait_for_devices; > >@@ -1321,12 +1394,16 @@ static void wait_for_devices(struct xenb > > bus_for_each_dev(&xenbus_frontend.bus, NULL, drv, > print_device_status); >+ >+ /* now see about removing unused xvd's */ >+ xvd_dev_shutdown(); > } > > #ifndef MODULE > static int __init boot_wait_for_devices(void) > { >- if (!xenbus_frontend.error) { >+ INIT_LIST_HEAD(&xendev_rem_hd.list); >+ if (!xenbus_frontend.error) { > ready_to_wait_for_devices = 1; > wait_for_devices(NULL); > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 447315
:
305943
|
306086
|
306137
| 309672