This is v2 of this patchset, but this one takes a different approach. I wasn't that crazy about adding a separate io-wq so each io_ring needs to have two, so this one instead adds specific support to io-wq for bounded and unbounded work. io_wq_create() now takes both limits, and any user of this must set work->flags |= IO_WQ_WORK_UNBOUND to queue unbounded work. By default, work is assumed to be bounded. Patch 1 is just a cleanup I found while doing this, patch 2 adds the necessary io-wq support, and patch 3 is now much simpler and basically just adds the switch table from before without having to do anything else. fs/io-wq.c | 242 ++++++++++++++++++++++++++++++++++---------------- fs/io-wq.h | 4 +- fs/io_uring.c | 22 ++++- 3 files changed, 184 insertions(+), 84 deletions(-) -- Jens Axboe