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
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
drivers
/
xen
/
blkback
/
xenbus.c
diff --git
a/drivers/xen/blkback/xenbus.c
b/drivers/xen/blkback/xenbus.c
index
59d9324
..
419d00e
100644
(file)
--- a/
drivers/xen/blkback/xenbus.c
+++ b/
drivers/xen/blkback/xenbus.c
@@
-194,7
+194,7
@@
static int blkback_probe(struct xenbus_device *dev,
}
/* setup back pointer */
}
/* setup back pointer */
- be->blkif->be = be;
+ be->blkif->be = be;
err = xenbus_watch_path2(dev, dev->nodename, "physical-device",
&be->backend_watch, backend_changed);
err = xenbus_watch_path2(dev, dev->nodename, "physical-device",
&be->backend_watch, backend_changed);
@@
-287,7
+287,7
@@
static void backend_changed(struct xenbus_watch *watch,
}
/* We're potentially connected now */
}
/* We're potentially connected now */
- update_blkif_status(be->blkif);
+ update_blkif_status(be->blkif);
}
}
}
}
@@
-301,10
+301,15
@@
static void frontend_changed(struct xenbus_device *dev,
struct backend_info *be = dev->dev.driver_data;
int err;
struct backend_info *be = dev->dev.driver_data;
int err;
- DPRINTK("
"
);
+ DPRINTK("
%s", xenbus_strstate(frontend_state)
);
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:
@@
-327,11
+332,14
@@
static void frontend_changed(struct xenbus_device *dev,
break;
case XenbusStateClosed:
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);
@@
-364,7
+372,7
@@
again:
return;
}
return;
}
- err = xenbus_printf(xbt, dev->nodename, "sectors", "%lu",
+ err = xenbus_printf(xbt, dev->nodename, "sectors", "%l
l
u",
vbd_size(&be->blkif->vbd));
if (err) {
xenbus_dev_fatal(dev, err, "writing %s/sectors",
vbd_size(&be->blkif->vbd));
if (err) {
xenbus_dev_fatal(dev, err, "writing %s/sectors",