bcache: bugfix for race between moving_gc and bucket_invalidate
authorKent Overstreet <kmo@daterainc.com>
Mon, 16 Dec 2013 22:12:09 +0000 (14:12 -0800)
committerKent Overstreet <kmo@daterainc.com>
Mon, 16 Dec 2013 22:22:58 +0000 (14:22 -0800)
commit6d3d1a9c542b19dff1c7d7c8354d0869e4655287
tree92afafc81797f8ad6ed2548e25f9818f7f67a8d4
parentbf0a628a95dba7f983b6047cea695fb066fb2512
bcache: bugfix for race between moving_gc and bucket_invalidate

There is a possibility for a bucket to be invalidated by the allocator
while moving_gc was copying it's contents to another bucket, if the
bucket only held cached data. To prevent this moving checks for
a stale ptr (to an invalidated bucket), before and after reads.
It it finds one, it simply ignores moving that data. This only
affects bcache if the moving_gc was turned on, note that it's
off by default.

Signed-off-by: Nicholas Swenson <nks@daterainc.com>
Signed-off-by: Kent Overstreet <kmo@daterainc.com>
drivers/md/bcache/movinggc.c