mirror of
https://github.com/ceph/ceph
synced 2025-03-30 07:19:14 +00:00
mds: disallow across subvolume rename
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
This commit is contained in:
parent
34c6b4437a
commit
53348ab67f
@ -7878,6 +7878,21 @@ void Server::handle_client_rename(MDRequestRef& mdr)
|
||||
}
|
||||
*/
|
||||
|
||||
SnapRealm *dest_realm = nullptr;
|
||||
SnapRealm *src_realm = nullptr;
|
||||
if (!linkmerge) {
|
||||
dest_realm = destdir->inode->find_snaprealm();
|
||||
if (srcdir->inode == destdir->inode)
|
||||
src_realm = dest_realm;
|
||||
else
|
||||
src_realm = srcdir->inode->find_snaprealm();
|
||||
if (src_realm != dest_realm &&
|
||||
src_realm->get_subvolume_ino() != dest_realm->get_subvolume_ino()) {
|
||||
respond_to_request(mdr, -EXDEV);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
ceph_assert(g_conf()->mds_kill_rename_at != 1);
|
||||
|
||||
// -- open all srcdn inode frags, if any --
|
||||
@ -7927,7 +7942,6 @@ void Server::handle_client_rename(MDRequestRef& mdr)
|
||||
oldin->clear_snaprealm_global(new_srnode);
|
||||
mdr->more()->desti_srnode = new_srnode;
|
||||
} else if (destdnl->is_primary()) {
|
||||
SnapRealm *dest_realm = destdir->inode->find_snaprealm();
|
||||
snapid_t follows = dest_realm->get_newest_seq();
|
||||
if (oldin->snaprealm || follows + 1 > oldin->get_oldest_snap()) {
|
||||
sr_t *new_srnode = oldin->prepare_new_srnode(follows);
|
||||
@ -7937,13 +7951,11 @@ void Server::handle_client_rename(MDRequestRef& mdr)
|
||||
}
|
||||
}
|
||||
if (!mdr->more()->srci_srnode) {
|
||||
SnapRealm *dest_realm = destdir->inode->find_snaprealm();
|
||||
if (srci->is_projected_snaprealm_global()) {
|
||||
sr_t *new_srnode = srci->prepare_new_srnode(0);
|
||||
srci->record_snaprealm_parent_dentry(new_srnode, dest_realm, srcdn, srcdnl->is_primary());
|
||||
mdr->more()->srci_srnode = new_srnode;
|
||||
} else if (srcdnl->is_primary()) {
|
||||
SnapRealm *src_realm = srcdir->inode->find_snaprealm();
|
||||
snapid_t follows = src_realm->get_newest_seq();
|
||||
if (src_realm != dest_realm &&
|
||||
(srci->snaprealm || follows + 1 > srci->get_oldest_snap())) {
|
||||
|
Loading…
Reference in New Issue
Block a user