mirror of
https://github.com/ceph/ceph
synced 2025-02-21 18:17:42 +00:00
Merge pull request #4177 from ceph/wip-11226-extra
Wip 11226 extra Reviewed-by: Greg Farnum <gfarnum@redhat.com>
This commit is contained in:
commit
0e4a75b2e3
@ -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;
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user