From f9d55e91bc3b61025e29e4f6817b80e948683b25 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 7 Apr 2008 16:40:28 -0700 Subject: [PATCH] kclient: fix cap revocation/release logic --- src/kernel/inode.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/kernel/inode.c b/src/kernel/inode.c index 8e33ea1c4cf35..551bbde8cf2d0 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; -- 2.39.5