@@ -5172,10 +5172,11 @@ EXPORT_SYMBOL_GPL(qeth_core_hardsetup_card);
5172
5172
5173
5173
static int qeth_create_skb_frag (struct qeth_qdio_buffer * qethbuffer ,
5174
5174
struct qdio_buffer_element * element ,
5175
- struct sk_buff * * pskb , int offset , int * pfrag ,
5176
- int data_len )
5175
+ struct sk_buff * * pskb , int offset , int data_len )
5177
5176
{
5178
5177
struct page * page = virt_to_page (element -> addr );
5178
+ unsigned int next_frag ;
5179
+
5179
5180
if (* pskb == NULL ) {
5180
5181
if (qethbuffer -> rx_skb ) {
5181
5182
/* only if qeth_card.options.cq == QETH_CQ_ENABLED */
@@ -5190,28 +5191,19 @@ static int qeth_create_skb_frag(struct qeth_qdio_buffer *qethbuffer,
5190
5191
skb_reserve (* pskb , ETH_HLEN );
5191
5192
if (data_len <= QETH_RX_PULL_LEN ) {
5192
5193
skb_put_data (* pskb , element -> addr + offset , data_len );
5194
+ return 0 ;
5193
5195
} else {
5194
- get_page (page );
5195
5196
skb_put_data (* pskb , element -> addr + offset ,
5196
5197
QETH_RX_PULL_LEN );
5197
- skb_fill_page_desc (* pskb , * pfrag , page ,
5198
- offset + QETH_RX_PULL_LEN ,
5199
- data_len - QETH_RX_PULL_LEN );
5200
- (* pskb )-> data_len += data_len - QETH_RX_PULL_LEN ;
5201
- (* pskb )-> len += data_len - QETH_RX_PULL_LEN ;
5202
- (* pskb )-> truesize += data_len - QETH_RX_PULL_LEN ;
5203
- (* pfrag )++ ;
5198
+ data_len -= QETH_RX_PULL_LEN ;
5199
+ offset += QETH_RX_PULL_LEN ;
5200
+ /* fall through to add page frag for remaining data */
5204
5201
}
5205
- } else {
5206
- get_page (page );
5207
- skb_fill_page_desc (* pskb , * pfrag , page , offset , data_len );
5208
- (* pskb )-> data_len += data_len ;
5209
- (* pskb )-> len += data_len ;
5210
- (* pskb )-> truesize += data_len ;
5211
- (* pfrag )++ ;
5212
5202
}
5213
5203
5214
-
5204
+ next_frag = skb_shinfo (* pskb )-> nr_frags ;
5205
+ get_page (page );
5206
+ skb_add_rx_frag (* pskb , next_frag , page , offset , data_len , data_len );
5215
5207
return 0 ;
5216
5208
}
5217
5209
@@ -5234,7 +5226,6 @@ struct sk_buff *qeth_core_get_next_skb(struct qeth_card *card,
5234
5226
int data_len ;
5235
5227
int headroom = 0 ;
5236
5228
int use_rx_sg = 0 ;
5237
- int frag = 0 ;
5238
5229
5239
5230
/* qeth_hdr must not cross element boundaries */
5240
5231
if (element -> length < offset + sizeof (struct qeth_hdr )) {
@@ -5286,7 +5277,7 @@ struct sk_buff *qeth_core_get_next_skb(struct qeth_card *card,
5286
5277
if (data_len ) {
5287
5278
if (use_rx_sg ) {
5288
5279
if (qeth_create_skb_frag (qethbuffer , element ,
5289
- & skb , offset , & frag , data_len ))
5280
+ & skb , offset , data_len ))
5290
5281
goto no_mem ;
5291
5282
} else {
5292
5283
skb_put_data (skb , data_ptr , data_len );
0 commit comments