Merge branch 'wip-mds'

This commit is contained in:
Sage Weil 2012-11-04 01:02:43 -07:00
commit 2daad206ee
5 changed files with 21 additions and 27 deletions

View File

@ -2554,7 +2554,7 @@ void CInode::replicate_relax_locks()
// =============================================
int CInode::encode_inodestat(bufferlist& bl, Session *session,
SnapRealm *realm,
SnapRealm *dir_realm,
snapid_t snapid, unsigned max_bytes)
{
int client = session->inst.name.num();
@ -2565,7 +2565,8 @@ int CInode::encode_inodestat(bufferlist& bl, Session *session,
bool valid = true;
// do not issue caps if inode differs from readdir snaprealm
bool no_caps = (realm && snaprealm && realm != snaprealm);
SnapRealm *realm = find_snaprealm();
bool no_caps = (realm && dir_realm && realm != dir_realm);
if (no_caps)
dout(20) << "encode_inodestat realm=" << realm << " snaprealm " << snaprealm
<< " no_caps=" << no_caps << dendl;
@ -2724,7 +2725,7 @@ int CInode::encode_inodestat(bufferlist& bl, Session *session,
} else {
if (!no_caps && valid && !cap) {
// add a new cap
cap = add_client_cap(client, session, find_snaprealm());
cap = add_client_cap(client, session, realm);
if (is_auth()) {
if (choose_ideal_loner() >= 0)
try_set_loner();
@ -2747,7 +2748,7 @@ int CInode::encode_inodestat(bufferlist& bl, Session *session,
e.cap.seq = cap->get_last_seq();
dout(10) << "encode_inodestat issueing " << ccap_string(issue) << " seq " << cap->get_last_seq() << dendl;
e.cap.mseq = cap->get_mseq();
e.cap.realm = find_snaprealm()->inode->ino();
e.cap.realm = realm->inode->ino();
} else {
e.cap.cap_id = 0;
e.cap.caps = 0;

View File

@ -834,12 +834,7 @@ void Locker::try_eval(MDSCacheObject *p, int mask)
return;
}
if (!p->is_auth()) {
dout(7) << "try_eval not auth for " << *p << dendl;
return;
}
if (!p->can_auth_pin()) {
if (p->is_auth() && !p->can_auth_pin()) {
dout(7) << "try_eval can't auth_pin, waiting on " << *p << dendl;
p->add_waiter(MDSCacheObject::WAIT_UNFREEZE, new C_Locker_Eval(this, p, mask));
return;
@ -849,7 +844,7 @@ void Locker::try_eval(MDSCacheObject *p, int mask)
assert(mask == CEPH_LOCK_DN);
bool need_issue = false; // ignore this, no caps on dentries
CDentry *dn = (CDentry *)p;
simple_eval(&dn->lock, &need_issue);
eval_any(&dn->lock, &need_issue);
} else {
CInode *in = (CInode *)p;
eval(in, mask);

View File

@ -3315,10 +3315,9 @@ void MDCache::rejoin_send_rejoins()
p->second->add_scatterlock_state(root);
}
}
for (int i = 0; i < NUM_STRAY; ++i) {
CInode *s = get_inode(MDS_INO_STRAY(p->first, i));
if (s)
p->second->add_weak_inode(s->vino());
if (CInode *in = get_inode(MDS_INO_MDSDIR(p->first))) {
if (in)
p->second->add_weak_inode(in->vino());
}
} else {
// strong
@ -3334,15 +3333,14 @@ void MDCache::rejoin_send_rejoins()
p->second->add_scatterlock_state(root);
}
}
for (int i = 0; i < NUM_STRAY; ++i) {
if (CInode *in = get_inode(MDS_INO_STRAY(p->first, i))) {
p->second->add_weak_inode(in->vino());
p->second->add_strong_inode(in->vino(),
in->get_caps_wanted(),
in->filelock.get_state(),
in->nestlock.get_state(),
in->dirfragtreelock.get_state());
}
if (CInode *in = get_inode(MDS_INO_MDSDIR(p->first))) {
p->second->add_weak_inode(in->vino());
p->second->add_strong_inode(in->vino(),
in->get_caps_wanted(),
in->filelock.get_state(),
in->nestlock.get_state(),
in->dirfragtreelock.get_state());
}
}
}

View File

@ -640,8 +640,8 @@ void Migrator::export_dir(CDir *dir, int dest)
return;
}
if (!dir->inode->is_base() &&
dir->inode->get_parent_dir()->ino() == MDS_INO_MDSDIR(mds->get_nodeid())) {
if (!dir->inode->is_base() && dir->get_parent_dir()->get_inode()->is_stray() &&
dir->get_parent_dir()->get_parent_dir()->ino() == MDS_INO_MDSDIR(mds->get_nodeid())) {
dout(7) << "i won't export anything in stray" << dendl;
return;
}

View File

@ -5138,7 +5138,7 @@ void Server::handle_client_rename(MDRequest *mdr)
// is this a stray migration, reintegration or merge? (sanity checks!)
if (mdr->reqid.name.is_mds() &&
!(MDS_INO_IS_STRAY(srcpath.get_ino()) &&
!(MDS_INO_IS_MDSDIR(srcpath.get_ino()) &&
MDS_INO_IS_STRAY(destpath.get_ino())) &&
!(destdnl->is_remote() &&
destdnl->get_remote_ino() == srci->ino())) {