From 10c7f06ade25ab057a71f4a9d4ee7ad2051610c9 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Wed, 28 Oct 2015 18:00:14 +0800 Subject: [PATCH] client: make sync_fs() flush dirty data in objectcacher Signed-off-by: Yan, Zheng --- src/client/Client.cc | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index cf03092facd5c5..749dd3fc89e924 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -8625,6 +8625,15 @@ int Client::_sync_fs() { ldout(cct, 10) << "_sync_fs" << dendl; + // flush file data + Mutex lock("Client::_fsync::lock"); + Cond cond; + bool flush_done = false; + if (cct->_conf->client_oc) + objectcacher->flush_all(new C_SafeCond(&lock, &cond, &flush_done)); + else + flush_done = true; + // flush caps flush_caps(); ceph_tid_t flush_tid = last_flush_tid; @@ -8634,8 +8643,15 @@ int Client::_sync_fs() wait_sync_caps(flush_tid); - // flush file data - // FIXME + if (!flush_done) { + client_lock.Unlock(); + lock.Lock(); + ldout(cct, 15) << "waiting on data to flush" << dendl; + while (!flush_done) + cond.Wait(lock); + lock.Unlock(); + client_lock.Lock(); + } return 0; }