{
  "slug": "io-uring-linked-timeout",
  "term": "io_uring linked timeout",
  "aliases": [
    "IORING_OP_LINK_TIMEOUT",
    "io_uring_prep_link_timeout"
  ],
  "definition": "An io_uring linked timeout is a timer request attached to an operation that can trigger cancellation when its deadline expires.",
  "note": "In the two-request case, the target is marked IOSQE_IO_LINK and followed by the timeout SQE. A timeout CQE with -ECANCELED can mean the timer was disarmed after the target finished, not that the target itself was canceled. [link-timeout-api]\n\nLinux v6.14's io_req_task_link_timeout can attempt cancellation and report its error or -ETIME on a zero return; when no predecessor remains, it can emit -ETIME without that attempt. Check the target's separate result; timer expiry does not undo earlier writes. [timeout-source]\n\nio_uring_wait_cqe_timeout instead bounds a wait for a CQE; expiration of that wait does not establish cancellation of an outstanding operation. [wait-timeout-api]\n\nRead/write payload buffers must remain valid until the target operation completes; submission stability does not shorten that lifetime. [buffer-lifetime]",
  "status": "shipping",
  "advantages": [
    "Associates a deadline with a specific outstanding operation."
  ],
  "limitations": [
    "A deadline is not a transaction rollback or durability guarantee.",
    "This explanation excludes multishot requests, completion suppression, hard-linked chains and nonzero timeout flags."
  ],
  "related": [
    "io-uring",
    "io-uring-cqe",
    "io-uring-linked-requests",
    "io-uring-cancellation",
    "io-timeout"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "updated": "2026-10-17",
  "citations": [
    {
      "id": "link-timeout-api",
      "title": "liburing 2.9: io_uring_prep_link_timeout(3), timeout and cancellation outcomes.",
      "url": "https://github.com/axboe/liburing/blob/liburing-2.9/man/io_uring_prep_link_timeout.3",
      "accessed": "2026-10-17"
    },
    {
      "id": "timeout-source",
      "title": "Linux v6.14: io_req_task_link_timeout and io_disarm_next.",
      "url": "https://github.com/torvalds/linux/blob/v6.14/io_uring/timeout.c",
      "accessed": "2026-10-17"
    },
    {
      "id": "wait-timeout-api",
      "title": "liburing 2.9: io_uring_wait_cqe_timeout(3), waiting result versus operation result.",
      "url": "https://github.com/axboe/liburing/blob/liburing-2.9/man/io_uring_wait_cqe_timeout.3",
      "accessed": "2026-10-17"
    },
    {
      "id": "hesela-uring",
      "title": "io_uring: completion is not a durable commit",
      "url": "https://hesela.com/analyses/io-uring-completion-ordering-durability/#linked-timeout",
      "accessed": "2026-10-17"
    },
    {
      "id": "buffer-lifetime",
      "title": "liburing: io_uring(7), SQE pointer lifetimes and data stability; current manual reviewed 17 October 2026.",
      "url": "https://man7.org/linux/man-pages/man7/io_uring.7.html",
      "accessed": "2026-10-17"
    }
  ]
}
