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.

Signed-off-by: Jens Axboe <[email protected]>
---
 fs/aio.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/fs/aio.c b/fs/aio.c
index 681f2072f81b..533cb7b1112f 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -1887,6 +1887,12 @@ static int io_submit_one(struct kioctx *ctx, struct iocb 
__user *user_iocb,
        return ret;
 }
 
+/*
+ * 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
+
 /* sys_io_submit:
  *     Queue the nr iocbs pointed to by iocbpp for processing.  Returns
  *     the number of iocbs queued.  May return -EINVAL if the aio_context
@@ -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