From acce03bb32917e21f2d1d49c5a460d3cd2f72a11 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sun, 22 Nov 2020 21:28:57 +0100 Subject: [PATCH] Move complete_pread() into a separate file, to avoid the io_uring false dependency. --- complete_pread.cpp | 21 +++++++++++++++++++++ complete_pread.h | 10 ++++++++++ io_uring_engine.cpp | 18 +----------------- io_uring_engine.h | 4 ---- meson.build | 2 +- plocate.cpp | 1 + 6 files changed, 34 insertions(+), 22 deletions(-) create mode 100644 complete_pread.cpp create mode 100644 complete_pread.h diff --git a/complete_pread.cpp b/complete_pread.cpp new file mode 100644 index 0000000..4913674 --- /dev/null +++ b/complete_pread.cpp @@ -0,0 +1,21 @@ +#include +#include +#include +#include + +void complete_pread(int fd, void *ptr, size_t len, off_t offset) +{ + while (len > 0) { + ssize_t ret = pread(fd, ptr, len, offset); + if (ret == -1 && errno == EINTR) { + continue; + } + if (ret <= 0) { + perror("pread"); + exit(1); + } + ptr = reinterpret_cast(ptr) + ret; + len -= ret; + offset -= ret; + } +} diff --git a/complete_pread.h b/complete_pread.h new file mode 100644 index 0000000..fec5787 --- /dev/null +++ b/complete_pread.h @@ -0,0 +1,10 @@ +#ifndef COMPLETE_PREAD_H +#define COMPLETE_PREAD_H 1 + +#include + +// A wrapper around pread() that returns an incomplete read. +// Always synchronous (no io_uring). +void complete_pread(int fd, void *ptr, size_t len, off_t offset); + +#endif // !defined(COMPLETE_PREAD_H) diff --git a/io_uring_engine.cpp b/io_uring_engine.cpp index 70497a4..ab9f411 100644 --- a/io_uring_engine.cpp +++ b/io_uring_engine.cpp @@ -7,6 +7,7 @@ #ifndef WITHOUT_URING #include #endif +#include "complete_pread.h" #include "dprintf.h" #include "io_uring_engine.h" @@ -247,20 +248,3 @@ void IOUringEngine::finish() } #endif } - -void complete_pread(int fd, void *ptr, size_t len, off_t offset) -{ - while (len > 0) { - ssize_t ret = pread(fd, ptr, len, offset); - if (ret == -1 && errno == EINTR) { - continue; - } - if (ret <= 0) { - perror("pread"); - exit(1); - } - ptr = reinterpret_cast(ptr) + ret; - len -= ret; - offset -= ret; - } -} diff --git a/io_uring_engine.h b/io_uring_engine.h index 258d460..470bacf 100644 --- a/io_uring_engine.h +++ b/io_uring_engine.h @@ -83,8 +83,4 @@ private: static constexpr size_t queue_depth = 256; }; -// A wrapper around pread() that returns an incomplete read. -// Always synchronous (no io_uring). -void complete_pread(int fd, void *ptr, size_t len, off_t offset); - #endif // !defined(IO_URING_ENGINE_H) diff --git a/meson.build b/meson.build index f3094ea..9dc7c15 100644 --- a/meson.build +++ b/meson.build @@ -25,7 +25,7 @@ if cxx.compiles(code, name: 'function multiversioning') add_project_arguments('-DHAS_FUNCTION_MULTIVERSIONING', language: 'cpp') endif -executable('plocate', ['plocate.cpp', 'io_uring_engine.cpp', 'turbopfor.cpp', 'parse_trigrams.cpp', 'serializer.cpp', 'access_rx_cache.cpp', 'needle.cpp'], +executable('plocate', ['plocate.cpp', 'io_uring_engine.cpp', 'turbopfor.cpp', 'parse_trigrams.cpp', 'serializer.cpp', 'access_rx_cache.cpp', 'needle.cpp', 'complete_pread.cpp'], dependencies: [uringdep, zstddep, threaddep, atomicdep], install: true, install_mode: ['rwxr-sr-x', 'root', 'mlocate']) diff --git a/plocate.cpp b/plocate.cpp index 423aaf7..079eb29 100644 --- a/plocate.cpp +++ b/plocate.cpp @@ -1,4 +1,5 @@ #include "access_rx_cache.h" +#include "complete_pread.h" #include "db.h" #include "dprintf.h" #include "io_uring_engine.h" -- 2.39.2