diff --git a/emper/io/Future.hpp b/emper/io/Future.hpp
index 06f9b45609f8354606a7f4c493f379e1cc56daaf..04999b92be6abebf1f690169c03679f21229e036 100644
--- a/emper/io/Future.hpp
+++ b/emper/io/Future.hpp
@@ -112,6 +112,11 @@ class Future : public Logger<LogSubsystem::IO> {
 
 	virtual void prepareSqe(io_uring_sqe* sqe) = 0;
 
+	void submitAndForget() {
+		state.forgotten = true;
+		submit();
+	}
+
 	void setCompletion(int32_t res) {
 		assert(!state.completed);
 		LOGD("Complete " << this);
@@ -578,10 +583,7 @@ class CloseFuture : public Future {
  public:
 	CloseFuture(int fildes) : Future(Operation::CLOSE, fildes, nullptr, 0, 0){};
 
-	void submitAndForget() {
-		state.forgotten = true;
-		submit();
-	}
+	void submitAndForget() { Future::submitAndForget(); }
 };
 
 /*
@@ -647,4 +649,17 @@ class CancelWrapper : public Future {
  public:
 	CancelWrapper(Future& future) : Future(Operation::CANCEL, 0, &future, 0, 0){};
 };
+
+/*
+ * @brief Request a madvise operation
+ */
+class MadviseFuture : public Future {
+	void prepareSqe(io_uring_sqe* sqe) override { io_uring_prep_madvise(sqe, buf, len, flags); }
+
+ public:
+	MadviseFuture(void* addr, size_t len, int advise)
+			: Future(Operation::MADVISE, 0, addr, len, advise){};
+
+	void submitAndForget() { Future::submitAndForget(); }
+};
 }	 // namespace emper::io
diff --git a/emper/io/Operation.cpp b/emper/io/Operation.cpp
index e881f1b1ab7cb5a39d03317d5b0f5e028e85f876..72cd9fef3faa146a59801838f7e37ca6560d7144 100644
--- a/emper/io/Operation.cpp
+++ b/emper/io/Operation.cpp
@@ -44,6 +44,9 @@ auto operator<<(std::ostream& os, const Operation& op) -> std::ostream& {
 		case Operation::CANCEL:
 			os << "cancel";
 			break;
+		case Operation::MADVISE:
+			os << "madvise";
+			break;
 		default:
 			abort();
 	}
diff --git a/emper/io/Operation.hpp b/emper/io/Operation.hpp
index d193b1cf4c5b0a357e8716eaaaa5d511c692e6b3..8a9d22c319b535073a711ce75bd3459c3681006f 100644
--- a/emper/io/Operation.hpp
+++ b/emper/io/Operation.hpp
@@ -19,6 +19,7 @@ enum class Operation {
 	LINK_TIMEOUT,
 	TIMEOUT,
 	CANCEL,
+	MADVISE,
 	NUMBER_OF_OPERATIONS
 };