diff options
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/scatterwalk.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/crypto/scatterwalk.c b/crypto/scatterwalk.c index a664231217..81afd1790a 100644 --- a/crypto/scatterwalk.c +++ b/crypto/scatterwalk.c | |||
@@ -59,8 +59,12 @@ EXPORT_SYMBOL_GPL(scatterwalk_map); | |||
59 | static void scatterwalk_pagedone(struct scatter_walk *walk, int out, | 59 | static void scatterwalk_pagedone(struct scatter_walk *walk, int out, |
60 | unsigned int more) | 60 | unsigned int more) |
61 | { | 61 | { |
62 | if (out) | 62 | if (out) { |
63 | flush_dcache_page(scatterwalk_page(walk)); | 63 | struct page *page; |
64 | |||
65 | page = walk->sg->page + ((walk->offset - 1) >> PAGE_SHIFT); | ||
66 | flush_dcache_page(page); | ||
67 | } | ||
64 | 68 | ||
65 | if (more) { | 69 | if (more) { |
66 | walk->offset += PAGE_SIZE - 1; | 70 | walk->offset += PAGE_SIZE - 1; |
@@ -91,7 +95,7 @@ void scatterwalk_copychunks(void *buf, struct scatter_walk *walk, | |||
91 | memcpy_dir(buf, vaddr, len_this_page, out); | 95 | memcpy_dir(buf, vaddr, len_this_page, out); |
92 | scatterwalk_unmap(vaddr, out); | 96 | scatterwalk_unmap(vaddr, out); |
93 | 97 | ||
94 | scatterwalk_advance(walk, nbytes); | 98 | scatterwalk_advance(walk, len_this_page); |
95 | 99 | ||
96 | if (nbytes == len_this_page) | 100 | if (nbytes == len_this_page) |
97 | break; | 101 | break; |