diff options
author | Yan, Zheng <zheng.z.yan@intel.com> | 2013-01-04 14:28:07 +0800 |
---|---|---|
committer | Alex Elder <elder@inktank.com> | 2013-01-17 12:42:37 -0600 |
commit | 8a92a119b292012a9bd920b908c3e9f1c512291d (patch) | |
tree | 8ce580d5c29dac00ddbd0cc1922865ff3395366c /fs/ceph/caps.c | |
parent | a41bad1a9b9f9982eb9b451165724c5f81096683 (diff) | |
download | op-kernel-dev-8a92a119b292012a9bd920b908c3e9f1c512291d.zip op-kernel-dev-8a92a119b292012a9bd920b908c3e9f1c512291d.tar.gz |
ceph: move dirty inode to migrating list when clearing auth caps
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
Reviewed-by: Sage Weil <sage@inktank.com>
Diffstat (limited to 'fs/ceph/caps.c')
-rw-r--r-- | fs/ceph/caps.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c index a1d9bb3..a9fe2d5 100644 --- a/fs/ceph/caps.c +++ b/fs/ceph/caps.c @@ -611,8 +611,16 @@ retry: if (flags & CEPH_CAP_FLAG_AUTH) ci->i_auth_cap = cap; - else if (ci->i_auth_cap == cap) + else if (ci->i_auth_cap == cap) { ci->i_auth_cap = NULL; + spin_lock(&mdsc->cap_dirty_lock); + if (!list_empty(&ci->i_dirty_item)) { + dout(" moving %p to cap_dirty_migrating\n", inode); + list_move(&ci->i_dirty_item, + &mdsc->cap_dirty_migrating); + } + spin_unlock(&mdsc->cap_dirty_lock); + } dout("add_cap inode %p (%llx.%llx) cap %p %s now %s seq %d mds%d\n", inode, ceph_vinop(inode), cap, ceph_cap_string(issued), |