From 16b823bc03ce7d8be8e59ed311750826489e145b Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 7 Apr 2008 06:25:44 -0700 Subject: [PATCH] mds: simplify link_remote_inode interface slightly --- src/mds/CDentry.cc | 6 +++++- src/mds/CDir.cc | 5 +++++ src/mds/CDir.h | 1 + src/mds/Server.cc | 16 +++++++--------- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/mds/CDentry.cc b/src/mds/CDentry.cc index ce1fd04c14af4..1fb3b6c0d0686 100644 --- a/src/mds/CDentry.cc +++ b/src/mds/CDentry.cc @@ -60,9 +60,13 @@ ostream& operator<<(ostream& out, CDentry& dn) if (dn.is_remote()) { out << " REMOTE("; switch (dn.get_remote_d_type() << 12) { + case S_IFSOCK: out << "sock"; break; + case S_IFLNK: out << "lnk"; break; case S_IFREG: out << "reg"; break; + case S_IFBLK: out << "blk"; break; case S_IFDIR: out << "dir"; break; - case S_IFLNK: out << "lnk"; break; + case S_IFCHR: out << "chr"; break; + case S_IFIFO: out << "fifo"; break; default: assert(0); } out << ")"; diff --git a/src/mds/CDir.cc b/src/mds/CDir.cc index 460fd8999827b..091777d75ffda 100644 --- a/src/mds/CDir.cc +++ b/src/mds/CDir.cc @@ -289,6 +289,11 @@ void CDir::remove_dentry(CDentry *dn) //assert(nnull == null_items.size()); } +void CDir::link_remote_inode(CDentry *dn, CInode *in) +{ + link_remote_inode(dn, in->ino(), MODE_TO_DT(in->get_projected_inode()->mode)); +} + void CDir::link_remote_inode(CDentry *dn, inodeno_t ino, unsigned char d_type) { dout(12) << "link_remote_inode " << *dn << " remote " << ino << dendl; diff --git a/src/mds/CDir.h b/src/mds/CDir.h index dba00547966d4..f1c6fe8b522cd 100644 --- a/src/mds/CDir.h +++ b/src/mds/CDir.h @@ -258,6 +258,7 @@ protected: CDentry* add_remote_dentry(const string& dname, inodeno_t ino, unsigned char d_type); void remove_dentry( CDentry *dn ); // delete dentry void link_remote_inode( CDentry *dn, inodeno_t ino, unsigned char d_type); + void link_remote_inode( CDentry *dn, CInode *in ); void link_primary_inode( CDentry *dn, CInode *in ); void unlink_inode( CDentry *dn ); void try_remove_unlinked_dn(CDentry *dn); diff --git a/src/mds/Server.cc b/src/mds/Server.cc index c101c943a1000..d888fb960eece 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -2155,7 +2155,7 @@ void Server::_link_local_finish(MDRequest *mdr, CDentry *dn, CInode *targeti, dout(10) << "_link_local_finish " << *dn << " to " << *targeti << dendl; // link and unlock the NEW dentry - dn->dir->link_remote_inode(dn, targeti->ino(), MODE_TO_DT(targeti->inode.mode)); + dn->dir->link_remote_inode(dn, targeti); dn->mark_dirty(dnpv, mdr->ls); // target inode @@ -2240,7 +2240,7 @@ void Server::_link_remote_finish(MDRequest *mdr, CDentry *dn, CInode *targeti, dout(10) << "_link_remote_finish " << *dn << " to " << *targeti << dendl; // link the new dentry - dn->dir->link_remote_inode(dn, targeti->ino(), MODE_TO_DT(targeti->inode.mode)); + dn->dir->link_remote_inode(dn, targeti); dn->mark_dirty(dpv, mdr->ls); // dir inode's mtime @@ -3420,7 +3420,7 @@ void Server::_rename_apply(MDRequest *mdr, CDentry *srcdn, CDentry *destdn, CDen if (srcdn->is_remote()) { // srcdn was remote. srcdn->dir->unlink_inode(srcdn); - destdn->dir->link_remote_inode(destdn, in->ino(), MODE_TO_DT(in->inode.mode)); + destdn->dir->link_remote_inode(destdn, in); destdn->link_remote(in); if (destdn->is_auth()) destdn->mark_dirty(mdr->more()->pvmap[destdn], mdr->ls); @@ -3707,16 +3707,16 @@ void Server::_commit_slave_rename(MDRequest *mdr, int r, if (mdr->more()->destdn_was_remote_inode) { destdn->dir->unlink_inode(destdn); srcdn->dir->link_primary_inode(srcdn, in); - destdn->dir->link_remote_inode(destdn, in->ino(), MODE_TO_DT(in->inode.mode)); + destdn->dir->link_remote_inode(destdn, in); } else { - srcdn->dir->link_remote_inode(srcdn, in->ino(), MODE_TO_DT(in->inode.mode)); + srcdn->dir->link_remote_inode(srcdn, in); } } else { // normal // revert srcdn if (destdn->is_remote()) { - srcdn->dir->link_remote_inode(srcdn, destdn->inode->ino(), MODE_TO_DT(destdn->inode->inode.mode)); + srcdn->dir->link_remote_inode(srcdn, destdn->inode); destdn->dir->unlink_inode(destdn); } else { // renamed a primary @@ -3727,9 +3727,7 @@ void Server::_commit_slave_rename(MDRequest *mdr, int r, // revert destdn if (mdr->more()->destdn_was_remote_inode) { - destdn->dir->link_remote_inode(destdn, - mdr->more()->destdn_was_remote_inode->ino(), - MODE_TO_DT(mdr->more()->destdn_was_remote_inode->inode.mode)); + destdn->dir->link_remote_inode(destdn, mdr->more()->destdn_was_remote_inode); mdr->more()->destdn_was_remote_inode->inode.nlink++; } else if (straydn && straydn->inode) { CInode *in = straydn->inode; -- 2.39.5