Recently, we changed ganesha to call to ceph_ll_sync_inode after
issuing a setattr call, to ensure that the attribute changes makes it
to the backing store before returning.
While testing with this, I noticed that we'd occasionally see setattr
calls stall for a long time. Analysis showed that the client's _fsync
request was stalled waiting on an mdlog flush.
This patch adds a call to flush_mdlog_sync prior to waiting on unsafe
requests in _fsync and seems to resolve the issue.
Tracker: http://tracker.ceph.com/issues/23714
Signed-off-by: Jeff Layton <jlayton@redhat.com>
} else ldout(cct, 10) << "no metadata needs to commit" << dendl;
if (!syncdataonly && !in->unsafe_ops.empty()) {
+ flush_mdlog_sync();
+
MetaRequest *req = in->unsafe_ops.back();
ldout(cct, 15) << "waiting on unsafe requests, last tid " << req->get_tid() << dendl;