From 6c9b6abf5e77a9cec85a9f37aeeb4ccb07771220 Mon Sep 17 00:00:00 2001 From: Changpeng Liu Date: Mon, 10 Jun 2019 20:59:22 -0400 Subject: [PATCH] blobfs: make internal asynchronous APIs as public APIs SPDK blobfs has asynchronous APIs defined in blobfs_internal.h file, as users may want to use them, so we remove them to the public .h file. Change-Id: I1835d97060101f6315a73cb8638b15ff7e13ba54 Signed-off-by: Changpeng Liu Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/457547 Tested-by: SPDK CI Jenkins Reviewed-by: Darek Stojaczyk Reviewed-by: Shuhei Matsumoto Reviewed-by: Ben Walker --- CHANGELOG.md | 4 + include/spdk/blobfs.h | 148 +++++++++++++++++++++++++++++++++++ lib/blobfs/blobfs.c | 2 +- lib/blobfs/blobfs_internal.h | 69 ---------------- lib/blobfs/tree.c | 2 +- 5 files changed, 154 insertions(+), 71 deletions(-) delete mode 100644 lib/blobfs/blobfs_internal.h diff --git a/CHANGELOG.md b/CHANGELOG.md index f817b123d..1ad6e28de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## v19.07: (Upcoming Release) +### blobfs + +Blobfs file asynchronous operations were added to public APIs. + ### util A new file API `spdk_posix_file_load` was added to load file content into a data buffer. diff --git a/include/spdk/blobfs.h b/include/spdk/blobfs.h index 4c7d966ec..47cd67886 100644 --- a/include/spdk/blobfs.h +++ b/include/spdk/blobfs.h @@ -442,6 +442,154 @@ void spdk_file_writev_async(struct spdk_file *file, struct spdk_io_channel *chan struct iovec *iovs, uint32_t iovcnt, uint64_t offset, uint64_t length, spdk_file_op_complete cb_fn, void *cb_arg); +/** + * Get statistics about the file including the underlying blob id and the file size. + * + * \param fs Blobstore filesystem. + * \param name The file name used to look up the matched file in the blobstore filesystem. + * \param cb_fn Called when the request is complete. + * \param cb_arg Argument passed to cb_fn. + * + * return None. + */ +void spdk_fs_file_stat_async(struct spdk_filesystem *fs, const char *name, + spdk_file_stat_op_complete cb_fn, void *cb_arg); + +/** + * Create a new file on the given blobstore filesystem. + * + * \param fs Blobstore filesystem. + * \param name The file name for this new file. + * \param cb_fn Called when the request is complete. + * \param cb_arg Argument passed to cb_fn. + * + * return None. + */ +void spdk_fs_create_file_async(struct spdk_filesystem *fs, const char *name, + spdk_file_op_complete cb_fn, void *cb_arg); + +/** + * Open the file. + * + * \param fs Blobstore filesystem. + * \param name The file name used to look up the matched file in the blobstore filesystem. + * \param flags This flags will be used to control the open mode. + * \param cb_fn Called when the request is complete. + * \param cb_arg Argument passed to cb_fn. + * + * return None. + */ +void spdk_fs_open_file_async(struct spdk_filesystem *fs, const char *name, uint32_t flags, + spdk_file_op_with_handle_complete cb_fn, void *cb_arg); + +/** + * Close the file. + * + * \param file File to close. + * \param cb_fn Called when the request is complete. + * \param cb_arg Argument passed to cb_fn. + * + * return None. + */ +void spdk_file_close_async(struct spdk_file *file, spdk_file_op_complete cb_fn, void *cb_arg); + + +/** + * Change the file name. + * + * This operation will overwrite an existing file if there is a file with the + * same name. + * + * \param fs Blobstore filesystem. + * \param old_name Old name of the file. + * \param new_name New name of the file. + * \param cb_fn Called when the request is complete. + * \param cb_arg Argument passed to cb_fn. + * + * return None. + */ +void spdk_fs_rename_file_async(struct spdk_filesystem *fs, const char *old_name, + const char *new_name, spdk_fs_op_complete cb_fn, + void *cb_arg); + +/** + * Delete the file. + * + * \param fs Blobstore filesystem. + * \param name The name of the file to be deleted. + * \param cb_fn Called when the request is complete. + * \param cb_arg Argument passed to cb_fn. + * + * return None. + * + */ +void spdk_fs_delete_file_async(struct spdk_filesystem *fs, const char *name, + spdk_file_op_complete cb_fn, void *cb_arg); + +/** + * Truncate the file. + * + * \param file File to truncate. + * \param length New size in bytes of the file. + * \param cb_fn Called when the request is complete. + * \param cb_arg Argument passed to cb_fn. + * + * return None. + */ +void spdk_file_truncate_async(struct spdk_file *file, uint64_t length, + spdk_file_op_complete cb_fn, void *cb_arg); + +/** + * Write data to the given file. + * + * \param file File to write. + * \param channel I/O channel for asynchronous operations. + * \param payload The specified buffer which should contain the data to be transmitted. + * \param offset The beginning position to write data. + * \param length The size in bytes of data to write. + * \param cb_fn Called when the request is complete. + * \param cb_arg Argument passed to cb_fn. + * + * return None. + */ +void spdk_file_write_async(struct spdk_file *file, struct spdk_io_channel *channel, + void *payload, uint64_t offset, uint64_t length, + spdk_file_op_complete cb_fn, void *cb_arg); + +/** + * Read data to user buffer from the given file. + * + * \param file File to write. + * \param channel I/O channel for asynchronous operations. + * \param payload The specified buffer which will store the obtained data. + * \param offset The beginning position to read. + * \param length The size in bytes of data to read. + * \param cb_fn Called when the request is complete. + * \param cb_arg Argument passed to cb_fn. + * + * return None. + */ +void spdk_file_read_async(struct spdk_file *file, struct spdk_io_channel *channel, + void *payload, uint64_t offset, uint64_t length, + spdk_file_op_complete cb_fn, void *cb_arg); + +/** + * Sync all dirty cache buffers to the backing block device. For async + * usage models, completion of the sync indicates only that data written + * when the sync command was issued have been flushed to disk - it does + * not guarantee any writes submitted after the sync have been flushed, + * even if those writes are completed before the sync. + * + * \param file File to write. + * \param channel I/O channel for asynchronous operations. + * \param cb_fn Called when the request is complete. + * \param cb_arg Argument passed to cb_fn. + * + * return None. + */ +void spdk_file_sync_async(struct spdk_file *file, struct spdk_io_channel *channel, + spdk_file_op_complete cb_fn, void *cb_arg); + #ifdef __cplusplus } #endif diff --git a/lib/blobfs/blobfs.c b/lib/blobfs/blobfs.c index a8e28ccd0..c94819915 100644 --- a/lib/blobfs/blobfs.c +++ b/lib/blobfs/blobfs.c @@ -35,7 +35,7 @@ #include "spdk/blobfs.h" #include "spdk/conf.h" -#include "blobfs_internal.h" +#include "tree.h" #include "spdk/queue.h" #include "spdk/thread.h" diff --git a/lib/blobfs/blobfs_internal.h b/lib/blobfs/blobfs_internal.h deleted file mode 100644 index 4e2ae3955..000000000 --- a/lib/blobfs/blobfs_internal.h +++ /dev/null @@ -1,69 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright (c) Intel Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef SPDK_BLOBFS_INTERNAL_H -#define SPDK_BLOBFS_INTERNAL_H - -#include "tree.h" - -void spdk_fs_file_stat_async(struct spdk_filesystem *fs, const char *name, - spdk_file_stat_op_complete cb_fn, void *cb_arg); -void spdk_fs_create_file_async(struct spdk_filesystem *fs, const char *name, - spdk_file_op_complete cb_fn, void *cb_args); -void spdk_fs_open_file_async(struct spdk_filesystem *fs, const char *name, uint32_t flags, - spdk_file_op_with_handle_complete cb_fn, void *cb_arg); -void spdk_file_close_async(struct spdk_file *file, spdk_file_op_complete cb_fn, void *cb_arg); -void spdk_fs_rename_file_async(struct spdk_filesystem *fs, const char *old_name, - const char *new_name, spdk_fs_op_complete cb_fn, - void *cb_arg); -void spdk_fs_delete_file_async(struct spdk_filesystem *fs, const char *name, - spdk_file_op_complete cb_fn, void *cb_arg); -void spdk_file_truncate_async(struct spdk_file *file, uint64_t length, - spdk_file_op_complete cb_fn, void *arg); -void spdk_file_write_async(struct spdk_file *file, struct spdk_io_channel *channel, - void *payload, uint64_t offset, uint64_t length, - spdk_file_op_complete cb_fn, void *cb_arg); -void spdk_file_read_async(struct spdk_file *file, struct spdk_io_channel *channel, - void *payload, uint64_t offset, uint64_t length, - spdk_file_op_complete cb_fn, void *cb_arg); - -/* Sync all dirty cache buffers to the backing block device. For async - * usage models, completion of the sync indicates only that data written - * when the sync command was issued have been flushed to disk - it does - * not guarantee any writes submitted after the sync have been flushed, - * even if those writes are completed before the sync. - */ -void spdk_file_sync_async(struct spdk_file *file, struct spdk_io_channel *channel, - spdk_file_op_complete cb_fn, void *cb_arg); - -#endif /* SPDK_BLOBFS_INTERNAL_H_ */ diff --git a/lib/blobfs/tree.c b/lib/blobfs/tree.c index ffb6bce60..92cb6beb9 100644 --- a/lib/blobfs/tree.c +++ b/lib/blobfs/tree.c @@ -34,7 +34,7 @@ #include "spdk/stdinc.h" #include "spdk/blobfs.h" -#include "blobfs_internal.h" +#include "tree.h" #include "spdk/queue.h" #include "spdk/assert.h"