From 613c8f1edf6c33b757be81092c4b4a6ced4f2d0d Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 28 Feb 2013 22:32:30 -0800 Subject: [PATCH] client: clear I_COMPLETE on traceless reply for dentry request If a request is against a dentry, and we get a traceless reply, clear the directory I_COMPLETE flag on the parent directory because we can no longer trust that our cache is complete. It is possible we could do something a bit more intelligent here, but it is not trivial because of racing requests, and traceless replies are rare, so it's not worth the effort. Signed-off-by: Sage Weil --- src/client/Client.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/client/Client.cc b/src/client/Client.cc index b3bea7adcbcd..6497558008dd 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -903,6 +903,14 @@ Inode* Client::insert_trace(MetaRequest *request, int mds) bufferlist::iterator p = reply->get_trace_bl().begin(); if (p.end()) { ldout(cct, 10) << "insert_trace -- no trace" << dendl; + + if (request->dentry && + request->dentry->dir && + (request->dentry->dir->parent_inode->flags & I_COMPLETE)) { + ldout(cct, 10) << " clearing I_COMPLETE on " << *request->dentry->dir->parent_inode << dendl; + request->dentry->dir->parent_inode->flags &= ~I_COMPLETE; + request->dentry->dir->release_count++; + } return NULL; } -- 2.47.3