kernel-ark/drivers/md/bcache
Eric Wheeler d9dc1702b2 bcache: register_bcache(): call blkdev_put() when cache_alloc() fails
register_cache() is supposed to return an error string on error so that
register_bcache() will will blkdev_put and cleanup other user counters,
but it does not set 'char *err' when cache_alloc() fails (eg, due to
memory pressure) and thus register_bcache() performs no cleanup.

register_bcache() <----------\  <- no jump to err_close, no blkdev_put()
   |                         |
   +->register_cache()       |  <- fails to set char *err
         |                   |
         +->cache_alloc() ---/  <- returns error

This patch sets `char *err` for this failure case so that register_cache()
will cause register_bcache() to correctly jump to err_close and do
cleanup.  This was tested under OOM conditions that triggered the bug.

Signed-off-by: Eric Wheeler <bcache@linux.ewheeler.net>
Cc: Kent Overstreet <kent.overstreet@gmail.com>
Cc: stable@vger.kernel.org
2016-08-18 20:28:23 -07:00
..
alloc.c bcache: bch_allocator_thread() is not freezable 2016-05-24 09:00:43 -06:00
bcache.h bcache: remove driver private bio splitting code 2015-08-13 12:31:40 -06:00
bset.c bcache: Allocate bounce buffers with GFP_NOWAIT 2014-08-04 15:23:03 -07:00
bset.h bcache: fix typo in bch_bkey_equal_header 2014-08-04 15:23:03 -07:00
btree.c bcache: use bio op accessors 2016-06-07 13:41:38 -06:00
btree.h bcache: try to set b->parent properly 2014-08-04 15:23:04 -07:00
closure.c bcache: update document info 2016-07-05 11:34:49 -06:00
closure.h bcache: update document info 2016-07-05 11:34:49 -06:00
debug.c bcache: use bio op accessors 2016-06-07 13:41:38 -06:00
debug.h
extents.c bcache: Fix a journal replay bug 2014-08-04 15:23:02 -07:00
extents.h bcache: Fix a journal replay bug 2014-08-04 15:23:02 -07:00
io.c block: simplify and cleanup bvec pool handling 2016-07-20 17:37:02 -06:00
journal.c block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH 2016-06-07 13:41:38 -06:00
journal.h
Kconfig
Makefile
movinggc.c bcache: use bio op accessors 2016-06-07 13:41:38 -06:00
request.c block: rename bio bi_rw to bi_opf 2016-08-07 14:41:02 -06:00
request.h
stats.c
stats.h
super.c bcache: register_bcache(): call blkdev_put() when cache_alloc() fails 2016-08-18 20:28:23 -07:00
sysfs.c bcache: remove nested function usage 2014-03-18 12:39:28 -07:00
sysfs.h
trace.c
util.c md: more open-coded offset_in_page() 2016-01-04 10:29:12 -05:00
util.h bcache: remove driver private bio splitting code 2015-08-13 12:31:40 -06:00
writeback.c bcache: use bio op accessors 2016-06-07 13:41:38 -06:00
writeback.h block: rename bio bi_rw to bi_opf 2016-08-07 14:41:02 -06:00