Skip to content

Implemented io-uring Op<Statx> and applied to read_uring and fs::try_exists - #8080

Merged
Daksh14 merged 11 commits into
tokio-rs:masterfrom
asder8215:io-uring-metadata
Jun 13, 2026
Merged

Daksh14 merged 11 commits into
tokio-rs:masterfrom
asder8215:io-uring-metadata

Conversation

@asder8215

Copy link
Copy Markdown
Contributor

Motivation

This builds up on vrtgs PR in their attempt of implementing Statx for io-uring and apply it to fs::try_exists. I used libc instead of linux-raw-sys for the Statx implementation, tried to preserve more of how the original code (prior to vrtgs' changes) looked in certain files. There are some inlining done for the metadata functions for Statx because I thought the body of the code in these functions were pretty small and didn't seem to involve generics (let me know if I should remove that). Some other review comments mentioned in review of vrtgs' PR is addressed such as safety comments, inlining for the try_exists_uring, avoiding using CString literals, etc.

To note, this is my first time contributing to Tokio, so let me know if there's anything that I'm doing incorrectly or if I missed something as per procedure here. Let me know if I should also squash some commits as well.

ccing @Daksh14 since I got to working on this PR per him sharing vrtgs' PR with me.

Comment thread tokio/src/io/uring/statx.rs Resolved
@mattiapitossi mattiapitossi added A-tokio Area: The main tokio crate T-io-uring Topic: Linux io_uring M-fs Module: tokio/fs labels Apr 21, 2026
@asder8215
asder8215 force-pushed the io-uring-metadata branch 3 times, most recently from ff8130b to dd9a2c3 Compare April 21, 2026 23:14
@asder8215

asder8215 commented Apr 22, 2026 •

Copy link
Copy Markdown
Contributor Author

Any reason why libc statx constants are not found for Linux 7.0?

image

Comment thread tokio/src/fs/read.rs Resolved
@Darksonn

Darksonn commented Apr 23, 2026 •

Copy link
Copy Markdown
Member

The compilation error is probably related to whether the build is using gnu or musl libc. See rust-lang/rust#154981 with similar issue.

Comment thread tokio/src/fs/try_exists.rs Resolved
Comment thread tokio/src/io/uring/statx.rs Resolved
Comment thread tokio/src/fs/open_options.rs Resolved
Comment thread tokio/src/io/uring/utils.rs Resolved
Comment thread tokio/src/io/uring/statx.rs Resolved
@asder8215
asder8215 force-pushed the io-uring-metadata branch from b474ac9 to 4e5c5d3 Compare May 4, 2026 20:49
@asder8215
asder8215 requested review from Daksh14 and martin-g May 4, 2026 20:49
@asder8215
asder8215 force-pushed the io-uring-metadata branch from 4e5c5d3 to 0d20ca6 Compare May 4, 2026 20:57
Comment thread tokio/tests/fs_uring_statx.rs Resolved
Comment thread tokio/src/fs/try_exists.rs Resolved
@asder8215
asder8215 force-pushed the io-uring-metadata branch from f7932c4 to 1685fe0 Compare May 12, 2026 23:12
@asder8215
asder8215 requested a review from mattiapitossi May 17, 2026 20:27
Comment thread tokio/tests/fs_uring_statx.rs Resolved
Comment thread tokio/src/io/uring/statx.rs Resolved
@asder8215
asder8215 force-pushed the io-uring-metadata branch 2 times, most recently from 90a1824 to fcb9a10 Compare May 18, 2026 21:52
@asder8215
asder8215 requested a review from mattiapitossi May 18, 2026 22:59
Comment thread tokio/src/io/uring/statx.rs Resolved
@asder8215
asder8215 force-pushed the io-uring-metadata branch 2 times, most recently from 5183b76 to 5824fc1 Compare May 19, 2026 15:36
@asder8215
asder8215 requested a review from mattiapitossi May 19, 2026 15:36
Comment thread tokio/src/fs/open_options.rs Resolved
Comment thread tokio/src/io/uring/statx.rs Resolved
@asder8215
asder8215 force-pushed the io-uring-metadata branch 2 times, most recently from bd7c32f to 7a9e197 Compare June 12, 2026 14:00
@asder8215

Copy link
Copy Markdown
Contributor Author

Is there anything else in this PR that needs to be modified? Or does everything look good?

@asder8215
asder8215 force-pushed the io-uring-metadata branch from 7a9e197 to 9324bbe Compare June 12, 2026 15:17
vrtgs and others added 11 commits June 12, 2026 11:38
…hutdown, stating multiple files, ELOOP, ENAMETOOLONG, EACCES
…statx is supported on 1.25+ musl, and MSRV that uses 1.25 on all *-linux-musl platforms is 1.93
…ble on Linux <5.1, removed stat permission denied test case since it doesn't work on Linux 4.19
… in statx operation, use assert pending in cancel ops
…on platforms that don't support io_uring, removed unnecessary comments, and added TODO on symlink_metadata for when Metadata::from_statx is stabilized
… fd leak test, and removed cfg_io_uring gates (localized the feature gate to the pertinent part of the code that uses it in read_uring)
@asder8215
asder8215 force-pushed the io-uring-metadata branch from 9324bbe to 3a24159 Compare June 12, 2026 15:38
@Daksh14
Daksh14 enabled auto-merge (squash) June 13, 2026 17:07
@Daksh14
Daksh14 self-requested a review June 13, 2026 17:30
@Daksh14
Daksh14 merged commit 7892f60 into tokio-rs:master Jun 13, 2026
239 of 244 checks passed
@asder8215
asder8215 deleted the io-uring-metadata branch June 15, 2026 20:24
ldicarlo pushed a commit to legifrss/legifrss that referenced this pull request Aug 25, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [tokio](https://tokio.rs) ([source](https://github.com/tokio-rs/tokio)) | dependencies | minor | `1.52.3` β†’ `1.53.1` |

---

### Release Notes

<details>
<summary>tokio-rs/tokio (tokio)</summary>

### [`v1.53.1`](https://github.com/tokio-rs/tokio/releases/tag/tokio-1.53.1): Tokio v1.53.1

[Compare Source](tokio-rs/tokio@tokio-1.53.0...tokio-1.53.1)

### 1.53.1 (July 20th, 2026)

##### Fixed

- signal: restore MSRV by removing `OnceLock::wait` from the Windows handler ([#&#8203;8300])

##### Fixed (unstable)

- time: fix alt timer cancellation and insertion race ([#&#8203;8252])

##### Documented

- runtime: remove dead link definition in Runtime::block\_on ([#&#8203;8301])

[#&#8203;8252]: tokio-rs/tokio#8252

[#&#8203;8300]: tokio-rs/tokio#8300

[#&#8203;8301]: tokio-rs/tokio#8301

### [`v1.53.0`](https://github.com/tokio-rs/tokio/releases/tag/tokio-1.53.0): Tokio v1.53.0

[Compare Source](tokio-rs/tokio@tokio-1.52.4...tokio-1.53.0)

### 1.53.0 (July 17th, 2026)

##### Added

- fs: implement `From<OwnedFd>` and `From<OwnedHandle>` for `File` ([#&#8203;8266])
- metrics: add task schedule latency metric ([#&#8203;7986])
- net: add `SocketAddr` methods to Unix sockets ([#&#8203;8144])

##### Changed

- io: add `#[inline]` to IO trait impls for in-memory types ([#&#8203;8242])
- net: implement UCred::pid on FreeBSD ([#&#8203;8086])
- net: support Nuttx target os ([#&#8203;8259])
- signal: refactor global variables on Windows ([#&#8203;8231])
- sync: `mpsc::{Receiver,UnboundedReceiver}` now drops waker on drop, even if there are still senders ([#&#8203;8095])
- taskdump: support taskdumps on s390x ([#&#8203;8192])
- time: add `#[track_caller]` to `timeout_at()` ([#&#8203;8077])
- time: consolidate mutex locks on spurious poll ([#&#8203;8124])
- time: defer waker clone on spurious poll ([#&#8203;8107])
- time: move lazy-registration state into `Sleep` ([#&#8203;8132])
- tracing: remove unnecessary span clone ([#&#8203;8126])

##### Fixed

- io: do not treat zero-length reads as EOF in `Chain` ([#&#8203;8251])
- net: use getpeereid for QNX peer credentials ([#&#8203;8270])
- runtime: avoid illegal state in `FastRand` ([#&#8203;8078])
- sync: wake mpsc receiver when a queued `reserve[_many]` returns permits ([#&#8203;8260])
- taskdump: skip double wake on `Trace::capture`/`Trace::trace_with` ([#&#8203;8043])
- time: avoid stack overflow in runtime constructor ([#&#8203;8093])
- time (alt timer): ensure timers stay in the same runtime after `.reset()` ([#&#8203;8169])

##### IO uring (unstable)

- fs: use io-uring for `fs::try_exists` ([#&#8203;8080])
- fs: use io-uring for renaming files ([#&#8203;7800])
- rt: flush io-uring CQE in case of CQE overflow ([#&#8203;8277])

##### Documented

- docs: clarify cancel safety wording ([#&#8203;8181])
- fs: clarify `create_dir_all` succeeds if path exists ([#&#8203;8149])
- io: add warning about stdout reordering with multiple handles ([#&#8203;8276])
- net: document pipe `try_read*`/`try_write*` readiness behavior ([#&#8203;8032])
- runtime: document interaction with fork() ([#&#8203;8202])
- sync: clarify broadcast lagging semantics ([#&#8203;8239])
- sync: document memory ordering guarantees for Semaphore ([#&#8203;8119])
- task: explain why `yield_now` defers its waker ([#&#8203;8254])
- time: add panic docs to `timeout_at()` ([#&#8203;8077])
- time: fix reversed poll order in timeout doc ([#&#8203;8214])

[#&#8203;7800]: tokio-rs/tokio#7800

[#&#8203;7986]: tokio-rs/tokio#7986

[#&#8203;8032]: tokio-rs/tokio#8032

[#&#8203;8043]: tokio-rs/tokio#8043

[#&#8203;8077]: tokio-rs/tokio#8077

[#&#8203;8078]: tokio-rs/tokio#8078

[#&#8203;8080]: tokio-rs/tokio#8080

[#&#8203;8086]: tokio-rs/tokio#8086

[#&#8203;8093]: tokio-rs/tokio#8093

[#&#8203;8095]: tokio-rs/tokio#8095

[#&#8203;8107]: tokio-rs/tokio#8107

[#&#8203;8119]: tokio-rs/tokio#8119

[#&#8203;8124]: tokio-rs/tokio#8124

[#&#8203;8126]: tokio-rs/tokio#8126

[#&#8203;8132]: tokio-rs/tokio#8132

[#&#8203;8144]: tokio-rs/tokio#8144

[#&#8203;8149]: tokio-rs/tokio#8149

[#&#8203;8169]: tokio-rs/tokio#8169

[#&#8203;8181]: tokio-rs/tokio#8181

[#&#8203;8192]: tokio-rs/tokio#8192

[#&#8203;8193]: tokio-rs/tokio#8193

[#&#8203;8202]: tokio-rs/tokio#8202

[#&#8203;8214]: tokio-rs/tokio#8214

[#&#8203;8231]: tokio-rs/tokio#8231

[#&#8203;8239]: tokio-rs/tokio#8239

[#&#8203;8242]: tokio-rs/tokio#8242

[#&#8203;8251]: tokio-rs/tokio#8251

[#&#8203;8254]: tokio-rs/tokio#8254

[#&#8203;8259]: tokio-rs/tokio#8259

[#&#8203;8260]: tokio-rs/tokio#8260

[#&#8203;8266]: tokio-rs/tokio#8266

[#&#8203;8270]: tokio-rs/tokio#8270

[#&#8203;8276]: tokio-rs/tokio#8276

[#&#8203;8277]: tokio-rs/tokio#8277

### [`v1.52.4`](https://github.com/tokio-rs/tokio/releases/tag/tokio-1.52.4): Tokio v1.52.4

[Compare Source](tokio-rs/tokio@tokio-1.52.3...tokio-1.52.4)

### 1.52.4 (July 16th, 2026)

##### Fixed

- runtime: don't skip the driver when `before_park` schedules work ([#&#8203;8222])

##### Fixed (unstable)

- taskdump: remove crate disambiguators from output ([#&#8203;8264])

[#&#8203;8264]: tokio-rs/tokio#8264

[#&#8203;8222]: tokio-rs/tokio#8222

</details>

---

### Configuration

πŸ“… **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

β™» **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

πŸ”• **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNzEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjE3MS4xIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbXX0=-->

Co-authored-by: renovate <renovate@impure.systems>
Co-authored-by: Luca Di Carlo <luca@noreply.git.impure.systems>
Reviewed-on: https://git.impure.systems/luca/legifrss/pulls/20
ahacop added a commit to ahacop/erwindb that referenced this pull request Sep 28, 2026
[cb skip]

Changes in 1.53.1
-----------------

1.53.1 (July 20th, 2026)
------------------------

Fixed
-----

- signal: restore MSRV by removing `OnceLock::wait` from the Windows handler ([#8300])

Fixed (unstable)
----------------

- time: fix alt timer cancellation and insertion race ([#8252])

Documented
----------

- runtime: remove dead link definition in Runtime::block_on ([#8301])

[#8252]: tokio-rs/tokio#8252
[#8300]: tokio-rs/tokio#8300
[#8301]: tokio-rs/tokio#8301

Changes in 1.53.0
-----------------

1.53.0 (July 17th, 2026)
------------------------

Added
-----

- fs: implement `From<OwnedFd>` and `From<OwnedHandle>` for `File` ([#8266])
- metrics: add task schedule latency metric ([#7986])
- net: add `SocketAddr` methods to Unix sockets ([#8144])

Changed
-------

- io: add `#[inline]` to IO trait impls for in-memory types ([#8242])
- net: implement UCred::pid on FreeBSD ([#8086])
- net: support Nuttx target os ([#8259])
- signal: refactor global variables on Windows ([#8231])
- sync: `mpsc::{Receiver,UnboundedReceiver}` now drops waker on drop, even if there are still senders ([#8095])
- taskdump: support taskdumps on s390x ([#8192])
- time: add `#[track_caller]` to `timeout_at()` ([#8077])
- time: consolidate mutex locks on spurious poll ([#8124])
- time: defer waker clone on spurious poll ([#8107])
- time: move lazy-registration state into `Sleep` ([#8132])
- tracing: remove unnecessary span clone ([#8126])

Fixed
-----

- io: do not treat zero-length reads as EOF in `Chain` ([#8251])
- net: use getpeereid for QNX peer credentials ([#8270])
- runtime: avoid illegal state in `FastRand` ([#8078])
- sync: wake mpsc receiver when a queued `reserve[_many]` returns permits ([#8260])
- taskdump: skip double wake on `Trace::capture`/`Trace::trace_with` ([#8043])
- time: avoid stack overflow in runtime constructor ([#8093])
- time (alt timer): ensure timers stay in the same runtime after `.reset()` ([#8169])

IO uring (unstable)
-------------------

- fs: use io-uring for `fs::try_exists` ([#8080])
- fs: use io-uring for renaming files ([#7800])
- rt: flush io-uring CQE in case of CQE overflow ([#8277])

Documented
----------

- docs: clarify cancel safety wording ([#8181])
- fs: clarify `create_dir_all` succeeds if path exists ([#8149])
- io: add warning about stdout reordering with multiple handles ([#8276])
- net: document pipe `try_read*`/`try_write*` readiness behavior ([#8032])
- runtime: document interaction with fork() ([#8202])
- sync: clarify broadcast lagging semantics ([#8239])
- sync: document memory ordering guarantees for Semaphore ([#8119])
- task: explain why `yield_now` defers its waker ([#8254])
- time: add panic docs to `timeout_at()` ([#8077])
- time: fix reversed poll order in timeout doc ([#8214])

[#7800]: tokio-rs/tokio#7800
[#7986]: tokio-rs/tokio#7986
[#8032]: tokio-rs/tokio#8032
[#8043]: tokio-rs/tokio#8043
[#8077]: tokio-rs/tokio#8077
[#8078]: tokio-rs/tokio#8078
[#8080]: tokio-rs/tokio#8080
[#8086]: tokio-rs/tokio#8086
[#8093]: tokio-rs/tokio#8093
[#8095]: tokio-rs/tokio#8095
[#8107]: tokio-rs/tokio#8107
[#8119]: tokio-rs/tokio#8119
[#8124]: tokio-rs/tokio#8124
[#8126]: tokio-rs/tokio#8126
[#8132]: tokio-rs/tokio#8132
[#8144]: tokio-rs/tokio#8144
[#8149]: tokio-rs/tokio#8149
[#8169]: tokio-rs/tokio#8169
[#8181]: tokio-rs/tokio#8181
[#8192]: tokio-rs/tokio#8192
[#8193]: tokio-rs/tokio#8193
[#8202]: tokio-rs/tokio#8202
[#8214]: tokio-rs/tokio#8214
[#8231]: tokio-rs/tokio#8231
[#8239]: tokio-rs/tokio#8239
[#8242]: tokio-rs/tokio#8242
[#8251]: tokio-rs/tokio#8251
[#8254]: tokio-rs/tokio#8254
[#8259]: tokio-rs/tokio#8259
[#8260]: tokio-rs/tokio#8260
[#8266]: tokio-rs/tokio#8266
[#8270]: tokio-rs/tokio#8270
[#8276]: tokio-rs/tokio#8276
[#8277]: tokio-rs/tokio#8277

Changes in 1.52.4
-----------------

1.52.4 (July 16th, 2026)
------------------------

Fixed
-----

- runtime: don't skip the driver when `before_park` schedules work ([#8222])

Fixed (unstable)
----------------

- taskdump: remove crate disambiguators from output ([#8264])

[#8264]: tokio-rs/tokio#8264
[#8222]: tokio-rs/tokio#8222

Changes in 1.52.3
-----------------

1.52.3 (May 8th, 2026)
----------------------

Fixed
-----

* sync: fix underflow in mpsc channel `len()` ([#8062])
* sync: notify receivers in mpsc `OwnedPermit::release()` method ([#8075])
* sync: require that an `RwLock` has `max_readers != 0` ([#8076])
* sync: return `Empty` from `try_recv()` when mpsc is closed with outstanding permits ([#8074])

[#8062]: tokio-rs/tokio#8062
[#8074]: tokio-rs/tokio#8074
[#8075]: tokio-rs/tokio#8075
[#8076]: tokio-rs/tokio#8076

Changes in 1.52.2
-----------------

1.52.2 (May 4th, 2026)
----------------------

This release reverts the LIFO slot stealing change introduced in 1.51.0 ([#7431]), due to [its performance impact][#8065]. ([#8100])

[#7431]: tokio-rs/tokio#7431
[#8065]: tokio-rs/tokio#8065
[#8100]: tokio-rs/tokio#8100

Changes in 1.52.1
-----------------

1.52.1 (April 16th, 2026)
-------------------------

Fixed
-----

- runtime: revert [#7757] to fix [a regression][#8056] that causes `spawn_blocking` to hang ([#8057])

[#7757]: tokio-rs/tokio#7757
[#8056]: tokio-rs/tokio#8056
[#8057]: tokio-rs/tokio#8057

Changes in 1.52.0
-----------------

1.52.0 (April 14th, 2026)
-------------------------

Added
-----

- io: `AioSource::register_borrowed` for I/O safety support ([#7992])
- net: add `try_io` function to `unix::pipe` sender and receiver types ([#8030])

Added (unstable)
----------------

- runtime: `Builder::enable_eager_driver_handoff` setting enable eager hand off of the I/O and time drivers before polling tasks ([#8010])
- taskdump: add `trace_with()` for customized task dumps ([#8025])
- taskdump: allow `impl FnMut()` in `trace_with` instead of just `fn()` ([#8040])
- fs: support `io_uring` in `AsyncRead` for `File` ([#7907])

Changed
-------

- runtime: improve `spawn_blocking` scalability with sharded queue ([#7757])
- runtime: use `compare_exchange_weak()` in worker queue ([#8028])

Fixed
-----

- runtime: overflow second half of tasks when local queue is filled instead of first half ([#8029])

Documented
----------

- docs: fix typo in `oneshot::Sender::send` docs ([#8026])
- docs: hide #[tokio::main] attribute in the docs of `sync::watch` ([#8035])
- net: add docs on `ConnectionRefused` errors with UDP sockets ([#7870])

[#7757]: tokio-rs/tokio#7757
[#7870]: tokio-rs/tokio#7870
[#7907]: tokio-rs/tokio#7907
[#7992]: tokio-rs/tokio#7992
[#8010]: tokio-rs/tokio#8010
[#8025]: tokio-rs/tokio#8025
[#8026]: tokio-rs/tokio#8026
[#8028]: tokio-rs/tokio#8028
[#8029]: tokio-rs/tokio#8029
[#8030]: tokio-rs/tokio#8030
[#8035]: tokio-rs/tokio#8035
[#8040]: tokio-rs/tokio#8040

Changes in 1.51.4
-----------------

1.51.4 (July 16th, 2026)
------------------------

Fixed
-----

- runtime: don't skip the driver when `before_park` schedules work ([#8222])

[#8222]: tokio-rs/tokio#8222

Changes in 1.51.3
-----------------

1.51.3 (May 8th, 2026)
----------------------

Fixed
-----

* sync: fix underflow in mpsc channel `len()` ([#8062])
* sync: notify receivers in mpsc `OwnedPermit::release()` method ([#8075])
* sync: require that an `RwLock` has `max_readers != 0` ([#8076])
* sync: return `Empty` from `try_recv()` when mpsc is closed with outstanding permits ([#8074])

[#8062]: tokio-rs/tokio#8062
[#8074]: tokio-rs/tokio#8074
[#8075]: tokio-rs/tokio#8075
[#8076]: tokio-rs/tokio#8076

Changes in 1.51.2
-----------------

1.51.2 (May 4th, 2026)
----------------------

This release reverts the LIFO slot stealing change introduced in 1.51.0 ([#7431]), due to [its performance impact][#8065]. ([#8100])

[#7431]: tokio-rs/tokio#7431
[#8065]: tokio-rs/tokio#8065
[#8100]: tokio-rs/tokio#8100

Changes in 1.51.1
-----------------

1.51.1 (April 8th, 2026)
------------------------

Fixed
-----

- sync: fix semaphore reopens after forget ([#8021])
- net: surface errors from `SO_ERROR` on `recv` for UDP sockets on Linux ([#8001])

Fixed (unstable)
----------------

- metrics: fix `worker_local_schedule_count` test ([#8008])
- rt: do not leak fd when cancelling io\_uring open operation ([#7983])

[#7983]: tokio-rs/tokio#7983
[#8001]: tokio-rs/tokio#8001
[#8008]: tokio-rs/tokio#8008
[#8021]: tokio-rs/tokio#8021

Changes in 1.51.0
-----------------

1.51.0 (April 3rd, 2026)
------------------------

Added
-----

- net: implement `get_peer_cred` on Hurd ([#7989])
- runtime: add `tokio::runtime::worker_index()` ([#7921])
- runtime: add runtime name ([#7924])
- runtime: stabilize `LocalRuntime` ([#7557])
- wasm: add wasm32-wasip2 networking support ([#7933])

Changed
-------

- runtime: steal tasks from the LIFO slot ([#7431])

Fixed
-----

- docs: do not show "Available on non-loom only." doc label ([#7977])
- macros: improve overall macro hygiene ([#7997])
- sync: fix `notify_waiters` priority in `Notify` ([#7996])
- sync: fix panic in `Chan::recv_many` when called with non-empty vector on closed channel ([#7991])

[#7431]: tokio-rs/tokio#7431
[#7557]: tokio-rs/tokio#7557
[#7921]: tokio-rs/tokio#7921
[#7924]: tokio-rs/tokio#7924
[#7933]: tokio-rs/tokio#7933
[#7977]: tokio-rs/tokio#7977
[#7989]: tokio-rs/tokio#7989
[#7991]: tokio-rs/tokio#7991
[#7996]: tokio-rs/tokio#7996
[#7997]: tokio-rs/tokio#7997

Changes in 1.50.0
-----------------

1.50.0 (Mar 3rd, 2026)
----------------------

Added
-----

- net: add `TcpStream::set_zero_linger` ([#7837])
- rt: add `is_rt_shutdown_err` ([#7771])

Changed
-------

- io: add optimizer hint that `memchr` returns in-bounds pointer ([#7792])
- io: implement vectored writes for `write_buf` ([#7871])
- runtime: panic when `event_interval` is set to 0 ([#7838])
- runtime: shorten default thread name to fit in Linux limit ([#7880])
- signal: remember the result of `SetConsoleCtrlHandler` ([#7833])
- signal: specialize windows `Registry` ([#7885])

Fixed
-----

- io: always cleanup `AsyncFd` registration list on deregister ([#7773])
- macros: remove (most) local `use` declarations in `tokio::select!` ([#7929])
- net: fix `GET_BUF_SIZE` constant for `target_os = "android"` ([#7889])
- runtime: avoid redundant unpark in current_thread scheduler ([#7834])
- runtime: don't park in `current_thread` if `before_park` defers waker ([#7835])
- io: fix write readiness on ESP32 on short writes ([#7872])
- runtime: wake deferred tasks before entering `block_in_place` ([#7879])
- sync: drop rx waker when oneshot receiver is dropped ([#7886])
- runtime: fix double increment of `num_idle_threads` on shutdown ([#7910], [#7918], [#7922])

Unstable
--------

- fs: check for io-uring opcode support ([#7815])
- runtime: avoid lock acquisition after uring init ([#7850])

Documented
----------

- docs: update outdated unstable features section ([#7839])
- io: clarify the behavior of `AsyncWriteExt::shutdown()` ([#7908])
- io: explain how to flush stdout/stderr ([#7904])
- io: fix incorrect and confusing `AsyncWrite` documentation ([#7875])
- rt: clarify the documentation of `Runtime::spawn` ([#7803])
- rt: fix missing quotation in docs ([#7925])
- runtime: correct the default thread name in docs ([#7896])
- runtime: fix `event_interval` doc ([#7932])
- sync: clarify RwLock fairness documentation ([#7919])
- sync: clarify that `recv` returns `None` once closed and no more messages ([#7920])
- task: clarify when to use `spawn_blocking` vs dedicated threads ([#7923])
- task: doc that task drops before `JoinHandle` completion ([#7825])
- signal: guarantee that listeners never return `None` ([#7869])
- task: fix task module feature flags in docs ([#7891])
- task: fix two typos ([#7913])
- task: improve the docs of `Builder::spawn_local` ([#7828])
- time: add docs about auto-advance and when to use sleep ([#7858])
- util: fix typo in docs ([#7926])

[#7771]: tokio-rs/tokio#7771
[#7773]: tokio-rs/tokio#7773
[#7792]: tokio-rs/tokio#7792
[#7803]: tokio-rs/tokio#7803
[#7815]: tokio-rs/tokio#7815
[#7825]: tokio-rs/tokio#7825
[#7828]: tokio-rs/tokio#7828
[#7833]: tokio-rs/tokio#7833
[#7834]: tokio-rs/tokio#7834
[#7835]: tokio-rs/tokio#7835
[#7837]: tokio-rs/tokio#7837
[#7838]: tokio-rs/tokio#7838
[#7839]: tokio-rs/tokio#7839
[#7850]: tokio-rs/tokio#7850
[#7858]: tokio-rs/tokio#7858
[#7869]: tokio-rs/tokio#7869
[#7871]: tokio-rs/tokio#7871
[#7872]: tokio-rs/tokio#7872
[#7875]: tokio-rs/tokio#7875
[#7879]: tokio-rs/tokio#7879
[#7880]: tokio-rs/tokio#7880
[#7885]: tokio-rs/tokio#7885
[#7886]: tokio-rs/tokio#7886
[#7889]: tokio-rs/tokio#7889
[#7891]: tokio-rs/tokio#7891
[#7896]: tokio-rs/tokio#7896
[#7904]: tokio-rs/tokio#7904
[#7908]: tokio-rs/tokio#7908
[#7910]: tokio-rs/tokio#7910
[#7913]: tokio-rs/tokio#7913
[#7918]: tokio-rs/tokio#7918
[#7919]: tokio-rs/tokio#7919
[#7920]: tokio-rs/tokio#7920
[#7922]: tokio-rs/tokio#7922
[#7923]: tokio-rs/tokio#7923
[#7925]: tokio-rs/tokio#7925
[#7926]: tokio-rs/tokio#7926
[#7929]: tokio-rs/tokio#7929
[#7932]: tokio-rs/tokio#7932

Release notes:
- 1.53.1: https://github.com/tokio-rs/tokio/releases/tag/tokio-1.53.1
- 1.53.0: https://github.com/tokio-rs/tokio/releases/tag/tokio-1.53.0
- 1.52.4: https://github.com/tokio-rs/tokio/releases/tag/tokio-1.52.4
- 1.52.3: https://github.com/tokio-rs/tokio/releases/tag/tokio-1.52.3
- 1.52.2: https://github.com/tokio-rs/tokio/releases/tag/tokio-1.52.2
- 1.52.1: https://github.com/tokio-rs/tokio/releases/tag/tokio-1.52.1
- 1.52.0: https://github.com/tokio-rs/tokio/releases/tag/tokio-1.52.0
- 1.51.4: https://github.com/tokio-rs/tokio/releases/tag/tokio-1.51.4
- 1.51.3: https://github.com/tokio-rs/tokio/releases/tag/tokio-1.51.3
- 1.51.2: https://github.com/tokio-rs/tokio/releases/tag/tokio-1.51.2
- 1.51.1: https://github.com/tokio-rs/tokio/releases/tag/tokio-1.51.1
- 1.51.0: https://github.com/tokio-rs/tokio/releases/tag/tokio-1.51.0
- 1.50.0: https://github.com/tokio-rs/tokio/releases/tag/tokio-1.50.0

---

Transitive Dependencies
-----------------------

- libc (0.2.180 -> 0.2.189)
- mio (1.1.1 -> 1.2.3)
- socket2 (0.6.2 -> 0.6.5)
- syn 3.0.6 (added)
- tokio-macros (2.6.0 -> 2.7.2)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-tokio Area: The main tokio crate M-fs Module: tokio/fs T-io-uring Topic: Linux io_uring

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants