  The overhead of the kernel storage path accounts for half of the access
latency for new NVMe storage devices. We explore using BPF to reduce this
overhead, by injecting user-defined functions deep in the kernel's I/O
processing stack. When issuing a series of dependent I/O requests, this
approach can increase IOPS by over 2.5$\times$ and cut latency by half, by
bypassing kernel layers and avoiding user-kernel boundary crossings. However,
we must avoid losing important properties when bypassing the file system and
block layer such as the safety guarantees of the file system and translation
between physical blocks addresses and file offsets. We sketch potential
solutions to these problems, inspired by exokernel file systems from the late
90s, whose time, we believe, has finally come!
