summaryrefslogtreecommitdiff
path: root/drivers/atm
diff options
context:
space:
mode:
authorKent Overstreet <kmo@daterainc.com>2013-12-17 17:51:02 -0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-02-06 11:34:06 -0800
commit9047ec62665cb8931840214b038cc1d22c4ed2e4 (patch)
treefe4850e851988d8fb1cffddb2242bbd655343f43 /drivers/atm
parent860abe4c33f491aa5c79acc916d01af978e64aec (diff)
bcache: Data corruption fix
commit ef71ec00002d92a08eb27e9d036e3d48835b6597 upstream. The code that handles overlapping extents that we've just read back in from disk was depending on the behaviour of the code that handles overlapping extents as we're inserting into a btree node in the case of an insert that forced an existing extent to be split: on insert, if we had to split we'd also insert a new extent to represent the top part of the old extent - and then that new extent would get written out. The code that read the extents back in thus not bother with splitting extents - if it saw an extent that ovelapped in the middle of an older extent, it would trim the old extent to only represent the bottom part, assuming that the original insert would've inserted a new extent to represent the top part. I still haven't figured out _how_ it can happen, but I'm now pretty convinced (and testing has confirmed) that there's some kind of an obscure corner case (probably involving extent merging, and multiple overwrites in different sets) that breaks this. The fix is to change the mergesort fixup code to split extents itself when required. Signed-off-by: Kent Overstreet <kmo@daterainc.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/atm')
0 files changed, 0 insertions, 0 deletions