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 << ")";
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);
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
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
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);
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
// 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;