Currently cloning a buffer table will fail if the destination already has a table. But it should be possible to use it to replace existing elements. Add a IORING_REGISTER_DST_REPLACE cloning flag, which if set, will allow the destination to already having a buffer table. If that is the case, then entries designated by offset + nr buffers will be replaced if they already exist. Note that it's allowed to use IORING_REGISTER_DST_REPLACE and not have an existing table, in which case it'll work just like not having the flag set and an empty table - it'll just assign the newly created table for that case.
Showing the changes to include/uapi (1 of 2 files). Show all
Unified · Split
| @@ -713,7 +713,8 @@ struct io_uring_clock_register { · 712 unmodified lines | |||
| 713 | }; | 713 | }; |
| 714 | 714 | ||
| 715 | enum { | 715 | enum { |
| 716 | IORING_REGISTER_SRC_REGISTERED = 1, | 716 | IORING_REGISTER_SRC_REGISTERED = (1U << 0), |
| 717 | IORING_REGISTER_DST_REPLACE = (1U << 1), | ||
| 717 | }; | 718 | }; |
| 718 | 719 | ||
| 719 | struct io_uring_clone_buffers { | 720 | struct io_uring_clone_buffers { |