From c9fe13fddcc8ca6587150d23366a6a5defcafe6d Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Tue, 14 Apr 2015 12:02:49 +0800 Subject: [PATCH] mds: fix Locker::_do_null_snapflush the snapid check in Locker::_do_null_snapflush() prevents us from flushing old snap inodes. The check does not make sense. Signed-off-by: Yan, Zheng --- src/mds/Locker.cc | 11 ++++------- src/mds/Locker.h | 2 +- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index 1eb102b71899d..e5fe813c88841 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -2383,18 +2383,15 @@ void Locker::adjust_cap_wanted(Capability *cap, int wanted, int issue_seq) -void Locker::_do_null_snapflush(CInode *head_in, client_t client, snapid_t follows) +void Locker::_do_null_snapflush(CInode *head_in, client_t client) { - dout(10) << "_do_null_snapflish client." << client << " follows " << follows << " on " << *head_in << dendl; + dout(10) << "_do_null_snapflush client." << client << " on " << *head_in << dendl; compact_map >::iterator p = head_in->client_need_snapflush.begin(); while (p != head_in->client_need_snapflush.end()) { snapid_t snapid = p->first; set& clients = p->second; ++p; // be careful, q loop below depends on this - // snapid is the snap inode's ->last - if (follows > snapid) - break; if (clients.count(client)) { dout(10) << " doing async NULL snapflush on " << snapid << " from client." << client << dendl; CInode *sin = mdcache->get_inode(head_in->ino(), snapid); @@ -2588,7 +2585,7 @@ void Locker::handle_client_caps(MClientCaps *m) // update/release). if (!head_in->client_need_snapflush.empty()) { if ((cap->issued() & CEPH_CAP_ANY_FILE_WR) == 0) { - _do_null_snapflush(head_in, client, follows); + _do_null_snapflush(head_in, client); } else { dout(10) << " revocation in progress, not making any conclusions about null snapflushes" << dendl; } @@ -3232,7 +3229,7 @@ void Locker::remove_client_cap(CInode *in, client_t client) { // clean out any pending snapflush state if (!in->client_need_snapflush.empty()) - _do_null_snapflush(in, client, 0); + _do_null_snapflush(in, client); in->remove_client_cap(client); diff --git a/src/mds/Locker.h b/src/mds/Locker.h index 7205bb4663f9c..dfd935191c4b6 100644 --- a/src/mds/Locker.h +++ b/src/mds/Locker.h @@ -193,7 +193,7 @@ public: void handle_client_caps(class MClientCaps *m); void _update_cap_fields(CInode *in, int dirty, MClientCaps *m, inode_t *pi); void _do_snap_update(CInode *in, snapid_t snap, int dirty, snapid_t follows, client_t client, MClientCaps *m, MClientCaps *ack); - void _do_null_snapflush(CInode *head_in, client_t client, snapid_t follows); + void _do_null_snapflush(CInode *head_in, client_t client); bool _do_cap_update(CInode *in, Capability *cap, int dirty, snapid_t follows, MClientCaps *m, MClientCaps *ack=0); void handle_client_cap_release(class MClientCapRelease *m); -- 2.39.5