]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix Locker::_do_null_snapflush
authorYan, Zheng <zyan@redhat.com>
Tue, 14 Apr 2015 04:02:49 +0000 (12:02 +0800)
committerYan, Zheng <zyan@redhat.com>
Tue, 21 Apr 2015 05:56:17 +0000 (13:56 +0800)
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 <zyan@redhat.com>
src/mds/Locker.cc
src/mds/Locker.h

index 1eb102b71899d07b92ba7a49b5e87b81b0826ae3..e5fe813c888418b6fcafdaa21ceb61e004efe1e9 100644 (file)
@@ -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<snapid_t, set<client_t> >::iterator p = head_in->client_need_snapflush.begin();
   while (p != head_in->client_need_snapflush.end()) {
     snapid_t snapid = p->first;
     set<client_t>& 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);
 
index 7205bb4663f9c0b0b258fb9f47e3fe759ee79ab6..dfd935191c4b6127e754b288ef389dcf9b519c50 100644 (file)
@@ -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);