nbd: Remove NBDExport.close callback
The export close callback is unused by the built-in NBD server. qemu-nbd uses it only during shutdown to wait for the unrefed export to actually go away. It can just use nbd_export_close_all() instead and do without the callback. This removes the close callback from nbd_export_new() and makes both callers of it more similar. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-Id: <20200924152717.287415-11-kwolf@redhat.com> Acked-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
fefee85da0
commit
d794f7f372
@ -222,7 +222,7 @@ BlockExport *nbd_export_create(BlockExportOptions *exp_args, Error **errp)
|
|||||||
|
|
||||||
exp = nbd_export_new(bs, arg->name, arg->description, arg->bitmap,
|
exp = nbd_export_new(bs, arg->name, arg->description, arg->bitmap,
|
||||||
!arg->writable, !arg->writable,
|
!arg->writable, !arg->writable,
|
||||||
NULL, exp_args->writethrough, errp);
|
exp_args->writethrough, errp);
|
||||||
if (!exp) {
|
if (!exp) {
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -334,8 +334,7 @@ BlockExport *nbd_export_create(BlockExportOptions *exp_args, Error **errp);
|
|||||||
NBDExport *nbd_export_new(BlockDriverState *bs,
|
NBDExport *nbd_export_new(BlockDriverState *bs,
|
||||||
const char *name, const char *desc,
|
const char *name, const char *desc,
|
||||||
const char *bitmap, bool readonly, bool shared,
|
const char *bitmap, bool readonly, bool shared,
|
||||||
void (*close)(NBDExport *), bool writethrough,
|
bool writethrough, Error **errp);
|
||||||
Error **errp);
|
|
||||||
void nbd_export_set_on_eject_blk(BlockExport *exp, BlockBackend *blk);
|
void nbd_export_set_on_eject_blk(BlockExport *exp, BlockBackend *blk);
|
||||||
void nbd_export_close(NBDExport *exp);
|
void nbd_export_close(NBDExport *exp);
|
||||||
void nbd_export_remove(NBDExport *exp, NbdServerRemoveMode mode, Error **errp);
|
void nbd_export_remove(NBDExport *exp, NbdServerRemoveMode mode, Error **errp);
|
||||||
|
@ -84,7 +84,6 @@ struct NBDRequestData {
|
|||||||
struct NBDExport {
|
struct NBDExport {
|
||||||
BlockExport common;
|
BlockExport common;
|
||||||
int refcount;
|
int refcount;
|
||||||
void (*close)(NBDExport *exp);
|
|
||||||
|
|
||||||
BlockBackend *blk;
|
BlockBackend *blk;
|
||||||
char *name;
|
char *name;
|
||||||
@ -1521,8 +1520,7 @@ void nbd_export_set_on_eject_blk(BlockExport *exp, BlockBackend *blk)
|
|||||||
NBDExport *nbd_export_new(BlockDriverState *bs,
|
NBDExport *nbd_export_new(BlockDriverState *bs,
|
||||||
const char *name, const char *desc,
|
const char *name, const char *desc,
|
||||||
const char *bitmap, bool readonly, bool shared,
|
const char *bitmap, bool readonly, bool shared,
|
||||||
void (*close)(NBDExport *), bool writethrough,
|
bool writethrough, Error **errp)
|
||||||
Error **errp)
|
|
||||||
{
|
{
|
||||||
AioContext *ctx;
|
AioContext *ctx;
|
||||||
BlockBackend *blk;
|
BlockBackend *blk;
|
||||||
@ -1625,7 +1623,6 @@ NBDExport *nbd_export_new(BlockDriverState *bs,
|
|||||||
assert(strlen(exp->export_bitmap_context) < NBD_MAX_STRING_SIZE);
|
assert(strlen(exp->export_bitmap_context) < NBD_MAX_STRING_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
exp->close = close;
|
|
||||||
exp->ctx = ctx;
|
exp->ctx = ctx;
|
||||||
blk_add_aio_context_notifier(blk, blk_aio_attached, blk_aio_detach, exp);
|
blk_add_aio_context_notifier(blk, blk_aio_attached, blk_aio_detach, exp);
|
||||||
|
|
||||||
@ -1723,10 +1720,6 @@ void nbd_export_put(NBDExport *exp)
|
|||||||
assert(exp->name == NULL);
|
assert(exp->name == NULL);
|
||||||
assert(exp->description == NULL);
|
assert(exp->description == NULL);
|
||||||
|
|
||||||
if (exp->close) {
|
|
||||||
exp->close(exp);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exp->blk) {
|
if (exp->blk) {
|
||||||
if (exp->eject_notifier_blk) {
|
if (exp->eject_notifier_blk) {
|
||||||
notifier_remove(&exp->eject_notifier);
|
notifier_remove(&exp->eject_notifier);
|
||||||
|
14
qemu-nbd.c
14
qemu-nbd.c
@ -70,7 +70,7 @@ static int verbose;
|
|||||||
static char *srcpath;
|
static char *srcpath;
|
||||||
static SocketAddress *saddr;
|
static SocketAddress *saddr;
|
||||||
static int persistent = 0;
|
static int persistent = 0;
|
||||||
static enum { RUNNING, TERMINATE, TERMINATING, TERMINATED } state;
|
static enum { RUNNING, TERMINATE, TERMINATED } state;
|
||||||
static int shared = 1;
|
static int shared = 1;
|
||||||
static int nb_fds;
|
static int nb_fds;
|
||||||
static QIONetListener *server;
|
static QIONetListener *server;
|
||||||
@ -332,12 +332,6 @@ static int nbd_can_accept(void)
|
|||||||
return state == RUNNING && nb_fds < shared;
|
return state == RUNNING && nb_fds < shared;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void nbd_export_closed(NBDExport *export)
|
|
||||||
{
|
|
||||||
assert(state == TERMINATING);
|
|
||||||
state = TERMINATED;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void nbd_update_server_watch(void);
|
static void nbd_update_server_watch(void);
|
||||||
|
|
||||||
static void nbd_client_closed(NBDClient *client, bool negotiated)
|
static void nbd_client_closed(NBDClient *client, bool negotiated)
|
||||||
@ -1067,7 +1061,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
export = nbd_export_new(bs, export_name,
|
export = nbd_export_new(bs, export_name,
|
||||||
export_description, bitmap, readonly, shared > 1,
|
export_description, bitmap, readonly, shared > 1,
|
||||||
nbd_export_closed, writethrough, &error_fatal);
|
writethrough, &error_fatal);
|
||||||
|
|
||||||
if (device) {
|
if (device) {
|
||||||
#if HAVE_NBD_DEVICE
|
#if HAVE_NBD_DEVICE
|
||||||
@ -1107,10 +1101,10 @@ int main(int argc, char **argv)
|
|||||||
do {
|
do {
|
||||||
main_loop_wait(false);
|
main_loop_wait(false);
|
||||||
if (state == TERMINATE) {
|
if (state == TERMINATE) {
|
||||||
state = TERMINATING;
|
|
||||||
nbd_export_close(export);
|
|
||||||
nbd_export_put(export);
|
nbd_export_put(export);
|
||||||
|
nbd_export_close_all();
|
||||||
export = NULL;
|
export = NULL;
|
||||||
|
state = TERMINATED;
|
||||||
}
|
}
|
||||||
} while (state != TERMINATED);
|
} while (state != TERMINATED);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user