ceph: do not retain caps that are being revoked
Never retain caps in __send_cap() that are being revoked. Signed-off-by: Sage Weil <sage@newdream.net>
This commit is contained in:
@@ -1042,10 +1042,7 @@ static int __send_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap,
|
|||||||
struct ceph_inode_info *ci = cap->ci;
|
struct ceph_inode_info *ci = cap->ci;
|
||||||
struct inode *inode = &ci->vfs_inode;
|
struct inode *inode = &ci->vfs_inode;
|
||||||
u64 cap_id = cap->cap_id;
|
u64 cap_id = cap->cap_id;
|
||||||
int held = cap->issued | cap->implemented;
|
int held, revoking, dropping, keep;
|
||||||
int revoking = cap->implemented & ~cap->issued;
|
|
||||||
int dropping = cap->issued & ~retain;
|
|
||||||
int keep;
|
|
||||||
u64 seq, issue_seq, mseq, time_warp_seq, follows;
|
u64 seq, issue_seq, mseq, time_warp_seq, follows;
|
||||||
u64 size, max_size;
|
u64 size, max_size;
|
||||||
struct timespec mtime, atime;
|
struct timespec mtime, atime;
|
||||||
@@ -1060,6 +1057,11 @@ static int __send_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap,
|
|||||||
int i;
|
int i;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
held = cap->issued | cap->implemented;
|
||||||
|
revoking = cap->implemented & ~cap->issued;
|
||||||
|
retain &= ~revoking;
|
||||||
|
dropping = cap->issued & ~retain;
|
||||||
|
|
||||||
dout("__send_cap %p cap %p session %p %s -> %s (revoking %s)\n",
|
dout("__send_cap %p cap %p session %p %s -> %s (revoking %s)\n",
|
||||||
inode, cap, cap->session,
|
inode, cap, cap->session,
|
||||||
ceph_cap_string(held), ceph_cap_string(held & retain),
|
ceph_cap_string(held), ceph_cap_string(held & retain),
|
||||||
|
Reference in New Issue
Block a user