]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
client: don't send cap snap message to MDS if not dirty or writing.
authorGreg Farnum <gregf@hq.newdream.net>
Mon, 21 Jun 2010 17:54:32 +0000 (10:54 -0700)
committerGreg Farnum <gregf@hq.newdream.net>
Mon, 21 Jun 2010 23:27:58 +0000 (16:27 -0700)
From Sage.

src/client/Client.cc

index 3d76299852928f2b01ddc76695bcec21ee96093e..c2a8c39194447df097965c7b20f29502d54e8dc3 100644 (file)
@@ -1851,21 +1851,24 @@ void Client::queue_cap_snap(Inode *in, snapid_t seq)
       in->cap_snaps.rbegin()->second.writing) {
     dout(10) << "queue_cap_snap already have pending cap_snap on " << *in << dendl;
     return;
-  }
-
-  in->get();
-  CapSnap *capsnap = &in->cap_snaps[seq];
-  capsnap->context = in->snaprealm->cached_snap_context;
-  capsnap->issued = in->caps_issued();
-  capsnap->dirty = in->caps_dirty();  // a bit conservative?
-  
-  capsnap->dirty_data = (used & CEPH_CAP_FILE_BUFFER);
-
-  if (used & CEPH_CAP_FILE_WR) {
-    dout(10) << "queue_cap_snap WR used on " << *in << dendl;
-    capsnap->writing = 1;
+  } else if (in->caps_dirty() ||
+            (used & CEPH_CAP_FILE_WR)) {
+    in->get();
+    CapSnap *capsnap = &in->cap_snaps[seq];
+    capsnap->context = in->snaprealm->cached_snap_context;
+    capsnap->issued = in->caps_issued();
+    capsnap->dirty = in->caps_dirty();  // a bit conservative?
+    
+    capsnap->dirty_data = (used & CEPH_CAP_FILE_BUFFER);
+    
+    if (used & CEPH_CAP_FILE_WR) {
+      dout(10) << "queue_cap_snap WR used on " << *in << dendl;
+      capsnap->writing = 1;
+    } else {
+      finish_cap_snap(in, capsnap, used);
+    }
   } else {
-    finish_cap_snap(in, capsnap, used);
+    dout(10) << "queue_cap_snap not dirty|writing on " << *in << dendl;
   }
 }