mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 09:13:55 -06:00
block/export: Move strong user reference to block_exports
The reference owned by the user/monitor that is created when adding the export and dropped when removing it was tied to the 'exports' list in nbd/server.c. Every block export will have a user reference, so move it to the block export level and tie it to the 'block_exports' list in block/export/export.c instead. This is necessary for introducing a QMP command for removing exports. Note that exports are present in block_exports even after the user has requested shutdown. This is different from NBD's exports where exports are immediately removed on a shutdown request, even if they are still in the process of shutting down. In order to avoid that the user still interacts with an export that is shutting down (and possibly removes it a second time), we need to remember if the user actually still owns it. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Message-Id: <20200924152717.287415-20-kwolf@redhat.com> Acked-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
d53be9ce55
commit
3859ad36f0
4 changed files with 14 additions and 7 deletions
|
@ -1616,7 +1616,6 @@ int nbd_export_new(BlockExport *blk_exp, BlockDriverState *bs,
|
|||
|
||||
blk_add_aio_context_notifier(blk, blk_aio_attached, blk_aio_detach, exp);
|
||||
|
||||
blk_exp_ref(&exp->common);
|
||||
QTAILQ_INSERT_TAIL(&exports, exp, next);
|
||||
|
||||
return 0;
|
||||
|
@ -1663,7 +1662,6 @@ static void nbd_export_request_shutdown(BlockExport *blk_exp)
|
|||
client_close(client, true);
|
||||
}
|
||||
if (exp->name) {
|
||||
blk_exp_unref(&exp->common);
|
||||
g_free(exp->name);
|
||||
exp->name = NULL;
|
||||
QTAILQ_REMOVE(&exports, exp, next);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue