]> git.baikalelectronics.ru Git - kernel.git/commit
ceph: queue cap_snaps once per realm
authorSage Weil <sage@newdream.net>
Sat, 5 Feb 2011 04:45:58 +0000 (20:45 -0800)
committerSage Weil <sage@newdream.net>
Sat, 5 Feb 2011 04:45:58 +0000 (20:45 -0800)
commitb1337fad0b6cccd78ffb356f6b929edd46533819
tree281f255e549ec247699d9860117c3b684c472997
parent0b319a4dfb1a8dc975327884117619aa739b7163
ceph: queue cap_snaps once per realm

We were forming a dirty list, and then queueing cap_snaps for each realm
_and_ its children, regardless of whether the children were already in the
dirty list.  This meant we did it twice for some realms.  Which in turn
meant we corrupted mdsc->snap_flush_list when the cap_snap was re-added to
the list it was already on, and could trigger an infinite loop.

We were also using recursion to do reach all the children, a no-no when
stack is limited.

Instead, (re)queue any children on the dirty list, avoiding processing
anything twice and avoiding any recursion.

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