}
mount_cond.wait(lock, [this] {
- if (!mds_requests.empty()) {
- ldout(cct, 10) << "waiting on " << mds_requests.size() << " requests"
- << dendl;
+ // Only wait for write OPs
+ for (auto& [tid, req] : mds_requests) {
+ if (req->is_write()) {
+ ldout(cct, 10) << "waiting for write request '" << tid
+ << "' to complete, currently there are "
+ << mds_requests.size()
+ << " outstanding read/write requests"
+ << dendl;
+ return false;
+ }
}
- return mds_requests.empty();
+ return true;
});
cwd.reset();
ldout(cct, 0) << " destroyed lost open file " << fh << " on " << *fh->inode << dendl;
_release_fh(fh);
}
-
+
while (!ll_unclosed_fh_set.empty()) {
set<Fh*>::iterator it = ll_unclosed_fh_set.begin();
Fh *fh = *it;
flush_caps_sync();
ceph_tid_t flush_tid = last_flush_tid;
+ // flush the mdlog before waiting for unsafe requests.
+ flush_mdlog_sync();
+
// wait for unsafe mds requests
wait_unsafe_requests();