From: Xiubo Li Date: Tue, 19 Apr 2022 06:21:49 +0000 (+0800) Subject: mds: trigger to flush the mdlog in handle_find_ino() X-Git-Tag: v16.2.11~481^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a43e4180c337bd905c77c31544c994ac3ae123c1;p=ceph.git mds: trigger to flush the mdlog in handle_find_ino() If the the CInode was just created by using openc in current auth MDS, but the client just sends a getattr request to another replica MDS. Then here it will make a path of '#INODE-NUMBER' only because the CInode hasn't been linked yet, and the replica MDS will keep retrying until the auth MDS flushes the mdlog and the C_MDS_openc_finish and link_primary_inode are called at most 5 seconds later. Fixes: https://tracker.ceph.com/issues/55240 Signed-off-by: Xiubo Li (cherry picked from commit 5d6dd5d1acf94eade4a2c0f48777c95473d454ae) --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index b87121914d44..d6f19697f8a1 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -9317,6 +9317,19 @@ void MDCache::handle_find_ino(const cref_t &m) if (in) { in->make_path(r->path); dout(10) << " have " << r->path << " " << *in << dendl; + + /* + * If the the CInode was just created by using openc in current + * auth MDS, but the client just sends a getattr request to another + * replica MDS. Then here it will make a path of '#INODE-NUMBER' + * only because the CInode hasn't been linked yet, and the replica + * MDS will keep retrying until the auth MDS flushes the mdlog and + * the C_MDS_openc_finish and link_primary_inode are called at most + * 5 seconds later. + */ + if (!in->get_parent_dn() && in->is_auth()) { + mds->mdlog->flush(); + } } mds->send_message_mds(r, mds_rank_t(m->get_source().num())); }