]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: make take_ino just return 0 if it can't find one
authorJeff Layton <jlayton@redhat.com>
Mon, 25 Nov 2019 16:19:22 +0000 (11:19 -0500)
committerJeff Layton <jlayton@redhat.com>
Sat, 11 Jan 2020 12:11:47 +0000 (07:11 -0500)
...and drop some unnecessary asserts. Let the callers do that.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
src/mds/Server.cc
src/mds/SessionMap.h

index f9098e002d5bbd2f307f7ee310156692ae877642..bd4b409ae693581c3e9ac375462a9642fff97886 100644 (file)
@@ -3165,11 +3165,8 @@ CInode* Server::prepare_new_inode(MDRequestRef& mdr, CDir *dir, inodeno_t useino
   bool allow_prealloc_inos = mdr->session->is_open();
 
   // assign ino
-  if (allow_prealloc_inos && mdr->session->get_num_prealloc_inos()) {
-    mdr->used_prealloc_ino = 
-      in->inode.ino = mdr->session->take_ino(useino);  // prealloc -> used
+  if (allow_prealloc_inos && (mdr->used_prealloc_ino = in->inode.ino = mdr->session->take_ino(useino))) {
     mds->sessionmap.mark_projected(mdr->session);
-
     dout(10) << "prepare_new_inode used_prealloc " << mdr->used_prealloc_ino
             << " (" << mdr->session->info.prealloc_inos
             << ", " << mdr->session->info.prealloc_inos.size() << " left)"
index da1b30d8b95f648232d79cbe609dca247fe5a1ce..9fec9ded997ae33edb719074fdfc39979d031dc2 100644 (file)
@@ -173,18 +173,13 @@ public:
   }
 
   inodeno_t take_ino(inodeno_t ino = 0) {
-    ceph_assert(!info.prealloc_inos.empty());
-
     if (ino) {
-      if (info.prealloc_inos.contains(ino)) {
-       info.prealloc_inos.erase(ino);
-       if (delegated_inos.contains(ino))
-         delegated_inos.erase(ino);
-      } else {
-       ino = 0;
-      }
-    }
-    if (!ino) {
+      if (!info.prealloc_inos.contains(ino))
+       return 0;
+      info.prealloc_inos.erase(ino);
+      if (delegated_inos.contains(ino))
+       delegated_inos.erase(ino);
+    } else {
       /* Grab first prealloc_ino that isn't delegated */
       for (const auto& [start, len] : info.prealloc_inos) {
        for (auto i = start ; i < start + len ; i += 1) {
@@ -201,8 +196,8 @@ public:
          break;
       }
     }
-    ceph_assert(ino);
-    info.used_inos.insert(ino, 1);
+    if (ino)
+      info.used_inos.insert(ino, 1);
     return ino;
   }
   void delegate_inos(int want, interval_set<inodeno_t>& newinos) {