diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,30 @@
 # Revision history for blockio
 
+## 0.2.0.0 -- 2026-05-13
+
+### Breaking changes
+
+* Update to `fs-sim ^>=0.5`. See [PR
+  #845](https://github.com/IntersectMBO/lsm-tree/pull/845).
+* `IOCtxParams` has a new record field for configuring the use of IOWAIT
+  metrics. Like the other configuration options, this option only applies on
+  Linux platforms. See [PR
+  #846](https://github.com/IntersectMBO/lsm-tree/pull/846). For more information
+  about the new option, see the documentation for `blockio-uring`.
+
+### New features
+
+None
+
+### Minor changes
+
+* Support `blockio-uring ^>= 0.2`, and drop support for `blockio-uring ^>= 0.1`.
+  See [PR #846](https://github.com/IntersectMBO/lsm-tree/pull/846)
+
+### Bug fixes
+
+None
+
 ## 0.1.1.2 -- 2026-04-24
 
 ### Breaking changes
diff --git a/blockio.cabal b/blockio.cabal
--- a/blockio.cabal
+++ b/blockio.cabal
@@ -1,6 +1,6 @@
 cabal-version:   3.4
 name:            blockio
-version:         0.1.1.2
+version:         0.2.0.0
 synopsis:        Perform batches of disk I/O operations.
 description:
   Perform batches of disk I\/O operations. Performing batches of disk I\/O can
@@ -46,7 +46,7 @@
   type:     git
   location: https://github.com/IntersectMBO/lsm-tree
   subdir:   blockio
-  tag:      blockio-0.1.1.2
+  tag:      blockio-0.2.0.0
 
 common warnings
   ghc-options:
@@ -101,7 +101,7 @@
 
     if !flag(serialblockio)
       other-modules: System.FS.BlockIO.Async
-      build-depends: blockio-uring ^>=0.1
+      build-depends: blockio-uring ^>=0.2
 
   elif os(osx)
     hs-source-dirs: src-macos
@@ -149,7 +149,7 @@
     , blockio
     , bytestring             ^>=0.11 || ^>=0.12
     , fs-api                 ^>=0.4
-    , fs-sim                 ^>=0.4
+    , fs-sim                 ^>=0.4  || ^>=0.5
     , io-classes             ^>=1.6  || ^>=1.7  || ^>=1.8.0.1 || ^>=1.9 || ^>=1.10
     , io-classes:strict-stm
     , primitive              ^>=0.9
diff --git a/src-linux/System/FS/BlockIO/Async.hs b/src-linux/System/FS/BlockIO/Async.hs
--- a/src-linux/System/FS/BlockIO/Async.hs
+++ b/src-linux/System/FS/BlockIO/Async.hs
@@ -51,10 +51,11 @@
     }
 
 ctxParamsConv :: IOI.IOCtxParams -> I.IOCtxParams
-ctxParamsConv IOI.IOCtxParams{IOI.ioctxBatchSizeLimit, IOI.ioctxConcurrencyLimit} =
+ctxParamsConv IOI.IOCtxParams{IOI.ioctxBatchSizeLimit, IOI.ioctxConcurrencyLimit, IOI.ioctxIOWaitMetrics} =
     I.IOCtxParams {
         I.ioctxBatchSizeLimit   = ioctxBatchSizeLimit
       , I.ioctxConcurrencyLimit = ioctxConcurrencyLimit
+      , I.ioctxIOWaitMetrics    = ioctxIOWaitMetrics
       }
 
 submitIO ::
diff --git a/src-sim/System/FS/BlockIO/Sim.hs b/src-sim/System/FS/BlockIO/Sim.hs
--- a/src-sim/System/FS/BlockIO/Sim.hs
+++ b/src-sim/System/FS/BlockIO/Sim.hs
@@ -207,7 +207,7 @@
 -- If you want to have access to the current state of the mocked file system,
 -- use 'simHasBlockIO' instead.
 runSimHasBlockIO ::
-     (MonadSTM m, PrimMonad m, MonadCatch m, MonadMVar m)
+     (MonadSTM m, PrimMonad m, MonadMask m, MonadMVar m)
   => MockFS
   -> (HasFS m HandleMock -> HasBlockIO m HandleMock -> m a)
   -> m (a, MockFS)
@@ -230,7 +230,7 @@
 -- If you want to have access to the current state of the mocked file system
 -- or stream of errors, use 'simErrorHasBlockIO' instead.
 runSimErrorHasBlockIO ::
-     (MonadSTM m, PrimMonad m, MonadCatch m, MonadMVar m)
+     (MonadSTM m, PrimMonad m, MonadMask m, MonadMVar m)
   => MockFS
   -> Errors
   -> (HasFS m HandleMock -> HasBlockIO m HandleMock -> m a)
@@ -256,7 +256,7 @@
 -- the user by reading @mockFsVar@, but note that the user should not leave
 -- @mockFsVar@ empty.
 simHasBlockIO ::
-     (MonadCatch m, MonadMVar m, PrimMonad m, MonadSTM m)
+     (MonadMask m, MonadMVar m, PrimMonad m, MonadSTM m)
   => StrictTMVar m MockFS
   -> m (HasFS m HandleMock, HasBlockIO m HandleMock)
 simHasBlockIO var = do
@@ -273,7 +273,7 @@
 -- If you want to have access to the current state of the mocked file system,
 -- use 'simHasBlockIO' instead.
 simHasBlockIO' ::
-     (MonadCatch m, MonadMVar m, PrimMonad m, MonadSTM m)
+     (MonadMask m, MonadMVar m, PrimMonad m, MonadSTM m)
   => MockFS
   -> m (HasFS m HandleMock, HasBlockIO m HandleMock)
 simHasBlockIO' mockFS = do
@@ -293,7 +293,7 @@
 -- @errorsVar@. The current state of the stream of errors can be accessed by the
 -- user by reading @errorsVar@.
 simErrorHasBlockIO ::
-     forall m. (MonadCatch m, MonadMVar m, PrimMonad m, MonadSTM m)
+     forall m. (MonadMask m, MonadMVar m, PrimMonad m, MonadSTM m)
   => StrictTMVar m MockFS
   -> StrictTVar m Errors
   -> m (HasFS m HandleMock, HasBlockIO m HandleMock)
@@ -314,7 +314,7 @@
 -- If you want to have access to the current state of the mocked file system
 -- or stream of errors, use 'simErrorHasBlockIO' instead.
 simErrorHasBlockIO' ::
-     (MonadCatch m, MonadMVar m, PrimMonad m, MonadSTM m)
+     (MonadMask m, MonadMVar m, PrimMonad m, MonadSTM m)
   => MockFS
   -> Errors
   -> m (HasFS m HandleMock, HasBlockIO m HandleMock)
diff --git a/src/System/FS/BlockIO/API.hs b/src/System/FS/BlockIO/API.hs
--- a/src/System/FS/BlockIO/API.hs
+++ b/src/System/FS/BlockIO/API.hs
@@ -270,7 +270,7 @@
           synchroniseDirectory hbio path'
         else
           error $ printf
-            "listDirectoryRecursive: %s is not a file or directory"
+            "synchroniseDirectoryRecursive: %s is not a file or directory"
             (show path')
 
 {-------------------------------------------------------------------------------
diff --git a/src/System/FS/BlockIO/IO/Internal.hs b/src/System/FS/BlockIO/IO/Internal.hs
--- a/src/System/FS/BlockIO/IO/Internal.hs
+++ b/src/System/FS/BlockIO/IO/Internal.hs
@@ -42,18 +42,20 @@
 --  them, see the @blockio-uring@ package.
 data IOCtxParams = IOCtxParams {
                      ioctxBatchSizeLimit   :: !Int,
-                     ioctxConcurrencyLimit :: !Int
+                     ioctxConcurrencyLimit :: !Int,
+                     ioctxIOWaitMetrics    :: !Bool
                    }
 
 instance NFData IOCtxParams where
-  rnf (IOCtxParams x y) = rnf x `seq` rnf y
+  rnf (IOCtxParams x y z) = rnf x `seq` rnf y `seq` rnf z
 
 -- | Default parameters. Some manual tuning of parameters might be required to
 -- achieve higher performance targets (see 'IOCtxParams').
 defaultIOCtxParams :: IOCtxParams
 defaultIOCtxParams = IOCtxParams {
       ioctxBatchSizeLimit   = 64,
-      ioctxConcurrencyLimit = 64 * 3
+      ioctxConcurrencyLimit = 64 * 3,
+      ioctxIOWaitMetrics    = True
     }
 
 {-------------------------------------------------------------------------------
