At 2015/6/18 20:55, Stefan Hajnoczi Wrote:
On Thu, Jun 18, 2015 at 04:49:12PM +0800, Wen Congyang wrote:
+void bdrv_connect(BlockDriverState *bs, Error **errp)
+{
+ BlockDriver *drv = bs->drv;
+
+ if (drv && drv->bdrv_connect) {
+ drv->bdrv_connect(bs, errp);
+ } else if (bs->file) {
+ bdrv_connect(bs->file, errp);
+ } else {
+ error_setg(errp, "this feature or command is not currently supported");
+ }
+}
+
+void bdrv_disconnect(BlockDriverState *bs)
+{
+ BlockDriver *drv = bs->drv;
+
+ if (drv && drv->bdrv_disconnect) {
+ drv->bdrv_disconnect(bs);
+ } else if (bs->file) {
+ bdrv_disconnect(bs->file);
+ }
+}
Please add doc comments describing the semantics of these commands.
Where should it be documented? In the header file?
Why are these operations needed when there is already a bs->drv == NULL
case which means the BDS is not ready for read/write?
The purpos is that: don't connect to nbd server when opening a nbd
client. connect/disconnect
to nbd server when we need to do it.
IIUC, if bs->drv is NULL, it means that the driver is ejected? Here,
connect/disconnect
means that connect/disconnect to remote target(The target may be in
another host).
Thanks
Wen Congyang