encode(_symlink, symlink_bl);
op.setxattr("symlink", symlink_bl);
}
+
+ if (remote_inode) {
+ bufferlist remote_inode_bl;
+ encode(remote_inode, remote_inode_bl);
+ op.setxattr("remote_inode", remote_inode_bl);
+ }
}
class CInodeIOContext : public MDSIOContextBase
slink = symlink;
}
+ inodeno_t remote_inode = 0;
+ if (is_referent_remote())
+ remote_inode = get_remote_ino();
+
ops_vec.emplace_back(op_prio, pool, get_inode()->layout,
- mdcache->mds->mdsmap->get_up_features(), slink);
+ mdcache->mds->mdsmap->get_up_features(), slink, remote_inode);
if (!state_test(STATE_DIRTYPOOL) || get_inode()->old_pools.empty() || ignore_old_pools) {
dout(20) << __func__ << ": no dirtypool or no old pools or ignore_old_pools" << dendl;
CInodeCommitOperation(int prio, int64_t po)
: pool(po), priority(prio) {
}
- CInodeCommitOperation(int prio, int64_t po, file_layout_t l, uint64_t f, std::string_view s)
- : pool(po), priority(prio), _layout(l), _features(f), _symlink(s) {
+ CInodeCommitOperation(int prio, int64_t po, file_layout_t l, uint64_t f, std::string_view s, inodeno_t ri)
+ : pool(po), priority(prio), _layout(l), _features(f), _symlink(s), remote_inode(ri) {
update_layout_symlink = true;
}
file_layout_t _layout;
uint64_t _features;
std::string_view _symlink;
+ inodeno_t remote_inode; // real inode of the referent inode
};
struct CInodeCommitOperations {