ceph: fix erroneous cap flush to non-auth mds
authorSage Weil <sage@newdream.net>
Tue, 18 Jan 2011 16:48:06 +0000 (08:48 -0800)
committerSage Weil <sage@newdream.net>
Wed, 19 Jan 2011 17:23:24 +0000 (09:23 -0800)
The int flushing is global and not clear on each iteration of the loop,
which can cause a second flush of caps to any MDSs with ids greater than
the auth.

Signed-off-by: Sage Weil <sage@newdream.net>
fs/ceph/caps.c

index 60d27bc9eb83d82f61e448031495625e42c752d3..f654c7e933ac8534b5e070eb53870039144c71cc 100644 (file)
@@ -1658,6 +1658,8 @@ ack:
 
                if (cap == ci->i_auth_cap && ci->i_dirty_caps)
                        flushing = __mark_caps_flushing(inode, session);
+               else
+                       flushing = 0;
 
                mds = cap->mds;  /* remember mds, so we don't repeat */
                sent++;