|
@@ -207,10 +207,13 @@ _shift_data_right_pages(struct page **pages, size_t pgto_base,
|
|
|
pgfrom_base -= copy;
|
|
|
|
|
|
vto = kmap_atomic(*pgto);
|
|
|
- vfrom = kmap_atomic(*pgfrom);
|
|
|
- memmove(vto + pgto_base, vfrom + pgfrom_base, copy);
|
|
|
+ if (*pgto != *pgfrom) {
|
|
|
+ vfrom = kmap_atomic(*pgfrom);
|
|
|
+ memcpy(vto + pgto_base, vfrom + pgfrom_base, copy);
|
|
|
+ kunmap_atomic(vfrom);
|
|
|
+ } else
|
|
|
+ memmove(vto + pgto_base, vto + pgfrom_base, copy);
|
|
|
flush_dcache_page(*pgto);
|
|
|
- kunmap_atomic(vfrom);
|
|
|
kunmap_atomic(vto);
|
|
|
|
|
|
} while ((len -= copy) != 0);
|