ceph: fix flush_dirty_caps race with caps migration
authorSage Weil <sage@newdream.net>
Mon, 1 Mar 2010 23:16:56 +0000 (15:16 -0800)
committerSage Weil <sage@newdream.net>
Mon, 1 Mar 2010 23:28:02 +0000 (15:28 -0800)
The flush_dirty_caps() used to loop over the first entry of the cap_dirty
dirty list on the assumption that after calling ceph_check_caps() it would
be removed from the list.  This isn't true for caps that are being
migrated between MDSs, where we've received the EXPORT but not the IMPORT.

Instead, do a safe list iteration, and pin the next inode on the list via
the CEPH_I_NOFLUSH flag.

Signed-off-by: Sage Weil <sage@newdream.net>

No differences found