]> bbs.cooldavid.org Git - net-next-2.6.git/commit - fs/ceph/caps.c
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)
commite9964c102312967a4bc1fd501cb628c4a3b19034
tree7bccb0c4e29d94baaf8c30e008ec5aebdccf9c57
parent7af8f1e4aa86720840d3318e4dc225c3c7e5a6d0
ceph: fix flush_dirty_caps race with caps migration

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>
fs/ceph/caps.c
fs/ceph/super.h