|
@@ -1131,12 +1131,6 @@ void nbd_export_close(NBDExport *exp)
|
|
}
|
|
}
|
|
nbd_export_set_name(exp, NULL);
|
|
nbd_export_set_name(exp, NULL);
|
|
nbd_export_put(exp);
|
|
nbd_export_put(exp);
|
|
- if (exp->blk) {
|
|
|
|
- blk_remove_aio_context_notifier(exp->blk, blk_aio_attached,
|
|
|
|
- blk_aio_detach, exp);
|
|
|
|
- blk_unref(exp->blk);
|
|
|
|
- exp->blk = NULL;
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
void nbd_export_get(NBDExport *exp)
|
|
void nbd_export_get(NBDExport *exp)
|
|
@@ -1159,6 +1153,13 @@ void nbd_export_put(NBDExport *exp)
|
|
exp->close(exp);
|
|
exp->close(exp);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (exp->blk) {
|
|
|
|
+ blk_remove_aio_context_notifier(exp->blk, blk_aio_attached,
|
|
|
|
+ blk_aio_detach, exp);
|
|
|
|
+ blk_unref(exp->blk);
|
|
|
|
+ exp->blk = NULL;
|
|
|
|
+ }
|
|
|
|
+
|
|
g_free(exp);
|
|
g_free(exp);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -1305,6 +1306,14 @@ static void nbd_trip(void *opaque)
|
|
goto invalid_request;
|
|
goto invalid_request;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (client->closing) {
|
|
|
|
+ /*
|
|
|
|
+ * The client may be closed when we are blocked in
|
|
|
|
+ * nbd_co_receive_request()
|
|
|
|
+ */
|
|
|
|
+ goto done;
|
|
|
|
+ }
|
|
|
|
+
|
|
switch (command) {
|
|
switch (command) {
|
|
case NBD_CMD_READ:
|
|
case NBD_CMD_READ:
|
|
TRACE("Request type is READ");
|
|
TRACE("Request type is READ");
|