git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge to Fedora kernel-2.6.18-1.2224_FC5 patched with stable patch-2.6.18.1-vs2.0...
[linux-2.6.git]
/
drivers
/
xen
/
blktap
/
xenbus.c
diff --git
a/drivers/xen/blktap/xenbus.c
b/drivers/xen/blktap/xenbus.c
index
b1ad47b
..
b08e1dc
100644
(file)
--- a/
drivers/xen/blktap/xenbus.c
+++ b/
drivers/xen/blktap/xenbus.c
@@
-174,7
+174,7
@@
static int blktap_probe(struct xenbus_device *dev,
}
/* setup back pointer */
}
/* setup back pointer */
- be->blkif->be = be;
+ be->blkif->be = be;
be->blkif->sectors = 0;
/* set a watch on disk info, waiting for userspace to update details*/
be->blkif->sectors = 0;
/* set a watch on disk info, waiting for userspace to update details*/
@@
-247,6
+247,11
@@
static void tap_frontend_changed(struct xenbus_device *dev,
switch (frontend_state) {
case XenbusStateInitialising:
switch (frontend_state) {
case XenbusStateInitialising:
+ if (dev->state == XenbusStateClosed) {
+ printk("%s: %s: prepare for reconnect\n",
+ __FUNCTION__, dev->nodename);
+ xenbus_switch_state(dev, XenbusStateInitWait);
+ }
break;
case XenbusStateInitialised:
break;
case XenbusStateInitialised:
@@
-264,15
+269,22
@@
static void tap_frontend_changed(struct xenbus_device *dev,
break;
case XenbusStateClosing:
break;
case XenbusStateClosing:
+ if (be->blkif->xenblkd) {
+ kthread_stop(be->blkif->xenblkd);
+ be->blkif->xenblkd = NULL;
+ }
xenbus_switch_state(dev, XenbusStateClosing);
break;
case XenbusStateClosed:
xenbus_switch_state(dev, XenbusStateClosing);
break;
case XenbusStateClosed:
+ xenbus_switch_state(dev, XenbusStateClosed);
+ if (xenbus_dev_is_online(dev))
+ break;
+ /* fall through if not online */
+ case XenbusStateUnknown:
device_unregister(&dev->dev);
break;
device_unregister(&dev->dev);
break;
- case XenbusStateUnknown:
- case XenbusStateInitWait:
default:
xenbus_dev_fatal(dev, -EINVAL, "saw state %d at frontend",
frontend_state);
default:
xenbus_dev_fatal(dev, -EINVAL, "saw state %d at frontend",
frontend_state);