@@ -945,8 +945,8 @@ static struct net_iov *io_zcrx_alloc_fallback(struct io_zcrx_area *area)
945945}
946946
947947static ssize_t io_zcrx_copy_chunk (struct io_kiocb * req , struct io_zcrx_ifq * ifq ,
948- void * src_base , struct page * src_page ,
949- unsigned int src_offset , size_t len )
948+ struct page * src_page , unsigned int src_offset ,
949+ size_t len )
950950{
951951 struct io_zcrx_area * area = ifq -> area ;
952952 size_t copied = 0 ;
@@ -960,7 +960,7 @@ static ssize_t io_zcrx_copy_chunk(struct io_kiocb *req, struct io_zcrx_ifq *ifq,
960960 const int dst_off = 0 ;
961961 struct net_iov * niov ;
962962 struct page * dst_page ;
963- void * dst_addr ;
963+ void * dst_addr , * src_addr ;
964964
965965 niov = io_zcrx_alloc_fallback (area );
966966 if (!niov ) {
@@ -970,13 +970,11 @@ static ssize_t io_zcrx_copy_chunk(struct io_kiocb *req, struct io_zcrx_ifq *ifq,
970970
971971 dst_page = io_zcrx_iov_page (niov );
972972 dst_addr = kmap_local_page (dst_page );
973- if (src_page )
974- src_base = kmap_local_page (src_page );
973+ src_addr = kmap_local_page (src_page );
975974
976- memcpy (dst_addr , src_base + src_offset , copy_size );
975+ memcpy (dst_addr , src_addr + src_offset , copy_size );
977976
978- if (src_page )
979- kunmap_local (src_base );
977+ kunmap_local (src_addr );
980978 kunmap_local (dst_addr );
981979
982980 if (!io_zcrx_queue_cqe (req , niov , ifq , dst_off , copy_size )) {
@@ -1005,7 +1003,7 @@ static int io_zcrx_copy_frag(struct io_kiocb *req, struct io_zcrx_ifq *ifq,
10051003
10061004 skb_frag_foreach_page (frag , off , len ,
10071005 page , p_off , p_len , t ) {
1008- ret = io_zcrx_copy_chunk (req , ifq , NULL , page , p_off , p_len );
1006+ ret = io_zcrx_copy_chunk (req , ifq , page , p_off , p_len );
10091007 if (ret < 0 )
10101008 return copied ? copied : ret ;
10111009 copied += ret ;
@@ -1067,8 +1065,9 @@ io_zcrx_recv_skb(read_descriptor_t *desc, struct sk_buff *skb,
10671065 size_t to_copy ;
10681066
10691067 to_copy = min_t (size_t , skb_headlen (skb ) - offset , len );
1070- copied = io_zcrx_copy_chunk (req , ifq , skb -> data , NULL ,
1071- offset , to_copy );
1068+ copied = io_zcrx_copy_chunk (req , ifq , virt_to_page (skb -> data ),
1069+ offset_in_page (skb -> data ) + offset ,
1070+ to_copy );
10721071 if (copied < 0 ) {
10731072 ret = copied ;
10741073 goto out ;
0 commit comments