]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix crash in hash_into_rank_bucket() when max_mds is 0
authorchungfengz <chungfengz@synology.com>
Thu, 16 Apr 2026 06:53:51 +0000 (06:53 +0000)
committerVenky Shankar <vshankar@redhat.com>
Mon, 8 Jun 2026 09:05:19 +0000 (14:35 +0530)
When a CephFS cluster is paused (e.g. via `ceph fs set <fs> down true`
or `ceph fs pause`) the MDS map's max_mds is set to 0.  Any subsequent
call to hash_into_rank_bucket() with max_mds == 0 triggers a crash:
the jump-consistent-hash loop never executes (j starts at 0, condition
j < max_mds is immediately false), leaving b = -1, so the final
assert(result >= 0 && result < max_mds) aborts the daemon.

Fixes: https://tracker.ceph.com/issues/76059
Signed-off-by: chungfengz <chungfengz@synology.com>
src/mds/MDCache.cc

index 308d1304b0427c44b9ae553f5dcdfdbc91b5863a..268f71220695052056065655975c5bbd47ede354 100644 (file)
@@ -940,6 +940,8 @@ MDSCacheObject *MDCache::get_object(const MDSCacheObjectInfo &info)
 mds_rank_t MDCache::hash_into_rank_bucket(inodeno_t ino, frag_t fg)
 {
   const mds_rank_t max_mds = mds->mdsmap->get_max_mds();
+  if (max_mds == 0)
+    return MDS_RANK_NONE;
   uint64_t hash = rjhash64(ino);
   if (fg)
     hash = rjhash64(hash + rjhash64(fg.value()));