Lines Matching defs:cork
970 struct inet_cork *cork,
981 struct ip_options *opt = cork->opt;
990 struct rtable *rt = (struct rtable *)cork->dst;
998 mtu = cork->gso_size ? IP_MAX_MTU : cork->fragsize;
999 paged = !!cork->gso_size;
1001 if (cork->tx_flags & SKBTX_ANY_SW_TSTAMP &&
1011 if (cork->length + length > maxnonfragsize - fragheaderlen) {
1024 (!(flags & MSG_MORE) || cork->gso_size) &&
1042 cork->length += length;
1164 skb_shinfo(skb)->tx_flags = cork->tx_flags;
1165 cork->tx_flags = 0;
1247 cork->length -= length;
1253 static int ip_setup_cork(struct sock *sk, struct inet_cork *cork,
1263 cork->fragsize = ip_sk_use_pmtu(sk) ?
1266 if (!inetdev_valid_mtu(cork->fragsize))
1274 if (!cork->opt) {
1275 cork->opt = kmalloc(sizeof(struct ip_options) + 40,
1277 if (unlikely(!cork->opt))
1280 memcpy(cork->opt, &opt->opt, sizeof(struct ip_options) + opt->opt.optlen);
1281 cork->flags |= IPCORK_OPT;
1282 cork->addr = ipc->addr;
1285 cork->gso_size = ipc->gso_size;
1287 cork->dst = &rt->dst;
1291 cork->length = 0;
1292 cork->ttl = ipc->ttl;
1293 cork->tos = ipc->tos;
1294 cork->mark = ipc->sockc.mark;
1295 cork->priority = ipc->priority;
1296 cork->transmit_time = ipc->sockc.transmit_time;
1297 cork->tx_flags = 0;
1298 sock_tx_timestamp(sk, ipc->sockc.tsflags, &cork->tx_flags);
1328 err = ip_setup_cork(sk, &inet->cork.base, ipc, rtp);
1335 return __ip_append_data(sk, fl4, &sk->sk_write_queue, &inet->cork.base,
1347 struct inet_cork *cork;
1363 cork = &inet->cork.base;
1364 rt = (struct rtable *)cork->dst;
1365 if (cork->flags & IPCORK_OPT)
1366 opt = cork->opt;
1372 mtu = cork->gso_size ? IP_MAX_MTU : cork->fragsize;
1378 if (cork->length + size > maxnonfragsize - fragheaderlen) {
1388 cork->length += size;
1465 cork->length -= size;
1470 static void ip_cork_release(struct inet_cork *cork)
1472 cork->flags &= ~IPCORK_OPT;
1473 kfree(cork->opt);
1474 cork->opt = NULL;
1475 dst_release(cork->dst);
1476 cork->dst = NULL;
1486 struct inet_cork *cork)
1493 struct rtable *rt = (struct rtable *)cork->dst;
1532 if (cork->flags & IPCORK_OPT)
1533 opt = cork->opt;
1535 if (cork->ttl != 0)
1536 ttl = cork->ttl;
1545 iph->tos = (cork->tos != -1) ? cork->tos : inet->tos;
1554 ip_options_build(skb, opt, cork->addr, rt, 0);
1557 skb->priority = (cork->tos != -1) ? cork->priority: sk->sk_priority;
1558 skb->mark = cork->mark;
1559 skb->tstamp = cork->transmit_time;
1561 * Steal rt from cork.dst to avoid a pair of atomic_inc/atomic_dec
1564 cork->dst = NULL;
1581 ip_cork_release(cork);
1618 struct inet_cork *cork)
1625 ip_cork_release(cork);
1630 __ip_flush_pending_frames(sk, &sk->sk_write_queue, &inet_sk(sk)->cork.base);
1639 struct inet_cork *cork, unsigned int flags)
1649 cork->flags = 0;
1650 cork->addr = 0;
1651 cork->opt = NULL;
1652 err = ip_setup_cork(sk, cork, ipc, rtp);
1656 err = __ip_append_data(sk, fl4, &queue, cork,
1660 __ip_flush_pending_frames(sk, &queue, cork);
1664 return __ip_make_skb(sk, fl4, &queue, cork);