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 <xiubli@redhat.com>
(cherry picked from commit
5d6dd5d1acf94eade4a2c0f48777c95473d454ae)
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()));
}