Plugging is meant to optimize submission of a string of IOs, if we don't
have more than 2 being submitted, don't bother setting up a plug.

Reviewed-by: Christoph Hellwig <h...@lst.de>
Signed-off-by: Jens Axboe <ax...@kernel.dk>
---
 fs/aio.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/fs/aio.c b/fs/aio.c
index 522c04864d82..ed6c3914477a 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -69,6 +69,12 @@ struct aio_ring {
        struct io_event         io_events[0];
 }; /* 128 bytes + ring size */
 
+/*
+ * Plugging is meant to work with larger batches of IOs. If we don't
+ * have more than the below, then don't bother setting up a plug.
+ */
+#define AIO_PLUG_THRESHOLD     2
+
 #define AIO_RING_PAGES 8
 
 struct kioctx_table {
@@ -1919,7 +1925,8 @@ SYSCALL_DEFINE3(io_submit, aio_context_t, ctx_id, long, 
nr,
        if (nr > ctx->nr_events)
                nr = ctx->nr_events;
 
-       blk_start_plug(&plug);
+       if (nr > AIO_PLUG_THRESHOLD)
+               blk_start_plug(&plug);
        for (i = 0; i < nr; i++) {
                struct iocb __user *user_iocb;
 
@@ -1932,7 +1939,8 @@ SYSCALL_DEFINE3(io_submit, aio_context_t, ctx_id, long, 
nr,
                if (ret)
                        break;
        }
-       blk_finish_plug(&plug);
+       if (nr > AIO_PLUG_THRESHOLD)
+               blk_finish_plug(&plug);
 
        percpu_ref_put(&ctx->users);
        return i ? i : ret;
@@ -1959,7 +1967,8 @@ COMPAT_SYSCALL_DEFINE3(io_submit, compat_aio_context_t, 
ctx_id,
        if (nr > ctx->nr_events)
                nr = ctx->nr_events;
 
-       blk_start_plug(&plug);
+       if (nr > AIO_PLUG_THRESHOLD)
+               blk_start_plug(&plug);
        for (i = 0; i < nr; i++) {
                compat_uptr_t user_iocb;
 
@@ -1972,7 +1981,8 @@ COMPAT_SYSCALL_DEFINE3(io_submit, compat_aio_context_t, 
ctx_id,
                if (ret)
                        break;
        }
-       blk_finish_plug(&plug);
+       if (nr > AIO_PLUG_THRESHOLD)
+               blk_finish_plug(&plug);
 
        percpu_ref_put(&ctx->users);
        return i ? i : ret;
-- 
2.17.1

Reply via email to