diff options
author | Liu Bo <bo.liu@linux.alibaba.com> | 2019-06-07 05:43:56 +0800 |
---|---|---|
committer | Dr. David Alan Gilbert <dgilbert@redhat.com> | 2020-01-23 16:41:37 +0000 |
commit | 18a69cbbb6a4caa7c2040c6db4a33b044a32be7e (patch) | |
tree | 4619fd32a660275e8f3114c9e5be0d4cf6c44e6d /tools | |
parent | eb68a33b5fc5dde87bd9b99b94e7c33a5d8ea82e (diff) | |
download | qemu-18a69cbbb6a4caa7c2040c6db4a33b044a32be7e.zip qemu-18a69cbbb6a4caa7c2040c6db4a33b044a32be7e.tar.gz qemu-18a69cbbb6a4caa7c2040c6db4a33b044a32be7e.tar.bz2 |
virtiofsd: add helper for lo_data cleanup
This offers an helper function for lo_data's cleanup.
Signed-off-by: Liu Bo <bo.liu@linux.alibaba.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/virtiofsd/passthrough_ll.c | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/tools/virtiofsd/passthrough_ll.c b/tools/virtiofsd/passthrough_ll.c index 056ebe8..e8dc5c7 100644 --- a/tools/virtiofsd/passthrough_ll.c +++ b/tools/virtiofsd/passthrough_ll.c @@ -2407,6 +2407,26 @@ static gboolean lo_key_equal(gconstpointer a, gconstpointer b) return la->ino == lb->ino && la->dev == lb->dev; } +static void fuse_lo_data_cleanup(struct lo_data *lo) +{ + if (lo->inodes) { + g_hash_table_destroy(lo->inodes); + } + lo_map_destroy(&lo->fd_map); + lo_map_destroy(&lo->dirp_map); + lo_map_destroy(&lo->ino_map); + + if (lo->proc_self_fd >= 0) { + close(lo->proc_self_fd); + } + + if (lo->root.fd >= 0) { + close(lo->root.fd); + } + + free(lo->source); +} + int main(int argc, char *argv[]) { struct fuse_args args = FUSE_ARGS_INIT(argc, argv); @@ -2554,22 +2574,7 @@ err_out2: err_out1: fuse_opt_free_args(&args); - if (lo.inodes) { - g_hash_table_destroy(lo.inodes); - } - lo_map_destroy(&lo.fd_map); - lo_map_destroy(&lo.dirp_map); - lo_map_destroy(&lo.ino_map); - - if (lo.proc_self_fd >= 0) { - close(lo.proc_self_fd); - } - - if (lo.root.fd >= 0) { - close(lo.root.fd); - } - - free(lo.source); + fuse_lo_data_cleanup(&lo); return ret ? 1 : 0; } |