]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix InoTable::force_consume_to() 30041/head
authorYan, Zheng <zyan@redhat.com>
Wed, 31 Jul 2019 02:43:35 +0000 (10:43 +0800)
committerNathan Cutler <ncutler@suse.com>
Fri, 30 Aug 2019 13:58:32 +0000 (15:58 +0200)
original code assumes free inode numbers are contiguous

Fixes: https://tracker.ceph.com/issues/41006
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
(cherry picked from commit e10840ba9ceb9bfae6130d76a93ced2b889fc03f)

src/mds/InoTable.cc

index 43fe380c7895bd7fc11baabd4a5ae0cb6f22c225..dfb6a41d4b057d9a59b39a70bfe10b1261879624 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;
 }