From ed15e38fb1d979dd0d2b29101725b04f1d918709 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 24 Jun 2010 15:12:37 -0700 Subject: [PATCH] --- yaml --- r: 200845 b: refs/heads/master c: ec97f88ba6d4256927fde516033ee76d5d85b54a h: refs/heads/master i: 200843: 94fc886fa87dd43f7518c517d7ff0ee45951327d v: v3 --- [refs] | 2 +- trunk/fs/ceph/caps.c | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 2e2834b543e1..9ec2aabb1262 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a1a31e734241aefcb2b30fb0cc0376977b6d2ba8 +refs/heads/master: ec97f88ba6d4256927fde516033ee76d5d85b54a diff --git a/trunk/fs/ceph/caps.c b/trunk/fs/ceph/caps.c index 619b61655ee5..d4fcdda7676c 100644 --- a/trunk/fs/ceph/caps.c +++ b/trunk/fs/ceph/caps.c @@ -2886,18 +2886,19 @@ int ceph_encode_inode_release(void **p, struct inode *inode, struct ceph_inode_info *ci = ceph_inode(inode); struct ceph_cap *cap; struct ceph_mds_request_release *rel = *p; + int used, dirty; int ret = 0; - int used = 0; spin_lock(&inode->i_lock); used = __ceph_caps_used(ci); + dirty = __ceph_caps_dirty(ci); - dout("encode_inode_release %p mds%d used %s drop %s unless %s\n", inode, - mds, ceph_cap_string(used), ceph_cap_string(drop), + dout("encode_inode_release %p mds%d used|dirty %s drop %s unless %s\n", + inode, mds, ceph_cap_string(used|dirty), ceph_cap_string(drop), ceph_cap_string(unless)); - /* only drop unused caps */ - drop &= ~used; + /* only drop unused, clean caps */ + drop &= ~(used | dirty); cap = __get_cap_for_mds(ci, mds); if (cap && __cap_is_valid(cap)) {