}
}
+ bool need_recover = false;
if (lock->get_type() == CEPH_LOCK_IFILE) {
assert(in);
if (in->state_test(CInode::STATE_NEEDSRECOVER)) {
mds->mdcache->queue_file_recover(in);
- mds->mdcache->do_file_recover();
+ need_recover = true;
gather++;
}
}
if (gather) {
lock->get_parent()->auth_pin(lock);
+ if (need_recover)
+ mds->mdcache->do_file_recover();
return false;
}
}
}
}
+ bool need_recover = false;
if (lock->get_type() == CEPH_LOCK_IFILE) {
assert(in);
if(in->state_test(CInode::STATE_NEEDSRECOVER)) {
mds->mdcache->queue_file_recover(in);
- mds->mdcache->do_file_recover();
+ need_recover = true;
gather++;
}
}
if (gather) {
lock->get_parent()->auth_pin(lock);
+ if (need_recover)
+ mds->mdcache->do_file_recover();
} else {
lock->set_state(LOCK_LOCK);
lock->finish_waiters(ScatterLock::WAIT_XLOCK|ScatterLock::WAIT_WR|ScatterLock::WAIT_STABLE);
issue_caps(in);
gather++;
}
+ bool need_recover = false;
if (in->state_test(CInode::STATE_NEEDSRECOVER)) {
mds->mdcache->queue_file_recover(in);
- mds->mdcache->do_file_recover();
+ need_recover = true;
gather++;
}
- if (gather)
+ if (gather) {
lock->get_parent()->auth_pin(lock);
- else {
+ if (need_recover)
+ mds->mdcache->do_file_recover();
+ } else {
in->start_scatter(lock);
lock->set_state(LOCK_MIX);
lock->clear_scatter_wanted();
issue_caps(in);
gather++;
}
+ bool need_recover = false;
if (in->state_test(CInode::STATE_NEEDSRECOVER)) {
mds->mdcache->queue_file_recover(in);
- mds->mdcache->do_file_recover();
+ need_recover = true;
gather++;
}
if (gather) {
lock->get_parent()->auth_pin(lock);
+ if (need_recover)
+ mds->mdcache->do_file_recover();
} else {
lock->set_state(LOCK_EXCL);
if (need_issue)