aboutsummaryrefslogtreecommitdiff
path: root/qemu-nbd.c
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2019-01-11 13:47:16 -0600
committerEric Blake <eblake@redhat.com>2019-01-14 10:09:46 -0600
commit3fa4c76590569f9dc128beb3eee65aaefcb6321e (patch)
tree774c11eaf4ad51fd636e74b4cec75e6284848db9 /qemu-nbd.c
parent702aa50d61497d29ef3b5e9c75d1404b3e6fd831 (diff)
nbd: Merge nbd_export_set_name into nbd_export_new
The existing NBD code had a weird split where nbd_export_new() created an export but did not add it to the list of exported names until a later nbd_export_set_name() came along and grabbed a second reference on the object; later, the first call to nbd_export_close() drops the second reference while removing the export from the list. This is in part because the QAPI NbdServerRemoveNode enum documents the possibility of adding a mode where we could do a soft disconnect: preventing new clients, but waiting for existing clients to gracefully quit, based on the mode used when calling nbd_export_close(). But in spite of all that, note that we never change the name of an NBD export while it is exposed, which means it is easier to just inline the process of setting the name as part of creating the export. Inline the contents of nbd_export_set_name() and nbd_export_set_description() into the two points in an export lifecycle where they matter, then adjust both callers to pass the name up front. Note that for creation, all callers pass a non-NULL name, (passing NULL at creation was for old style servers, but we removed support for that in commit 7f7dfe2a), so we can add an assert and do things unconditionally; but for cleanup, because of the dual nature of nbd_export_close(), we still have to be careful to avoid use-after-free. Along the way, add a comment reminding ourselves of the potential of adding a middle mode disconnect. Signed-off-by: Eric Blake <eblake@redhat.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Message-Id: <20190111194720.15671-5-eblake@redhat.com>
Diffstat (limited to 'qemu-nbd.c')
-rw-r--r--qemu-nbd.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/qemu-nbd.c b/qemu-nbd.c
index 6ca02b6d87..b93fa196da 100644
--- a/qemu-nbd.c
+++ b/qemu-nbd.c
@@ -1015,11 +1015,9 @@ int main(int argc, char **argv)
}
}
- export = nbd_export_new(bs, dev_offset, fd_size, nbdflags,
- nbd_export_closed, writethrough,
- NULL, &error_fatal);
- nbd_export_set_name(export, export_name);
- nbd_export_set_description(export, export_description);
+ export = nbd_export_new(bs, dev_offset, fd_size, export_name,
+ export_description, nbdflags, nbd_export_closed,
+ writethrough, NULL, &error_fatal);
if (device) {
#if HAVE_NBD_DEVICE