diff options
Diffstat (limited to 'net')
| -rw-r--r-- | net/sunrpc/xdr.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/net/sunrpc/xdr.c b/net/sunrpc/xdr.c index 75edcfad6e26..1504bb11e4f3 100644 --- a/net/sunrpc/xdr.c +++ b/net/sunrpc/xdr.c | |||
| @@ -207,10 +207,13 @@ _shift_data_right_pages(struct page **pages, size_t pgto_base, | |||
| 207 | pgfrom_base -= copy; | 207 | pgfrom_base -= copy; |
| 208 | 208 | ||
| 209 | vto = kmap_atomic(*pgto); | 209 | vto = kmap_atomic(*pgto); |
| 210 | vfrom = kmap_atomic(*pgfrom); | 210 | if (*pgto != *pgfrom) { |
| 211 | memmove(vto + pgto_base, vfrom + pgfrom_base, copy); | 211 | vfrom = kmap_atomic(*pgfrom); |
| 212 | memcpy(vto + pgto_base, vfrom + pgfrom_base, copy); | ||
| 213 | kunmap_atomic(vfrom); | ||
| 214 | } else | ||
| 215 | memmove(vto + pgto_base, vto + pgfrom_base, copy); | ||
| 212 | flush_dcache_page(*pgto); | 216 | flush_dcache_page(*pgto); |
| 213 | kunmap_atomic(vfrom); | ||
| 214 | kunmap_atomic(vto); | 217 | kunmap_atomic(vto); |
| 215 | 218 | ||
| 216 | } while ((len -= copy) != 0); | 219 | } while ((len -= copy) != 0); |
