]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: fix exceeding the max IO queue depth in KernelDevice. 20996/head
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 21 Mar 2018 20:31:38 +0000 (21:31 +0100)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Thu, 22 Mar 2018 18:52:27 +0000 (19:52 +0100)
Fixes: http://tracker.ceph.com/issues/23246
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/os/bluestore/aio.cc

index 3598702dbfd9a8364a980716771e55f32c4ae80d..7e63d5571a4faa5a33f26c9ab85cf915b2a91210 100644 (file)
@@ -1,6 +1,7 @@
 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
 // vim: ts=8 sw=2 smarttab
 
+#include <algorithm>
 #include "aio.h"
 
 std::ostream& operator<<(std::ostream& os, const aio_t& aio)
@@ -34,7 +35,7 @@ int aio_queue_t::submit_batch(aio_iter begin, aio_iter end,
   assert(aios_size >= left);
   int done = 0;
   while (left > 0) {
-    int r = io_submit(ctx, left, piocb + done);
+    int r = io_submit(ctx, std::min(left, max_iodepth), piocb + done);
     if (r < 0) {
       if (r == -EAGAIN && attempts-- > 0) {
        usleep(delay);
@@ -47,6 +48,8 @@ int aio_queue_t::submit_batch(aio_iter begin, aio_iter end,
     assert(r > 0);
     done += r;
     left -= r;
+    attempts = 16;
+    delay = 125;
   }
   return done;
 }