From: Sage Weil Date: Mon, 13 Jul 2009 20:13:37 +0000 (-0700) Subject: mds: journal recovered mtime; cleanup X-Git-Tag: v0.10~21 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e842cf55b231a8e2a5e40640cf6ea164f63c36b9;p=ceph.git mds: journal recovered mtime; cleanup Also avoid using in->inode as that may fail with concurrent updates (if that's even possible?). --- diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index 02b9c9845a67..439a0a4274b3 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -1404,7 +1404,8 @@ public: }; -bool Locker::check_inode_max_size(CInode *in, bool force_wrlock, bool update_size, __u64 new_size) +bool Locker::check_inode_max_size(CInode *in, bool force_wrlock, + bool update_size, __u64 new_size, utime_t new_mtime) { assert(in->is_auth()); @@ -1468,6 +1469,8 @@ bool Locker::check_inode_max_size(CInode *in, bool force_wrlock, bool update_siz dout(10) << "check_inode_max_size size " << pi->size << " -> " << new_size << dendl; pi->size = new_size; pi->rstat.rbytes = new_size; + dout(10) << "check_inode_max_size mtime " << pi->mtime << " -> " << new_mtime << dendl; + pi->mtime = new_mtime; } // use EOpen if the file is still open; otherwise, use EUpdate. diff --git a/src/mds/Locker.h b/src/mds/Locker.h index 06f84f14e81c..a836984d21c0 100644 --- a/src/mds/Locker.h +++ b/src/mds/Locker.h @@ -223,7 +223,8 @@ protected: void file_update_finish(CInode *in, Mutation *mut, bool share, int client, Capability *cap, MClientCaps *ack); public: - bool check_inode_max_size(CInode *in, bool force_wrlock=false, bool update_size=false, __u64 newsize=0); + bool check_inode_max_size(CInode *in, bool force_wrlock=false, bool update_size=false, __u64 newsize=0, + utime_t mtime=utime_t()); private: void share_inode_max_size(CInode *in); diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 09bfa630b9eb..c1966594f2a8 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -4332,9 +4332,11 @@ void MDCache::identify_files_to_recover() struct C_MDC_Recover : public Context { MDCache *mdc; CInode *in; - C_MDC_Recover(MDCache *m, CInode *i) : mdc(m), in(i) {} + __u64 size; + utime_t mtime; + C_MDC_Recover(MDCache *m, CInode *i) : mdc(m), in(i), size(0) {} void finish(int r) { - mdc->_recovered(in, r); + mdc->_recovered(in, r, size, mtime); } }; @@ -4353,11 +4355,10 @@ void MDCache::do_file_recover() << " " << *in << dendl; file_recovering.insert(in); - __u64 max = in->inode.get_max_size(); - + C_MDC_Recover *fin = new C_MDC_Recover(this, in); mds->filer->probe(in->inode.ino, &in->inode.layout, in->last, - max, &in->inode.size, &in->inode.mtime, false, - 0, new C_MDC_Recover(this, in)); + in->get_projected_inode()->get_max_size(), &fin->size, &fin->mtime, false, + 0, fin); } else { dout(10) << "do_file_recover skipping " << in->inode.size << " " << *in << dendl; @@ -4371,7 +4372,7 @@ void MDCache::do_file_recover() } } -void MDCache::_recovered(CInode *in, int r) +void MDCache::_recovered(CInode *in, int r, __u64 size, utime_t mtime) { dout(10) << "_recovered r=" << r << " size=" << in->inode.size << " mtime=" << in->inode.mtime << " for " << *in << dendl; @@ -4385,7 +4386,7 @@ void MDCache::_recovered(CInode *in, int r) remove_inode(in); } else { // journal - mds->locker->check_inode_max_size(in, true, true, in->inode.size); + mds->locker->check_inode_max_size(in, true, true, size, mtime); in->auth_unpin(this); } diff --git a/src/mds/MDCache.h b/src/mds/MDCache.h index 0e72a1209914..1ad4aead0f60 100644 --- a/src/mds/MDCache.h +++ b/src/mds/MDCache.h @@ -775,7 +775,7 @@ public: void _queue_file_recover(CInode *in); void identify_files_to_recover(); void do_file_recover(); - void _recovered(CInode *in, int r); + void _recovered(CInode *in, int r, __u64 size, utime_t mtime); void purge_prealloc_ino(inodeno_t ino, Context *fin);