From: Joe Thornber Date: Thu, 11 Jun 2015 16:11:48 +0000 (+0100) Subject: dm thin metadata: fix a race when entering fail mode X-Git-Tag: v4.2-rc1~112^2~6 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=b1f11aff04cc86daa0757ada5deb669a92a8f0fb;p=karo-tx-linux.git dm thin metadata: fix a race when entering fail mode In dm_thin_find_block() the ->fail_io flag was checked outside the metadata device's root_lock, causing dm_thin_find_block() to race with the setting of this flag. Signed-off-by: Joe Thornber Signed-off-by: Mike Snitzer --- diff --git a/drivers/md/dm-thin-metadata.c b/drivers/md/dm-thin-metadata.c index 8b521e3e1e1b..48dfe3c4d6aa 100644 --- a/drivers/md/dm-thin-metadata.c +++ b/drivers/md/dm-thin-metadata.c @@ -1390,10 +1390,11 @@ int dm_thin_find_block(struct dm_thin_device *td, dm_block_t block, dm_block_t keys[2] = { td->id, block }; struct dm_btree_info *info; - if (pmd->fail_io) - return -EINVAL; - down_read(&pmd->root_lock); + if (pmd->fail_io) { + up_read(&pmd->root_lock); + return -EINVAL; + } if (can_issue_io) { info = &pmd->info;