From d0b134606b249375c845e1483c4b41028c1ebd75 Mon Sep 17 00:00:00 2001 From: Ziye Yang Date: Tue, 24 Jul 2018 15:47:58 +0800 Subject: [PATCH] blobfs: refactor the I/O device free functions. Some functions should be executed togther, so group it into a single function which will avoid the potential issues. Change-Id: Ie57be20aa76d9bece82b5534c3c5fc6c9faeebad Signed-off-by: Ziye Yang Reviewed-on: https://review.gerrithub.io/420233 Tested-by: SPDK CI Jenkins Chandler-Test-Pool: SPDK Automated Test System Reviewed-by: Ben Walker Reviewed-by: Jim Harris --- lib/blobfs/blobfs.c | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/lib/blobfs/blobfs.c b/lib/blobfs/blobfs.c index 3d396ca06..200b428ff 100644 --- a/lib/blobfs/blobfs.c +++ b/lib/blobfs/blobfs.c @@ -673,6 +673,24 @@ load_cb(void *ctx, struct spdk_blob_store *bs, int bserrno) fs_load_done(req, 0); } +static void +spdk_fs_io_device_unregister(struct spdk_filesystem *fs) +{ + assert(fs != NULL); + spdk_io_device_unregister(&fs->md_target, NULL); + spdk_io_device_unregister(&fs->sync_target, NULL); + spdk_io_device_unregister(&fs->io_target, NULL); + free(fs); +} + +static void +spdk_fs_free_io_channels(struct spdk_filesystem *fs) +{ + assert(fs != NULL); + spdk_fs_free_io_channel(fs->md_target.md_io_channel); + spdk_fs_free_io_channel(fs->sync_target.sync_io_channel); +} + void spdk_fs_load(struct spdk_bs_dev *dev, fs_send_request_fn send_request_fn, spdk_fs_op_with_handle_complete cb_fn, void *cb_arg) @@ -692,12 +710,8 @@ spdk_fs_load(struct spdk_bs_dev *dev, fs_send_request_fn send_request_fn, req = alloc_fs_request(fs->md_target.md_fs_channel); if (req == NULL) { - spdk_put_io_channel(fs->md_target.md_io_channel); - spdk_io_device_unregister(&fs->md_target, NULL); - spdk_put_io_channel(fs->sync_target.sync_io_channel); - spdk_io_device_unregister(&fs->sync_target, NULL); - spdk_io_device_unregister(&fs->io_target, NULL); - free(fs); + spdk_fs_free_io_channels(fs); + spdk_fs_io_device_unregister(fs); cb_fn(cb_arg, NULL, -ENOMEM); return; } @@ -730,11 +744,7 @@ unload_cb(void *ctx, int bserrno) args->fn.fs_op(args->arg, bserrno); free(req); - spdk_io_device_unregister(&fs->io_target, NULL); - spdk_io_device_unregister(&fs->sync_target, NULL); - spdk_io_device_unregister(&fs->md_target, NULL); - - free(fs); + spdk_fs_io_device_unregister(fs); } void @@ -758,8 +768,7 @@ spdk_fs_unload(struct spdk_filesystem *fs, spdk_fs_op_complete cb_fn, void *cb_a args->arg = cb_arg; args->fs = fs; - spdk_fs_free_io_channel(fs->md_target.md_io_channel); - spdk_fs_free_io_channel(fs->sync_target.sync_io_channel); + spdk_fs_free_io_channels(fs); spdk_bs_unload(fs->bs, unload_cb, req); }