. stable fix for dm-thin that avoids normal IO racing with discard

. stable fix for a dm-cache related bug in dm-btree walking code that
  results from using very large fast device (e.g. 4T) with a very small
  cache blocksize (e.g. 32K) -- this is a very uncommon configuration

. a couple fixes for dm-raid (one for stable and the other addresses a
  crash in 3.18-rc1 code)

. stable fix for dm-thinp that addresses a very rare dm-bufio bug having
  to do with memory reclaimation (via shrinker) when using dm-thinp
  ontop of loopback devices

. fix a leak in dm-stripe target constructor's error path
dm btree: fix a recursion depth bug in btree walking code

The walk code was using a 'ro_spine' to hold it's locked btree nodes.
But this data structure is designed for the rolling lock scheme, and
as such automatically unlocks blocks that are two steps up the call
chain.  This is not suitable for the simple recursive walk algorithm,
which retraces its steps.

This code is only used by the persistent array code, which in turn is
only used by dm-cache.  In order to trigger it you need to have a
mapping tree that is more than 2 levels deep; which equates to 8-16
million cache blocks.  For instance a 4T ssd with a very small block
size of 32k only just triggers this bug.

The fix just places the locked blocks on the stack, and stops using
the ro_spine altogether.

Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Cc: stable@vger.kernel.org
3 files changed