Skip to content

Commit b6f72f9

Browse files
julianwiedmanndavem330
authored andcommitted
s390/qeth: clean up page frag creation
Replace the open-coded skb_add_rx_frag(), and use a fall-through to remove some duplicated code. Signed-off-by: Julian Wiedmann <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 9400c53 commit b6f72f9

File tree

1 file changed

+11
-20
lines changed

1 file changed

+11
-20
lines changed

drivers/s390/net/qeth_core_main.c

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5172,10 +5172,11 @@ EXPORT_SYMBOL_GPL(qeth_core_hardsetup_card);
51725172

51735173
static int qeth_create_skb_frag(struct qeth_qdio_buffer *qethbuffer,
51745174
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)
51775176
{
51785177
struct page *page = virt_to_page(element->addr);
5178+
unsigned int next_frag;
5179+
51795180
if (*pskb == NULL) {
51805181
if (qethbuffer->rx_skb) {
51815182
/* only if qeth_card.options.cq == QETH_CQ_ENABLED */
@@ -5190,28 +5191,19 @@ static int qeth_create_skb_frag(struct qeth_qdio_buffer *qethbuffer,
51905191
skb_reserve(*pskb, ETH_HLEN);
51915192
if (data_len <= QETH_RX_PULL_LEN) {
51925193
skb_put_data(*pskb, element->addr + offset, data_len);
5194+
return 0;
51935195
} else {
5194-
get_page(page);
51955196
skb_put_data(*pskb, element->addr + offset,
51965197
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 */
52045201
}
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)++;
52125202
}
52135203

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);
52155207
return 0;
52165208
}
52175209

@@ -5234,7 +5226,6 @@ struct sk_buff *qeth_core_get_next_skb(struct qeth_card *card,
52345226
int data_len;
52355227
int headroom = 0;
52365228
int use_rx_sg = 0;
5237-
int frag = 0;
52385229

52395230
/* qeth_hdr must not cross element boundaries */
52405231
if (element->length < offset + sizeof(struct qeth_hdr)) {
@@ -5286,7 +5277,7 @@ struct sk_buff *qeth_core_get_next_skb(struct qeth_card *card,
52865277
if (data_len) {
52875278
if (use_rx_sg) {
52885279
if (qeth_create_skb_frag(qethbuffer, element,
5289-
&skb, offset, &frag, data_len))
5280+
&skb, offset, data_len))
52905281
goto no_mem;
52915282
} else {
52925283
skb_put_data(skb, data_ptr, data_len);

0 commit comments

Comments
 (0)