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),