diff a/src/java.base/linux/classes/jdk/internal/ffi/generated/iouring/epoll_data.java b/src/java.base/linux/classes/jdk/internal/ffi/generated/iouring/epoll_data.java
--- /dev/null
+++ b/src/java.base/linux/classes/jdk/internal/ffi/generated/iouring/epoll_data.java
@@ -0,0 +1,157 @@
+// Generated by jextract
+
+package jdk.internal.ffi.generated.iouring;
+
+import java.lang.invoke.*;
+import java.lang.foreign.*;
+import java.nio.ByteOrder;
+import java.util.*;
+import java.util.function.*;
+import java.util.stream.*;
+
+import static java.lang.foreign.ValueLayout.*;
+import static java.lang.foreign.MemoryLayout.PathElement.*;
+
+/**
+ * {@snippet lang=c :
+ * union epoll_data {
+ *     void *ptr;
+ *     int fd;
+ *     uint32_t u32;
+ *     uint64_t u64;
+ * }
+ * }
+ */
+@SuppressWarnings("restricted") public class epoll_data {
+
+    epoll_data() {
+        // Suppresses public default constructor, ensuring non-instantiability,
+        // but allows generated subclasses in same package.
+    }
+
+    private static final GroupLayout $LAYOUT = MemoryLayout.unionLayout(
+        iouring_h.C_POINTER.withName("ptr"),
+        iouring_h.C_INT.withName("fd"),
+        iouring_h.C_INT.withName("u32"),
+        iouring_h.C_LONG.withName("u64")
+    ).withName("epoll_data");
+
+    public static final GroupLayout $LAYOUT() {
+        return $LAYOUT;
+    }
+
+    private static final long ptr$OFFSET = 0;
+    private static final AddressLayout ptr$LAYOUT = (AddressLayout)$LAYOUT.select(groupElement("ptr"));
+
+    /**
+     * Getter for field:
+     * {@snippet lang=c :
+     * void *ptr
+     * }
+     */
+    public static MemorySegment ptr(MemorySegment union) {
+        return union.get(ptr$LAYOUT, ptr$OFFSET);
+    }
+
+    /**
+     * Setter for field:
+     * {@snippet lang=c :
+     * void *ptr
+     * }
+     */
+    public static void ptr(MemorySegment union, MemorySegment fieldValue) {
+        union.set(ptr$LAYOUT, ptr$OFFSET, fieldValue);
+    }
+
+    private static final long fd$OFFSET = 0;
+    private static final OfInt fd$LAYOUT = (OfInt)$LAYOUT.select(groupElement("fd"));
+
+    /**
+     * Getter for field:
+     * {@snippet lang=c :
+     * int fd
+     * }
+     */
+    public static int fd(MemorySegment union) {
+        return union.get(fd$LAYOUT, fd$OFFSET);
+    }
+
+    /**
+     * Setter for field:
+     * {@snippet lang=c :
+     * int fd
+     * }
+     */
+    public static void fd(MemorySegment union, int fieldValue) {
+        union.set(fd$LAYOUT, fd$OFFSET, fieldValue);
+    }
+
+    private static final long u32$OFFSET = 0;
+    private static final OfInt u32$LAYOUT = (OfInt)$LAYOUT.select(groupElement("u32"));
+
+    /**
+     * Getter for field:
+     * {@snippet lang=c :
+     * uint32_t u32
+     * }
+     */
+    public static int u32(MemorySegment union) {
+        return union.get(u32$LAYOUT, u32$OFFSET);
+    }
+
+    /**
+     * Setter for field:
+     * {@snippet lang=c :
+     * uint32_t u32
+     * }
+     */
+    public static void u32(MemorySegment union, int fieldValue) {
+        union.set(u32$LAYOUT, u32$OFFSET, fieldValue);
+    }
+
+    private static final long u64$OFFSET = 0;
+    private static final OfLong u64$LAYOUT = (OfLong)$LAYOUT.select(groupElement("u64"));
+
+    /**
+     * Getter for field:
+     * {@snippet lang=c :
+     * uint64_t u64
+     * }
+     */
+    public static long u64(MemorySegment union) {
+        return union.get(u64$LAYOUT, u64$OFFSET);
+    }
+
+    /**
+     * Setter for field:
+     * {@snippet lang=c :
+     * uint64_t u64
+     * }
+     */
+    public static void u64(MemorySegment union, long fieldValue) {
+        union.set(u64$LAYOUT, u64$OFFSET, fieldValue);
+    }
+
+    public static MemorySegment asSlice(MemorySegment array, long index) {
+        return array.asSlice($LAYOUT().byteSize() * index);
+    }
+
+    public static long sizeof() { return $LAYOUT().byteSize(); }
+
+    public static MemorySegment allocate(SegmentAllocator allocator) {
+        return allocator.allocate($LAYOUT());
+    }
+
+    public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+        return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, $LAYOUT()));
+    }
+
+    public static MemorySegment reinterpret(MemorySegment addr, Arena scope, Consumer<MemorySegment> cleanup) {
+        return reinterpret(addr, 1, scope, cleanup);
+    }
+
+    public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena scope, Consumer<MemorySegment> cleanup) {
+        return addr.reinterpret($LAYOUT().byteSize() * elementCount, scope, cleanup);
+    }
+}
+
