diff options
author | Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> | 2018-01-19 16:57:16 +0300 |
---|---|---|
committer | Eric Blake <eblake@redhat.com> | 2018-01-26 09:37:20 -0600 |
commit | a3b0dc75829d910073e841539cb5ae4e6f75c09b (patch) | |
tree | d2554b82e6bfe8ab281d255916019b688708d162 /nbd/server.c | |
parent | dba49323ea83c8e661a279e8b69737fd18783a19 (diff) |
qapi: add nbd-server-remove
Add command for removing an export. It is needed for cases when we
don't want to keep the export after the operation on it was completed.
The other example is a temporary node, created with blockdev-add.
If we want to delete it we should firstly remove any corresponding
NBD export.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Message-Id: <20180119135719.24745-3-vsementsov@virtuozzo.com>
[eblake: drop dead nb_clients code]
Signed-off-by: Eric Blake <eblake@redhat.com>
Diffstat (limited to 'nbd/server.c')
-rw-r--r-- | nbd/server.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/nbd/server.c b/nbd/server.c index 6caa8d17be..112e3f69df 100644 --- a/nbd/server.c +++ b/nbd/server.c @@ -1177,6 +1177,19 @@ void nbd_export_close(NBDExport *exp) nbd_export_put(exp); } +void nbd_export_remove(NBDExport *exp, NbdServerRemoveMode mode, Error **errp) +{ + if (mode == NBD_SERVER_REMOVE_MODE_HARD || QTAILQ_EMPTY(&exp->clients)) { + nbd_export_close(exp); + return; + } + + assert(mode == NBD_SERVER_REMOVE_MODE_SAFE); + + error_setg(errp, "export '%s' still in use", exp->name); + error_append_hint(errp, "Use mode='hard' to force client disconnect\n"); +} + void nbd_export_get(NBDExport *exp) { assert(exp->refcount > 0); |