]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mds: fix InoTable::force_consume_to()
authorYan, Zheng <zyan@redhat.com>
Wed, 31 Jul 2019 02:43:35 +0000 (10:43 +0800)
committerYan, Zheng <zyan@redhat.com>
Wed, 31 Jul 2019 02:47:47 +0000 (10:47 +0800)
original code assumes free inode numbers are contiguous

Fixes: https://tracker.ceph.com/issues/41006
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
src/mds/InoTable.cc

index caa1bfc45310284520b22428180ed2824d801d54..fb0ec29724164844c73808c6ea577518d67675c5 100644 (file)
@@ -226,15 +226,10 @@ bool InoTable::repair(inodeno_t id)
 
 bool InoTable::force_consume_to(inodeno_t ino)
 {
-  auto it = free.begin();
-  if (it != free.end() && it.get_start() <= ino) {
-    inodeno_t min = it.get_start();
-    derr << "erasing " << min << " to " << ino << dendl;
-    free.erase(min, ino - min + 1);
-    projected_free = free;
-    projected_version = ++version;
-    return true;
-  } else {
+  inodeno_t first = free.range_start();
+  if (first > ino)
     return false;
-  }
+
+  skip_inos(inodeno_t(ino + 1 - first));
+  return true;
 }