This works just like openat(2), except it can be performed async. For the normal case of a non-blocking path lookup this will complete inline. If we have to do IO to perform the open, it'll be done from async context.
Showing the changes to include/uapi/linux (1 of 2 files). Show all
Unified · Split
| @@ -34,6 +34,7 @@ struct io_uring_sqe { · 33 unmodified lines | |||
| 34 | __u32 timeout_flags; | 34 | __u32 timeout_flags; |
| 35 | __u32 accept_flags; | 35 | __u32 accept_flags; |
| 36 | __u32 cancel_flags; | 36 | __u32 cancel_flags; |
| 37 | __u32 open_flags; | ||
| 37 | }; | 38 | }; |
| 38 | __u64 user_data; /* data to be passed back at completion time */ | 39 | __u64 user_data; /* data to be passed back at completion time */ |
| 39 | union { | 40 | union { |
| @@ -77,6 +78,7 @@ enum { · 37 unmodified lines | |||
| 77 | IORING_OP_LINK_TIMEOUT, | 78 | IORING_OP_LINK_TIMEOUT, |
| 78 | IORING_OP_CONNECT, | 79 | IORING_OP_CONNECT, |
| 79 | IORING_OP_FALLOCATE, | 80 | IORING_OP_FALLOCATE, |
| 81 | IORING_OP_OPENAT, | ||
| 80 | 82 | ||
| 81 | /* this goes last, obviously */ | 83 | /* this goes last, obviously */ |
| 82 | IORING_OP_LAST, | 84 | IORING_OP_LAST, |