diff options
author | Sage Weil | 2011-02-05 05:45:58 +0100 |
---|---|---|
committer | Sage Weil | 2011-02-05 05:45:58 +0100 |
commit | e8e1ba96b207deba1339b09983f8b29f92cb1497 (patch) | |
tree | 281f255e549ec247699d9860117c3b684c472997 /crypto/vmac.c | |
parent | libceph: fix socket write error handling (diff) | |
download | kernel-qcow2-linux-e8e1ba96b207deba1339b09983f8b29f92cb1497.tar.gz kernel-qcow2-linux-e8e1ba96b207deba1339b09983f8b29f92cb1497.tar.xz kernel-qcow2-linux-e8e1ba96b207deba1339b09983f8b29f92cb1497.zip |
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>
Diffstat (limited to 'crypto/vmac.c')
0 files changed, 0 insertions, 0 deletions