diff options
author | Sage Weil <sage@newdream.net> | 2010-03-09 00:27:53 +0100 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-03-21 05:33:06 +0100 |
commit | 978097c907b58a2d085bbf7632bee1a5a7e6f6ba (patch) | |
tree | 1d52869c500f7b6d5c0566011c070e0924dbe57f | |
parent | Linux 2.6.34-rc2 (diff) | |
download | linux-978097c907b58a2d085bbf7632bee1a5a7e6f6ba.tar.xz linux-978097c907b58a2d085bbf7632bee1a5a7e6f6ba.zip |
ceph: implemented caps should always be superset of issued caps
Added assertion, and cleared one case where the implemented caps were
not following the issued caps.
Signed-off-by: Yehuda Sadeh <yehuda@hq.newdream.net>
Signed-off-by: Sage Weil <sage@newdream.net>
-rw-r--r-- | fs/ceph/caps.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c index db122bb357b8..57d9b44a8820 100644 --- a/fs/ceph/caps.c +++ b/fs/ceph/caps.c @@ -2334,6 +2334,7 @@ static int handle_cap_grant(struct inode *inode, struct ceph_mds_caps *grant, revoked_rdcache) reply = 2; /* send revoke ack in check_caps */ cap->issued = newcaps; + cap->implemented |= newcaps; } else if (cap->issued == newcaps) { dout("caps unchanged: %s -> %s\n", ceph_cap_string(cap->issued), ceph_cap_string(newcaps)); @@ -2346,6 +2347,7 @@ static int handle_cap_grant(struct inode *inode, struct ceph_mds_caps *grant, * pending revocation */ wake = 1; } + BUG_ON(cap->issued & ~cap->implemented); spin_unlock(&inode->i_lock); if (writeback) |