From: Yan, Zheng Date: Thu, 17 Mar 2016 12:00:36 +0000 (+0800) Subject: mds: avoid scrubbing (CDir*)NULL X-Git-Tag: v10.1.1~105^2~1^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9bdf337f0c841694a361cdba1b0ab34a409b0080;p=ceph.git mds: avoid scrubbing (CDir*)NULL If dirfrags get fragmented in the middle of scrubbing, get_dirfrag() can return NULL. Fixes: #15167 Signed-off-by: Yan, Zheng --- diff --git a/src/mds/ScrubStack.cc b/src/mds/ScrubStack.cc index 1eaddf65fb9..7da1b4bb509 100644 --- a/src/mds/ScrubStack.cc +++ b/src/mds/ScrubStack.cc @@ -146,11 +146,15 @@ void ScrubStack::scrub_dir_inode(CInode *in, ++i) { // turn frags into CDir * CDir *dir = in->get_dirfrag(*i); - scrubbing_cdirs.push_back(dir); - dout(25) << __func__ << " got CDir " << *dir << " presently scrubbing" << dendl; + if (dir) { + scrubbing_cdirs.push_back(dir); + dout(25) << __func__ << " got CDir " << *dir << " presently scrubbing" << dendl; + } else { + in->scrub_dirfrag_finished(*i); + dout(25) << __func__ << " missing dirfrag " << *i << " skip scrubbing" << dendl; + } } - dout(20) << __func__ << " consuming from " << scrubbing_cdirs.size() << " scrubbing cdirs" << dendl;