ceph: fix erroneous cap flush to non-auth mds
Sage Weil [Tue, 18 Jan 2011 16:48:06 +0000 (08:48 -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 60d27bc..f654c7e 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++;