提交 186cec31 编写于 作者: L Linus Torvalds

Merge tag 'dm-3.17-fix2' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm

Pull device mapper fix from Mike Snitzer:
 "Fix a race in the DM cache target that caused dirty blocks to be
  marked as clean.  This could cause no writeback to occur or spurious
  dirty block counts"

* tag 'dm-3.17-fix2' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm:
  dm cache: fix race causing dirty blocks to be marked as clean
...@@ -895,8 +895,8 @@ static void migration_success_pre_commit(struct dm_cache_migration *mg) ...@@ -895,8 +895,8 @@ static void migration_success_pre_commit(struct dm_cache_migration *mg)
struct cache *cache = mg->cache; struct cache *cache = mg->cache;
if (mg->writeback) { if (mg->writeback) {
cell_defer(cache, mg->old_ocell, false);
clear_dirty(cache, mg->old_oblock, mg->cblock); clear_dirty(cache, mg->old_oblock, mg->cblock);
cell_defer(cache, mg->old_ocell, false);
cleanup_migration(mg); cleanup_migration(mg);
return; return;
...@@ -951,13 +951,13 @@ static void migration_success_post_commit(struct dm_cache_migration *mg) ...@@ -951,13 +951,13 @@ static void migration_success_post_commit(struct dm_cache_migration *mg)
} }
} else { } else {
clear_dirty(cache, mg->new_oblock, mg->cblock);
if (mg->requeue_holder) if (mg->requeue_holder)
cell_defer(cache, mg->new_ocell, true); cell_defer(cache, mg->new_ocell, true);
else { else {
bio_endio(mg->new_ocell->holder, 0); bio_endio(mg->new_ocell->holder, 0);
cell_defer(cache, mg->new_ocell, false); cell_defer(cache, mg->new_ocell, false);
} }
clear_dirty(cache, mg->new_oblock, mg->cblock);
cleanup_migration(mg); cleanup_migration(mg);
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册