X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ceph%2Fsrc%2Fmds%2FCInode.cc;fp=ceph%2Fsrc%2Fmds%2FCInode.cc;h=e8c1bc8bc1e3ece37bf17a1cb156ec83e76a2ddd;hb=f64942e41c1f59e95cdc1205bbe5d32ed6dfd429;hp=8ba75de12c816b683c3d699c50b484f7b3c172e7;hpb=fc2b1783e3727b66315cc667af9d663d30fe7ed4;p=ceph.git diff --git a/ceph/src/mds/CInode.cc b/ceph/src/mds/CInode.cc index 8ba75de12..e8c1bc8bc 100644 --- a/ceph/src/mds/CInode.cc +++ b/ceph/src/mds/CInode.cc @@ -420,7 +420,10 @@ void CInode::pop_and_dirty_projected_inode(LogSegment *ls) int64_t old_pool = inode.layout.pool_id; mark_dirty(front.inode.version, ls); + bool new_export_pin = inode.export_pin != front.inode.export_pin; inode = front.inode; + if (new_export_pin) + maybe_export_pin(true); if (inode.is_backtrace_updated()) mark_dirty_parent(ls, old_pool != inode.layout.pool_id); @@ -4514,7 +4517,6 @@ void CInode::set_export_pin(mds_rank_t rank) assert(is_dir()); assert(is_projected()); get_projected_inode()->export_pin = rank; - maybe_export_pin(true); } mds_rank_t CInode::get_export_pin(bool inherit) const @@ -4528,15 +4530,14 @@ mds_rank_t CInode::get_export_pin(bool inherit) const while (true) { if (in->is_system()) break; - const CDentry *pdn = in->get_projected_parent_dn(); + const CDentry *pdn = in->get_parent_dn(); if (!pdn) break; - const mempool_inode *pi = in->get_projected_inode(); // ignore export pin for unlinked directory - if (pi->nlink == 0) + if (in->get_inode().nlink == 0) break; - if (pi->export_pin >= 0) - return pi->export_pin; + if (in->get_inode().export_pin >= 0) + return in->get_inode().export_pin; if (!inherit) break;