From e18c960526ca8dc8ec12e6a93aa9bb5ae64bc1af Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Fri, 4 Jan 2013 14:28:07 +0800 Subject: [PATCH] --- yaml --- r: 359557 b: refs/heads/master c: 8a92a119b292012a9bd920b908c3e9f1c512291d h: refs/heads/master i: 359555: 626adb4496ab179d5fea7b3cf1732bcc597387f9 v: v3 --- [refs] | 2 +- trunk/fs/ceph/caps.c | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 14b780e325db..ca5f3215fe5a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a41bad1a9b9f9982eb9b451165724c5f81096683 +refs/heads/master: 8a92a119b292012a9bd920b908c3e9f1c512291d diff --git a/trunk/fs/ceph/caps.c b/trunk/fs/ceph/caps.c index a1d9bb30c1bf..a9fe2d5784c9 100644 --- a/trunk/fs/ceph/caps.c +++ b/trunk/fs/ceph/caps.c @@ -611,8 +611,16 @@ int ceph_add_cap(struct inode *inode, 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),