]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: avoid queueing cap_snap when nothing is dirty or writing
authorSage Weil <sage@newdream.net>
Tue, 2 Dec 2008 19:09:16 +0000 (11:09 -0800)
committerSage Weil <sage@newdream.net>
Tue, 2 Dec 2008 19:09:16 +0000 (11:09 -0800)
Save ourselves the trouble when there is nothing to flush

src/kernel/snap.c

index 21fdba2a300729ecdd47a3d731947e8aaedc60b3..5a52908efff3c09e0879746febac718aaf0e7185 100644 (file)
@@ -323,7 +323,7 @@ void ceph_queue_cap_snap(struct ceph_inode_info *ci,
                dout(10, "queue_cap_snap %p snapc %p seq %llu used %d"
                     " already pending\n", inode, snapc, snapc->seq, used);
                kfree(capsnap);
-       } else {
+       } else if (ci->i_wrbuffer_ref_head || (used & CEPH_CAP_WR)) {
                igrab(inode);
                capsnap->follows = snapc->seq - 1;
                capsnap->context = ceph_get_snap_context(snapc);
@@ -346,6 +346,9 @@ void ceph_queue_cap_snap(struct ceph_inode_info *ci,
                        /* note mtime, size NOW. */
                        __ceph_finish_cap_snap(ci, capsnap);
                }
+       } else {
+               dout(10, "queue_cap_snap %p nothing dirty|writing\n", inode);
+               kfree(capsnap);
        }
 
        spin_unlock(&inode->i_lock);