]> git.karo-electronics.de Git - karo-tx-linux.git/commit
For normal kernel pages, CPU cache is synchronized by the dma layer.
authorMikulas Patocka <mpatocka@redhat.com>
Mon, 25 Jul 2011 00:49:51 +0000 (10:49 +1000)
committerStephen Rothwell <sfr@canb.auug.org.au>
Mon, 25 Jul 2011 00:49:51 +0000 (10:49 +1000)
commit67cc05b6c89490114e4258bd37e18d740230692d
treec2036524a1fa7ee1bf9b1772375d2d3909e6a5ea
parent238495f05ba578d7cb4634fe35ac39778e88bccd
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