mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-24 03:59:52 +00:00
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;
|
LocalData *data = ctx->private;
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
close(data->mountfd);
|
close(data->mountfd);
|
||||||
g_free(data);
|
g_free(data);
|
||||||
}
|
}
|
||||||
|
@ -1185,6 +1185,10 @@ static void proxy_cleanup(FsContext *ctx)
|
|||||||
{
|
{
|
||||||
V9fsProxy *proxy = ctx->private;
|
V9fsProxy *proxy = ctx->private;
|
||||||
|
|
||||||
|
if (!proxy) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
g_free(proxy->out_iovec.iov_base);
|
g_free(proxy->out_iovec.iov_base);
|
||||||
g_free(proxy->in_iovec.iov_base);
|
g_free(proxy->in_iovec.iov_base);
|
||||||
if (ctx->export_flags & V9FS_PROXY_SOCK_NAME) {
|
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;
|
s->ctx.fst = &fse->fst;
|
||||||
fsdev_throttle_init(s->ctx.fst);
|
fsdev_throttle_init(s->ctx.fst);
|
||||||
|
|
||||||
v9fs_path_free(&path);
|
|
||||||
|
|
||||||
rc = 0;
|
rc = 0;
|
||||||
out:
|
out:
|
||||||
if (rc) {
|
if (rc) {
|
||||||
if (s->ops && s->ops->cleanup && s->ctx.private) {
|
v9fs_device_unrealize_common(s, NULL);
|
||||||
s->ops->cleanup(&s->ctx);
|
|
||||||
}
|
|
||||||
g_free(s->tag);
|
|
||||||
g_free(s->ctx.fs_root);
|
|
||||||
v9fs_path_free(&path);
|
|
||||||
}
|
}
|
||||||
|
v9fs_path_free(&path);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void v9fs_device_unrealize_common(V9fsState *s, Error **errp)
|
void v9fs_device_unrealize_common(V9fsState *s, Error **errp)
|
||||||
{
|
{
|
||||||
if (s->ops->cleanup) {
|
if (s->ops && s->ops->cleanup) {
|
||||||
s->ops->cleanup(&s->ctx);
|
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->tag);
|
||||||
g_free(s->ctx.fs_root);
|
g_free(s->ctx.fs_root);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user