From: Sage Weil Date: Mon, 7 Apr 2008 21:40:40 +0000 (-0700) Subject: mds: update dir mtime on open + O_CREAT X-Git-Tag: v0.3~239^2~81^2^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=dc7f8666a449e78dc43e30f2eee6b38a55e422a9;p=ceph.git mds: update dir mtime on open + O_CREAT --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index fce1e38269a..a2b1be3cc5b 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -4087,11 +4087,11 @@ class C_MDS_openc_finish : public Context { MDRequest *mdr; CDentry *dn; CInode *newi; - version_t pv; + version_t pv, dirpv; public: - C_MDS_openc_finish(MDS *m, MDRequest *r, CDentry *d, CInode *ni) : + C_MDS_openc_finish(MDS *m, MDRequest *r, CDentry *d, CInode *ni, version_t dpv) : mds(m), mdr(r), dn(d), newi(ni), - pv(d->get_projected_version()) {} + pv(d->get_projected_version()), dirpv(dpv) {} void finish(int r) { assert(r == 0); @@ -4101,6 +4101,9 @@ public: // dirty inode, dn, dir newi->mark_dirty(pv, mdr->ls); + // dir inode's mtime + mds->server->dirty_dn_diri(mdr, dn, dirpv); + // downgrade xlock to rdlock //mds->locker->dentry_xlock_downgrade_to_rdlock(dn, mdr); @@ -4154,15 +4157,16 @@ void Server::handle_client_openc(MDRequest *mdr) in->inode.max_size = in->get_layout_size_increment(); // prepare finisher - C_MDS_openc_finish *fin = new C_MDS_openc_finish(mds, mdr, dn, in); mdr->ls = mdlog->get_current_segment(); EUpdate *le = new EUpdate(mdlog, "openc"); le->metablob.add_client_req(req->get_reqid()); le->metablob.add_allocated_ino(in->ino(), mds->idalloc->get_version()); + version_t dirpv = predirty_dn_diri(mdr, dn, &le->metablob); // dir mtime too le->metablob.add_dir_context(dn->dir); le->metablob.add_primary_dentry(dn, true, in, &in->inode); // log + wait + C_MDS_openc_finish *fin = new C_MDS_openc_finish(mds, mdr, dn, in, dirpv); mdlog->submit_entry(le, fin); /*