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>
This commit is contained in:
parent
220bf991b0
commit
978097c907
@ -2334,6 +2334,7 @@ static int handle_cap_grant(struct inode *inode, struct ceph_mds_caps *grant,
|
|||||||
revoked_rdcache)
|
revoked_rdcache)
|
||||||
reply = 2; /* send revoke ack in check_caps */
|
reply = 2; /* send revoke ack in check_caps */
|
||||||
cap->issued = newcaps;
|
cap->issued = newcaps;
|
||||||
|
cap->implemented |= newcaps;
|
||||||
} else if (cap->issued == newcaps) {
|
} else if (cap->issued == newcaps) {
|
||||||
dout("caps unchanged: %s -> %s\n",
|
dout("caps unchanged: %s -> %s\n",
|
||||||
ceph_cap_string(cap->issued), ceph_cap_string(newcaps));
|
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 */
|
* pending revocation */
|
||||||
wake = 1;
|
wake = 1;
|
||||||
}
|
}
|
||||||
|
BUG_ON(cap->issued & ~cap->implemented);
|
||||||
|
|
||||||
spin_unlock(&inode->i_lock);
|
spin_unlock(&inode->i_lock);
|
||||||
if (writeback)
|
if (writeback)
|
||||||
|
Loading…
Reference in New Issue
Block a user