From: Yan, Zheng Date: Wed, 28 Oct 2015 10:00:14 +0000 (+0800) Subject: client: make sync_fs() flush dirty data in objectcacher X-Git-Tag: v10.0.3~120^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=636a98414c847f27abc0f1095b1fc03190b09b0e;p=ceph.git client: make sync_fs() flush dirty data in objectcacher Signed-off-by: Yan, Zheng --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 01250124db6..f6da89b8c35 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -8640,6 +8640,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; @@ -8649,8 +8658,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; }