Merge pull request #4177 from ceph/wip-11226-extra

Wip 11226 extra

Reviewed-by: Greg Farnum <gfarnum@redhat.com>
This commit is contained in:
Gregory Farnum 2015-03-27 11:27:58 -07:00
commit 0e4a75b2e3
2 changed files with 16 additions and 8 deletions

View File

@ -612,10 +612,13 @@ void Client::trim_dentry(Dentry *dn)
ldout(cct, 15) << "trim_dentry unlinking dn " << dn->name
<< " in dir " << hex << dn->dir->parent_inode->ino
<< dendl;
dn->dir->release_count++;
if (dn->dir->parent_inode->flags & I_COMPLETE) {
ldout(cct, 10) << " clearing (I_COMPLETE|I_DIR_ORDERED) on " << *dn->dir->parent_inode << dendl;
dn->dir->parent_inode->flags &= ~(I_COMPLETE | I_DIR_ORDERED);
if (dn->inode) {
dn->dir->release_count++;
if (dn->dir->parent_inode->flags & I_COMPLETE) {
ldout(cct, 10) << " clearing (I_COMPLETE|I_DIR_ORDERED) on "
<< *dn->dir->parent_inode << dendl;
dn->dir->parent_inode->flags &= ~(I_COMPLETE | I_DIR_ORDERED);
}
}
unlink(dn, false, false); // drop dir, drop dentry
}
@ -4988,9 +4991,14 @@ int Client::_lookup(Inode *dir, const string& dname, Inode **target)
<< " vs lease_gen " << dn->lease_gen << dendl;
}
// dir lease?
if (dir->caps_issued_mask(CEPH_CAP_FILE_SHARED) &&
dn->cap_shared_gen == dir->shared_gen) {
goto hit_dn;
if (dir->caps_issued_mask(CEPH_CAP_FILE_SHARED)) {
if (dn->cap_shared_gen == dir->shared_gen)
goto hit_dn;
if (!dn->inode && (dir->flags & I_COMPLETE)) {
ldout(cct, 10) << "_lookup concluded ENOENT locally for "
<< *dir << " dn '" << dname << "'" << dendl;
return -ENOENT;
}
}
} else {
ldout(cct, 20) << " no cap on " << dn->inode->vino() << dendl;

View File

@ -1161,7 +1161,7 @@ bool Locker::_rdlock_kick(SimpleLock *lock, bool as_anon)
CInode *in = static_cast<CInode*>(lock->get_parent());
if (lock->get_state() == LOCK_EXCL &&
in->get_target_loner() >= 0 &&
!as_anon) // as_anon => caller wants SYNC, not XSYN
!in->is_dir() && !as_anon) // as_anon => caller wants SYNC, not XSYN
file_xsyn(lock);
else
simple_sync(lock);