* [Qemu-devel] [PATCH v3 0/4] 9pfs: add cleanup operation in handle/proxy backend
@ 2016-11-17 3:16 Li Qiang
2016-11-17 3:16 ` [Qemu-devel] [PATCH v3 1/4] 9pfs: adjust the order of resource cleanup in device unrealize Li Qiang
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: Li Qiang @ 2016-11-17 3:16 UTC (permalink / raw)
To: groug, qemu-devel; +Cc: liqiang6-s, Li Qiang
Currently, the backend of VirtFS doesn't have a cleanup
function. This will leak some resources in handle and proxy
backend driver. This patchset addresses this issue.
Li Qiang (4):
9pfs: adjust the order of resource cleanup in device unrealize
9pfs: add cleanup operation in FileOperations
9pfs: add cleanup operation for handle backend driver
9pfs: add cleanup operation for proxy backend driver
fsdev/file-op-9p.h | 1 +
hw/9pfs/9p-handle.c | 9 +++++++++
hw/9pfs/9p-proxy.c | 13 +++++++++++++
hw/9pfs/9p.c | 10 ++++++++--
4 files changed, 31 insertions(+), 2 deletions(-)
--
1.8.3.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH v3 1/4] 9pfs: adjust the order of resource cleanup in device unrealize
2016-11-17 3:16 [Qemu-devel] [PATCH v3 0/4] 9pfs: add cleanup operation in handle/proxy backend Li Qiang
@ 2016-11-17 3:16 ` Li Qiang
2016-11-17 3:16 ` [Qemu-devel] [PATCH v3 2/4] 9pfs: add cleanup operation in FileOperations Li Qiang
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Li Qiang @ 2016-11-17 3:16 UTC (permalink / raw)
To: groug, qemu-devel; +Cc: liqiang6-s, Li Qiang
Unrealize should undo things that were set during realize in
reverse order. So should do in the error path in realize.
Signed-off-by: Li Qiang <liq3ea@gmail.com>
---
Changes since the v2:
-adjust the order in the error path in realize
hw/9pfs/9p.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
index aea7e9d..087b5c9 100644
--- a/hw/9pfs/9p.c
+++ b/hw/9pfs/9p.c
@@ -3521,8 +3521,8 @@ int v9fs_device_realize_common(V9fsState *s, Error **errp)
rc = 0;
out:
if (rc) {
- g_free(s->ctx.fs_root);
g_free(s->tag);
+ g_free(s->ctx.fs_root);
v9fs_path_free(&path);
}
return rc;
@@ -3530,8 +3530,8 @@ out:
void v9fs_device_unrealize_common(V9fsState *s, Error **errp)
{
- g_free(s->ctx.fs_root);
g_free(s->tag);
+ g_free(s->ctx.fs_root);
}
typedef struct VirtfsCoResetData {
--
1.8.3.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH v3 2/4] 9pfs: add cleanup operation in FileOperations
2016-11-17 3:16 [Qemu-devel] [PATCH v3 0/4] 9pfs: add cleanup operation in handle/proxy backend Li Qiang
2016-11-17 3:16 ` [Qemu-devel] [PATCH v3 1/4] 9pfs: adjust the order of resource cleanup in device unrealize Li Qiang
@ 2016-11-17 3:16 ` Li Qiang
2016-11-17 3:16 ` [Qemu-devel] [PATCH v3 3/4] 9pfs: add cleanup operation for handle backend driver Li Qiang
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Li Qiang @ 2016-11-17 3:16 UTC (permalink / raw)
To: groug, qemu-devel; +Cc: liqiang6-s, Li Qiang
Currently, the backend of VirtFS doesn't have a cleanup
function. This will lead resource leak issues if the backed
driver allocates resources. This patch addresses this issue.
Signed-off-by: Li Qiang <liq3ea@gmail.com>
---
Changes since the v1:
-move the cleanup stuff above calls to g_free
-add cleanup call in the error path of realize if init was called
fsdev/file-op-9p.h | 1 +
hw/9pfs/9p.c | 6 ++++++
2 files changed, 7 insertions(+)
diff --git a/fsdev/file-op-9p.h b/fsdev/file-op-9p.h
index 6db9fea..a56dc84 100644
--- a/fsdev/file-op-9p.h
+++ b/fsdev/file-op-9p.h
@@ -100,6 +100,7 @@ struct FileOperations
{
int (*parse_opts)(QemuOpts *, struct FsDriverEntry *);
int (*init)(struct FsContext *);
+ void (*cleanup)(struct FsContext *);
int (*lstat)(FsContext *, V9fsPath *, struct stat *);
ssize_t (*readlink)(FsContext *, V9fsPath *, char *, size_t);
int (*chmod)(FsContext *, V9fsPath *, FsCred *);
diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
index 087b5c9..faebd91 100644
--- a/hw/9pfs/9p.c
+++ b/hw/9pfs/9p.c
@@ -3521,6 +3521,9 @@ int v9fs_device_realize_common(V9fsState *s, Error **errp)
rc = 0;
out:
if (rc) {
+ if (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);
@@ -3530,6 +3533,9 @@ out:
void v9fs_device_unrealize_common(V9fsState *s, Error **errp)
{
+ if (s->ops->cleanup) {
+ s->ops->cleanup(&s->ctx);
+ }
g_free(s->tag);
g_free(s->ctx.fs_root);
}
--
1.8.3.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH v3 3/4] 9pfs: add cleanup operation for handle backend driver
2016-11-17 3:16 [Qemu-devel] [PATCH v3 0/4] 9pfs: add cleanup operation in handle/proxy backend Li Qiang
2016-11-17 3:16 ` [Qemu-devel] [PATCH v3 1/4] 9pfs: adjust the order of resource cleanup in device unrealize Li Qiang
2016-11-17 3:16 ` [Qemu-devel] [PATCH v3 2/4] 9pfs: add cleanup operation in FileOperations Li Qiang
@ 2016-11-17 3:16 ` Li Qiang
2016-11-17 3:16 ` [Qemu-devel] [PATCH v3 4/4] 9pfs: add cleanup operation for proxy " Li Qiang
2016-11-21 16:05 ` [Qemu-devel] [PATCH v3 0/4] 9pfs: add cleanup operation in handle/proxy backend Greg Kurz
4 siblings, 0 replies; 6+ messages in thread
From: Li Qiang @ 2016-11-17 3:16 UTC (permalink / raw)
To: groug, qemu-devel; +Cc: liqiang6-s, Li Qiang
In the init operation of handle backend dirver, it allocates a
handle_data struct and opens a mount file. We should free these
resources when the 9pfs device is unrealized. This is what this
patch does.
Signed-off-by: Li Qiang <liq3ea@gmail.com>
---
hw/9pfs/9p-handle.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/hw/9pfs/9p-handle.c b/hw/9pfs/9p-handle.c
index 3d77594..1687661 100644
--- a/hw/9pfs/9p-handle.c
+++ b/hw/9pfs/9p-handle.c
@@ -649,6 +649,14 @@ out:
return ret;
}
+static void handle_cleanup(FsContext *ctx)
+{
+ struct handle_data *data = ctx->private;
+
+ close(data->mountfd);
+ g_free(data);
+}
+
static int handle_parse_opts(QemuOpts *opts, struct FsDriverEntry *fse)
{
const char *sec_model = qemu_opt_get(opts, "security_model");
@@ -671,6 +679,7 @@ static int handle_parse_opts(QemuOpts *opts, struct FsDriverEntry *fse)
FileOperations handle_ops = {
.parse_opts = handle_parse_opts,
.init = handle_init,
+ .cleanup = handle_cleanup,
.lstat = handle_lstat,
.readlink = handle_readlink,
.close = handle_close,
--
1.8.3.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH v3 4/4] 9pfs: add cleanup operation for proxy backend driver
2016-11-17 3:16 [Qemu-devel] [PATCH v3 0/4] 9pfs: add cleanup operation in handle/proxy backend Li Qiang
` (2 preceding siblings ...)
2016-11-17 3:16 ` [Qemu-devel] [PATCH v3 3/4] 9pfs: add cleanup operation for handle backend driver Li Qiang
@ 2016-11-17 3:16 ` Li Qiang
2016-11-21 16:05 ` [Qemu-devel] [PATCH v3 0/4] 9pfs: add cleanup operation in handle/proxy backend Greg Kurz
4 siblings, 0 replies; 6+ messages in thread
From: Li Qiang @ 2016-11-17 3:16 UTC (permalink / raw)
To: groug, qemu-devel; +Cc: liqiang6-s, Li Qiang
In the init operation of proxy backend dirver, it allocates a
V9fsProxy struct and some other resources. We should free these
resources when the 9pfs device is unrealized. This is what this
patch does.
Signed-off-by: Li Qiang <liq3ea@gmail.com>
---
Changes since the v2:
-only close proxy->sockfd if QEMU opened the fd
-do the cleanup work in reverse order
hw/9pfs/9p-proxy.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/hw/9pfs/9p-proxy.c b/hw/9pfs/9p-proxy.c
index f2417b7..f4aa7a9 100644
--- a/hw/9pfs/9p-proxy.c
+++ b/hw/9pfs/9p-proxy.c
@@ -1168,9 +1168,22 @@ static int proxy_init(FsContext *ctx)
return 0;
}
+static void proxy_cleanup(FsContext *ctx)
+{
+ V9fsProxy *proxy = ctx->private;
+
+ g_free(proxy->out_iovec.iov_base);
+ g_free(proxy->in_iovec.iov_base);
+ if (ctx->export_flags & V9FS_PROXY_SOCK_NAME) {
+ close(proxy->sockfd);
+ }
+ g_free(proxy);
+}
+
FileOperations proxy_ops = {
.parse_opts = proxy_parse_opts,
.init = proxy_init,
+ .cleanup = proxy_cleanup,
.lstat = proxy_lstat,
.readlink = proxy_readlink,
.close = proxy_close,
--
1.8.3.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH v3 0/4] 9pfs: add cleanup operation in handle/proxy backend
2016-11-17 3:16 [Qemu-devel] [PATCH v3 0/4] 9pfs: add cleanup operation in handle/proxy backend Li Qiang
` (3 preceding siblings ...)
2016-11-17 3:16 ` [Qemu-devel] [PATCH v3 4/4] 9pfs: add cleanup operation for proxy " Li Qiang
@ 2016-11-21 16:05 ` Greg Kurz
4 siblings, 0 replies; 6+ messages in thread
From: Greg Kurz @ 2016-11-21 16:05 UTC (permalink / raw)
To: Li Qiang; +Cc: qemu-devel, liqiang6-s
On Wed, 16 Nov 2016 22:16:52 -0500
Li Qiang <liq3ea@gmail.com> wrote:
> Currently, the backend of VirtFS doesn't have a cleanup
> function. This will leak some resources in handle and proxy
> backend driver. This patchset addresses this issue.
>
> Li Qiang (4):
> 9pfs: adjust the order of resource cleanup in device unrealize
> 9pfs: add cleanup operation in FileOperations
> 9pfs: add cleanup operation for handle backend driver
> 9pfs: add cleanup operation for proxy backend driver
>
> fsdev/file-op-9p.h | 1 +
> hw/9pfs/9p-handle.c | 9 +++++++++
> hw/9pfs/9p-proxy.c | 13 +++++++++++++
> hw/9pfs/9p.c | 10 ++++++++--
> 4 files changed, 31 insertions(+), 2 deletions(-)
>
Hi Li,
This looks good. I'll send a pull request shortly.
Thanks for your help in fixing all these leaks.
--
Greg
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2016-11-21 16:05 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-11-17 3:16 [Qemu-devel] [PATCH v3 0/4] 9pfs: add cleanup operation in handle/proxy backend Li Qiang
2016-11-17 3:16 ` [Qemu-devel] [PATCH v3 1/4] 9pfs: adjust the order of resource cleanup in device unrealize Li Qiang
2016-11-17 3:16 ` [Qemu-devel] [PATCH v3 2/4] 9pfs: add cleanup operation in FileOperations Li Qiang
2016-11-17 3:16 ` [Qemu-devel] [PATCH v3 3/4] 9pfs: add cleanup operation for handle backend driver Li Qiang
2016-11-17 3:16 ` [Qemu-devel] [PATCH v3 4/4] 9pfs: add cleanup operation for proxy " Li Qiang
2016-11-21 16:05 ` [Qemu-devel] [PATCH v3 0/4] 9pfs: add cleanup operation in handle/proxy backend Greg Kurz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).