From: Jeff Layton Date: Mon, 25 Nov 2019 16:19:22 +0000 (-0500) Subject: mds: make take_ino just return 0 if it can't find one X-Git-Tag: v15.1.0~128^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=db62102689227da6514b30f5a437beba7093ada2;p=ceph.git mds: make take_ino just return 0 if it can't find one ...and drop some unnecessary asserts. Let the callers do that. Signed-off-by: Jeff Layton --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index f9098e002d5b..bd4b409ae693 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -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)" diff --git a/src/mds/SessionMap.h b/src/mds/SessionMap.h index da1b30d8b95f..9fec9ded997a 100644 --- a/src/mds/SessionMap.h +++ b/src/mds/SessionMap.h @@ -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& newinos) {