X-Git-Url: http://git.cascardo.info/?a=blobdiff_plain;f=net%2Fsunrpc%2Fxdr.c;h=1504bb11e4f351d1a79835fa990ac8f22751faf3;hb=0a733e6effb4a429551d8b000aa02750cc7e04ba;hp=75edcfad6e264f299fac566f16bb1cfd82615d2a;hpb=d3c926264a92e5ea448add3e883530e1edad3ce2;p=cascardo%2Flinux.git 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, 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);