From: Sage Weil Date: Mon, 7 Apr 2008 23:40:28 +0000 (-0700) Subject: kclient: fix cap revocation/release logic X-Git-Tag: v0.3~239^2~80 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f9d55e91bc3b61025e29e4f6817b80e948683b25;p=ceph.git kclient: fix cap revocation/release logic --- diff --git a/src/kernel/inode.c b/src/kernel/inode.c index 8e33ea1c4cf..551bbde8cf2 100644 --- a/src/kernel/inode.c +++ b/src/kernel/inode.c @@ -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;