]> git.baikalelectronics.ru Git - kernel.git/commit
dm io: flush cpu cache with vmapped io
authorMikulas Patocka <mpatocka@redhat.com>
Tue, 2 Aug 2011 11:32:01 +0000 (12:32 +0100)
committerAlasdair G Kergon <agk@redhat.com>
Tue, 2 Aug 2011 11:32:01 +0000 (12:32 +0100)
commitd30dc994d44ac9e65b2b76e1bf48ecae308b922f
tree8acd6ee46ab5a557afcd1c491b55a68830252301
parent62850df2a5901b7f6f627c7c65a3f4f777d7a7ee
dm io: flush cpu cache with vmapped io

For normal kernel pages, CPU cache is synchronized by the dma layer.
However, this is not done for pages allocated with vmalloc. If we do I/O
to/from vmallocated pages, we must synchronize CPU cache explicitly.

Prior to doing I/O on vmallocated page we must call
flush_kernel_vmap_range to flush dirty cache on the virtual address.
After finished read we must call invalidate_kernel_vmap_range to
invalidate cache on the virtual address, so that accesses to the virtual
address return newly read data and not stale data from CPU cache.

This patch fixes metadata corruption on dm-snapshots on PA-RISC and
possibly other architectures with caches indexed by virtual address.

Cc: stable <stable@kernel.org>
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
drivers/md/dm-io.c