diff --git a/Makefile.am b/Makefile.am index c1feec1..8eb850b 100755 --- a/Makefile.am +++ b/Makefile.am @@ -1,7 +1,7 @@ ACLOCAL_AMFLAGS = -I m4 bin_PROGRAMS = fuseuring -fuseuring_SOURCES = fuse_io_service.cpp main.cpp fuseuring_main.cpp +fuseuring_SOURCES = fuse_io_context.cpp main.cpp fuseuring_main.cpp fuseuring_LDADD = $(PTHREAD_LIBS) -luring fuseuring_CXXFLAGS = $(PTHREAD_CFLAGS) -std=c++2a -D_FILE_OFFSET_BITS=64 @@ -9,4 +9,4 @@ if WITH_FCOROUTINES fuseuring_CXXFLAGS += -fcoroutines endif -noinst_HEADERS = fuse_io_service.h fuseuring_main.h fuse_kernel.h +noinst_HEADERS = fuse_io_context.h fuseuring_main.h fuse_kernel.h diff --git a/fuse_io_service.cpp b/fuse_io_context.cpp similarity index 87% rename from fuse_io_service.cpp rename to fuse_io_context.cpp index b4cf6b2..f38baa6 100755 --- a/fuse_io_service.cpp +++ b/fuse_io_context.cpp @@ -1,16 +1,16 @@ // SPDX-License-Identifier: LGPL-3.0-or-later // Copyright (C) Martin Raiber -#include "fuse_io_service.h" +#include "fuse_io_context.h" #include #include -fuse_io_service::fuse_io_service(FuseRing fuse_ring) +fuse_io_context::fuse_io_context(FuseRing fuse_ring) : fuse_ring(std::move(fuse_ring)), last_rc(0) { } -int fuse_io_service::fuseuring_handle_cqe(struct io_uring_cqe *cqe) +int fuse_io_context::fuseuring_handle_cqe(struct io_uring_cqe *cqe) { if(cqe->user_data==0) { @@ -31,7 +31,7 @@ int fuse_io_service::fuseuring_handle_cqe(struct io_uring_cqe *cqe) return 0; } -int fuse_io_service::fuseuring_submit(bool block) +int fuse_io_context::fuseuring_submit(bool block) { if(fuse_ring.ring_submit) { @@ -60,7 +60,7 @@ int fuse_io_service::fuseuring_submit(bool block) return 0; } -int fuse_io_service::run(queue_fuse_read_t queue_read) +int fuse_io_context::run(queue_fuse_read_t queue_read) { fuse_ring.ring_submit = false; @@ -98,7 +98,7 @@ int fuse_io_service::run(queue_fuse_read_t queue_read) } } -fuse_io_service::io_uring_task_discard fuse_io_service::queue_read_set_rc(queue_fuse_read_t queue_read) +fuse_io_context::io_uring_task_discard fuse_io_context::queue_read_set_rc(queue_fuse_read_t queue_read) { int rc = co_await queue_read(*this); if(rc!=0) diff --git a/fuse_io_service.h b/fuse_io_context.h similarity index 95% rename from fuse_io_service.h rename to fuse_io_context.h index a710f02..8cfb9df 100755 --- a/fuse_io_service.h +++ b/fuse_io_context.h @@ -30,7 +30,7 @@ static uint64_t handle_v(std::coroutine_handle<> p_awaiter) return (uint64_t)*((uint64_t*)&p_awaiter); } -struct fuse_io_service +struct fuse_io_context { template struct IoUringAwaiter @@ -321,7 +321,7 @@ struct fuse_io_service struct FuseIoVal { - FuseIoVal(fuse_io_service& io_service, + FuseIoVal(fuse_io_context& io_service, std::unique_ptr fuse_io) : io_service(io_service), fuse_io(std::move(fuse_io)) @@ -345,7 +345,7 @@ struct fuse_io_service } private: - fuse_io_service& io_service; + fuse_io_context& io_service; std::unique_ptr fuse_io; }; @@ -374,13 +374,13 @@ struct fuse_io_service FuseRing fuse_ring; - fuse_io_service(FuseRing fuse_ring); - fuse_io_service(fuse_io_service const&) = delete; - fuse_io_service(fuse_io_service&& other) = delete; - fuse_io_service& operator=(fuse_io_service&&) = delete; - fuse_io_service& operator=(fuse_io_service const&) = delete; + fuse_io_context(FuseRing fuse_ring); + fuse_io_context(fuse_io_context const&) = delete; + fuse_io_context(fuse_io_context&& other) = delete; + fuse_io_context& operator=(fuse_io_context&&) = delete; + fuse_io_context& operator=(fuse_io_context const&) = delete; - typedef fuse_io_service::io_uring_task (*queue_fuse_read_t)(fuse_io_service& io); + typedef fuse_io_context::io_uring_task (*queue_fuse_read_t)(fuse_io_context& io); int run(queue_fuse_read_t queue_read); @@ -407,7 +407,7 @@ private: } }; - fuse_io_service::io_uring_task_discard queue_read_set_rc(queue_fuse_read_t queue_read); + fuse_io_context::io_uring_task_discard queue_read_set_rc(queue_fuse_read_t queue_read); int fuseuring_handle_cqe(struct io_uring_cqe *cqe); int fuseuring_submit(bool block); diff --git a/fuseuring_main.cpp b/fuseuring_main.cpp index 19ae585..beb9904 100755 --- a/fuseuring_main.cpp +++ b/fuseuring_main.cpp @@ -13,7 +13,7 @@ #include #include #include -#include "fuse_io_service.h" +#include "fuse_io_context.h" namespace { @@ -32,7 +32,7 @@ namespace } } -[[nodiscard]] fuse_io_service::io_uring_task read_rbytes(fuse_io_service& io, fuse_io_service::FuseIoVal& fuse_io, +[[nodiscard]] fuse_io_context::io_uring_task read_rbytes(fuse_io_context& io, fuse_io_context::FuseIoVal& fuse_io, size_t rbytes, bool add_zero, std::vector& free_buf) { if(rbytes==0) @@ -83,7 +83,7 @@ namespace } } -[[nodiscard]] fuse_io_service::io_uring_task send_reply(fuse_io_service& io, fuse_io_service::FuseIoVal& fuse_io) +[[nodiscard]] fuse_io_context::io_uring_task send_reply(fuse_io_context& io, fuse_io_context::FuseIoVal& fuse_io) { struct io_uring_sqe *sqe; sqe = io.get_sqe(); @@ -117,7 +117,7 @@ namespace } } -[[nodiscard]] fuse_io_service::io_uring_task send_reply(fuse_io_service& io, fuse_io_service::FuseIoVal& fuse_io, +[[nodiscard]] fuse_io_context::io_uring_task send_reply(fuse_io_context& io, fuse_io_context::FuseIoVal& fuse_io, const std::vector& buf) { struct io_uring_sqe *sqe; @@ -153,7 +153,7 @@ namespace } } -[[nodiscard]] fuse_io_service::io_uring_task handle_unknown(fuse_io_service& io, fuse_io_service::FuseIoVal& fuse_io) +[[nodiscard]] fuse_io_context::io_uring_task handle_unknown(fuse_io_context& io, fuse_io_context::FuseIoVal& fuse_io) { fuse_in_header* fheader = reinterpret_cast(fuse_io->header_buf); fuse_out_header* out_header = reinterpret_cast(fuse_io->scratch_buf); @@ -165,7 +165,7 @@ namespace co_return co_await send_reply(io, fuse_io); } -[[nodiscard]] fuse_io_service::io_uring_task send_attr(fuse_io_service& io, fuse_io_service::FuseIoVal& fuse_io, +[[nodiscard]] fuse_io_context::io_uring_task send_attr(fuse_io_context& io, fuse_io_context::FuseIoVal& fuse_io, uint64_t unique, uint64_t nodeid) { fuse_out_header* out_header = reinterpret_cast(fuse_io->scratch_buf); @@ -201,7 +201,7 @@ namespace co_return co_await send_reply(io, fuse_io); } -[[nodiscard]] fuse_io_service::io_uring_task handle_getattr(fuse_io_service& io, fuse_io_service::FuseIoVal& fuse_io, +[[nodiscard]] fuse_io_context::io_uring_task handle_getattr(fuse_io_context& io, fuse_io_context::FuseIoVal& fuse_io, char* rbytes_buf) { fuse_in_header* fheader = reinterpret_cast(fuse_io->header_buf); @@ -218,7 +218,7 @@ namespace co_return co_await send_attr(io, fuse_io, fheader->unique, nodeid); } -[[nodiscard]] fuse_io_service::io_uring_task handle_setattr(fuse_io_service& io, fuse_io_service::FuseIoVal& fuse_io, +[[nodiscard]] fuse_io_context::io_uring_task handle_setattr(fuse_io_context& io, fuse_io_context::FuseIoVal& fuse_io, char* rbytes_buf) { fuse_in_header* fheader = reinterpret_cast(fuse_io->header_buf); @@ -239,7 +239,7 @@ namespace co_return co_await send_attr(io, fuse_io, fheader->unique, nodeid); } -[[nodiscard]] fuse_io_service::io_uring_task handle_lookup(fuse_io_service& io, fuse_io_service::FuseIoVal& fuse_io, +[[nodiscard]] fuse_io_context::io_uring_task handle_lookup(fuse_io_context& io, fuse_io_context::FuseIoVal& fuse_io, char* rbytes_buf) { fuse_in_header* fheader = reinterpret_cast(fuse_io->header_buf); @@ -283,7 +283,7 @@ namespace co_return co_await send_reply(io, fuse_io); } -[[nodiscard]] fuse_io_service::io_uring_task handle_opendir(fuse_io_service& io, fuse_io_service::FuseIoVal& fuse_io, +[[nodiscard]] fuse_io_context::io_uring_task handle_opendir(fuse_io_context& io, fuse_io_context::FuseIoVal& fuse_io, char* rbytes_buf) { fuse_in_header* fheader = reinterpret_cast(fuse_io->header_buf); @@ -303,7 +303,7 @@ namespace co_return co_await send_reply(io, fuse_io); } -[[nodiscard]] fuse_io_service::io_uring_task handle_open(fuse_io_service& io, fuse_io_service::FuseIoVal& fuse_io, +[[nodiscard]] fuse_io_context::io_uring_task handle_open(fuse_io_context& io, fuse_io_context::FuseIoVal& fuse_io, char* rbytes_buf) { fuse_in_header* fheader = reinterpret_cast(fuse_io->header_buf); @@ -323,7 +323,7 @@ namespace co_return co_await send_reply(io, fuse_io); } -[[nodiscard]] fuse_io_service::io_uring_task handle_read(fuse_io_service& io, fuse_io_service::FuseIoVal& fuse_io, +[[nodiscard]] fuse_io_context::io_uring_task handle_read(fuse_io_context& io, fuse_io_context::FuseIoVal& fuse_io, char* rbytes_buf) { fuse_in_header* fheader = reinterpret_cast(fuse_io->header_buf); @@ -411,7 +411,7 @@ namespace co_return 0; } -[[nodiscard]] fuse_io_service::io_uring_task handle_write(fuse_io_service& io, fuse_io_service::FuseIoVal& fuse_io, +[[nodiscard]] fuse_io_context::io_uring_task handle_write(fuse_io_context& io, fuse_io_context::FuseIoVal& fuse_io, char* rbytes_buf) { fuse_in_header* fheader = reinterpret_cast(fuse_io->header_buf); @@ -560,7 +560,7 @@ namespace co_return 0; } -[[nodiscard]] fuse_io_service::io_uring_task handle_releasedir(fuse_io_service& io, fuse_io_service::FuseIoVal& fuse_io, +[[nodiscard]] fuse_io_context::io_uring_task handle_releasedir(fuse_io_context& io, fuse_io_context::FuseIoVal& fuse_io, char* rbytes_buf) { fuse_in_header* fheader = reinterpret_cast(fuse_io->header_buf); @@ -576,7 +576,7 @@ namespace co_return co_await send_reply(io, fuse_io); } -[[nodiscard]] fuse_io_service::io_uring_task handle_release(fuse_io_service& io, fuse_io_service::FuseIoVal& fuse_io, +[[nodiscard]] fuse_io_context::io_uring_task handle_release(fuse_io_context& io, fuse_io_context::FuseIoVal& fuse_io, char* rbytes_buf) { fuse_in_header* fheader = reinterpret_cast(fuse_io->header_buf); @@ -607,7 +607,7 @@ void add_dir(std::vector& buf, const std::string& name, size_t off, const memset(dirent->name + name.size(), 0, bsize-FUSE_NAME_OFFSET-name.size()); } -[[nodiscard]] fuse_io_service::io_uring_task handle_readdir(fuse_io_service& io, fuse_io_service::FuseIoVal& fuse_io, +[[nodiscard]] fuse_io_context::io_uring_task handle_readdir(fuse_io_context& io, fuse_io_context::FuseIoVal& fuse_io, char* rbytes_buf) { fuse_in_header* fheader = reinterpret_cast(fuse_io->header_buf); @@ -645,9 +645,9 @@ void add_dir(std::vector& buf, const std::string& name, size_t off, const co_return co_await send_reply(io, fuse_io, out_buf); } -fuse_io_service::io_uring_task queue_fuse_read(fuse_io_service& io) +fuse_io_context::io_uring_task queue_fuse_read(fuse_io_context& io) { - fuse_io_service::FuseIoVal fuse_io = io.get_fuse_io(); + fuse_io_context::FuseIoVal fuse_io = io.get_fuse_io(); DBG_PRINT(std::cout << "queue_fuse_read" << std::endl); struct io_uring_sqe *sqe1 = io.get_sqe(); @@ -946,7 +946,7 @@ int fuseuring_main(int backing_fd, const std::string& mountpoint, int max_backgr int fuse_fixed_fd = 0; std::vector reg_buffers; - fuse_io_service::FuseRing fuse_ring; + fuse_io_context::FuseRing fuse_ring; fuse_ring.fd = fuse_fixed_fd; fuse_ring.backing_fd = fixed_fds.size(); fixed_fds.push_back(backing_fd); @@ -974,7 +974,7 @@ int fuseuring_main(int backing_fd, const std::string& mountpoint, int max_backgr for(size_t i=0;i new_io = std::make_unique(); + std::unique_ptr new_io = std::make_unique(); rc = pipe2(new_io->pipe, O_CLOEXEC|O_NONBLOCK); if(rc!=0) { @@ -1036,7 +1036,7 @@ int fuseuring_main(int backing_fd, const std::string& mountpoint, int max_backgr fuse_ring.backing_f_size = bst.st_size; std::cout << "Running..." << std::endl; - fuse_io_service service(std::move(fuse_ring)); + fuse_io_context service(std::move(fuse_ring)); rc = service.run(queue_fuse_read); io_uring_unregister_buffers(&fuse_uring);