mirror of
https://github.com/ceph/ceph
synced 2025-02-21 01:47:25 +00:00
Merge branch 'wip-mds'
This commit is contained in:
commit
2daad206ee
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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())) {
|
||||
|
Loading…
Reference in New Issue
Block a user