]> git.sesse.net Git - plocate/blobdiff - io_uring_engine.h
Release plocate 1.1.22.
[plocate] / io_uring_engine.h
index 258d460d1219f03807fa114cf0485924b6c0ba94..bcb10581cd84c716c0d109d3f266446d141167e5 100644 (file)
@@ -7,6 +7,7 @@
 #include <string_view>
 #include <sys/socket.h>
 #include <sys/types.h>
+#include <linux/stat.h>
 
 struct io_uring_sqe;
 #ifndef WITHOUT_URING
@@ -18,11 +19,9 @@ public:
        IOUringEngine(size_t slop_bytes);
        void submit_read(int fd, size_t len, off_t offset, std::function<void(std::string_view)> cb);
 
-       // NOTE: We just do the stat() to get the data into the dentry cache for fast access;
-       // we don't care about the return value. Thus, the callback has no parameter lists.
-       // If we have no io_uring, the callback will be made immediately, with no stat() call
-       // being done.
-       void submit_stat(const char *path, std::function<void()> cb);
+       // NOTE: We just do the stat() to get the data into the dentry cache for fast access,
+       // or to check whether the file exists. Thus, the callback has only an OK/not OK boolean.
+       void submit_stat(const char *path, std::function<void(bool ok)> cb);
        bool get_supports_stat() { return supports_stat; }
 
        void finish();
@@ -31,7 +30,7 @@ public:
 private:
 #ifndef WITHOUT_URING
        void submit_read_internal(io_uring_sqe *sqe, int fd, size_t len, off_t offset, std::function<void(std::string_view)> cb);
-       void submit_stat_internal(io_uring_sqe *sqe, char *path, std::function<void()> cb);
+       void submit_stat_internal(io_uring_sqe *sqe, char *path, std::function<void(bool)> cb);
 
        io_uring ring;
 #endif
@@ -49,7 +48,7 @@ private:
 
        struct QueuedStat {
                char *pathname;  // Owned by us.
-               std::function<void()> cb;
+               std::function<void(bool)> cb;
        };
        std::queue<QueuedStat> queued_stats;
 
@@ -60,7 +59,7 @@ private:
                Op op;
 
                std::function<void(std::string_view)> read_cb;
-               std::function<void()> stat_cb;
+               std::function<void(bool)> stat_cb;
 
                union {
                        struct {
@@ -83,8 +82,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)