]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: fix cap revocation/release logic
authorSage Weil <sage@newdream.net>
Mon, 7 Apr 2008 23:40:28 +0000 (16:40 -0700)
committerSage Weil <sage@newdream.net>
Mon, 7 Apr 2008 23:40:28 +0000 (16:40 -0700)
src/kernel/inode.c

index 8e33ea1c4cf35c770339092e31bcaae68999c94c..551bbde8cf2d0c4128e50af9fa7753f50a68c4f5 100644 (file)
@@ -780,10 +780,14 @@ retry:
        used = __ceph_caps_used(ci);
 
        list_for_each(p, &ci->i_caps) {
+               int revoking;
                cap = list_entry(p, struct ceph_inode_cap, ci_caps);
 
                /* completed revocation? */
-               if (((cap->implemented & ~cap->issued) & used) == 0) {
+               revoking = cap->implemented & ~cap->issued;
+               dout(20, "cap %p issued %d impl %d revoking %d used %d\n",
+                    cap, cap->issued, cap->implemented, revoking, used);
+               if (revoking && (revoking && used) == 0) {
                        dout(10, "completed revocation of %d\n",
                             cap->implemented & ~cap->issued);
                        cap->implemented = cap->issued;