mirror of https://gitee.com/openkylin/qemu.git
9p: Simplify error path of v9fs_device_realize_common()
Make v9fs_device_unrealize_common() idempotent and use it for rollback, in order to reduce code duplication. Signed-off-by: Greg Kurz <groug@kaod.org>
This commit is contained in:
parent
8703283352
commit
c0da0cb761
|
@ -1465,6 +1465,10 @@ static void local_cleanup(FsContext *ctx)
|
|||
{
|
||||
LocalData *data = ctx->private;
|
||||
|
||||
if (!data) {
|
||||
return;
|
||||
}
|
||||
|
||||
close(data->mountfd);
|
||||
g_free(data);
|
||||
}
|
||||
|
|
|
@ -1185,6 +1185,10 @@ static void proxy_cleanup(FsContext *ctx)
|
|||
{
|
||||
V9fsProxy *proxy = ctx->private;
|
||||
|
||||
if (!proxy) {
|
||||
return;
|
||||
}
|
||||
|
||||
g_free(proxy->out_iovec.iov_base);
|
||||
g_free(proxy->in_iovec.iov_base);
|
||||
if (ctx->export_flags & V9FS_PROXY_SOCK_NAME) {
|
||||
|
|
16
hw/9pfs/9p.c
16
hw/9pfs/9p.c
|
@ -3637,27 +3637,23 @@ int v9fs_device_realize_common(V9fsState *s, const V9fsTransport *t,
|
|||
s->ctx.fst = &fse->fst;
|
||||
fsdev_throttle_init(s->ctx.fst);
|
||||
|
||||
v9fs_path_free(&path);
|
||||
|
||||
rc = 0;
|
||||
out:
|
||||
if (rc) {
|
||||
if (s->ops && s->ops->cleanup && s->ctx.private) {
|
||||
s->ops->cleanup(&s->ctx);
|
||||
}
|
||||
g_free(s->tag);
|
||||
g_free(s->ctx.fs_root);
|
||||
v9fs_path_free(&path);
|
||||
v9fs_device_unrealize_common(s, NULL);
|
||||
}
|
||||
v9fs_path_free(&path);
|
||||
return rc;
|
||||
}
|
||||
|
||||
void v9fs_device_unrealize_common(V9fsState *s, Error **errp)
|
||||
{
|
||||
if (s->ops->cleanup) {
|
||||
if (s->ops && s->ops->cleanup) {
|
||||
s->ops->cleanup(&s->ctx);
|
||||
}
|
||||
fsdev_throttle_cleanup(s->ctx.fst);
|
||||
if (s->ctx.fst) {
|
||||
fsdev_throttle_cleanup(s->ctx.fst);
|
||||
}
|
||||
g_free(s->tag);
|
||||
g_free(s->ctx.fs_root);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue