From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Willem de Bruijn <willemb@google.com>,
Peter Oskolkov <posk@google.com>,
Eric Dumazet <edumazet@google.com>,
Florian Westphal <fw@strlen.de>,
"David S. Miller" <davem@davemloft.net>
Subject: [PATCH 4.14 120/126] ip: process in-order fragments efficiently
Date: Tue, 18 Sep 2018 00:42:48 +0200 [thread overview]
Message-ID: <20180917211711.842665758@linuxfoundation.org> (raw)
In-Reply-To: <20180917211703.481236999@linuxfoundation.org>
4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Peter Oskolkov <posk@google.com>
This patch changes the runtime behavior of IP defrag queue:
incoming in-order fragments are added to the end of the current
list/"run" of in-order fragments at the tail.
On some workloads, UDP stream performance is substantially improved:
RX: ./udp_stream -F 10 -T 2 -l 60
TX: ./udp_stream -c -H <host> -F 10 -T 5 -l 60
with this patchset applied on a 10Gbps receiver:
throughput=9524.18
throughput_units=Mbit/s
upstream (net-next):
throughput=4608.93
throughput_units=Mbit/s
Reported-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: Peter Oskolkov <posk@google.com>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Florian Westphal <fw@strlen.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit a4fd284a1f8fd4b6c59aa59db2185b1e17c5c11c)
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/ipv4/inet_fragment.c | 2
net/ipv4/ip_fragment.c | 110 +++++++++++++++++++++++++++++------------------
2 files changed, 70 insertions(+), 42 deletions(-)
--- a/net/ipv4/inet_fragment.c
+++ b/net/ipv4/inet_fragment.c
@@ -145,7 +145,7 @@ void inet_frag_destroy(struct inet_frag_
fp = xp;
} while (fp);
} else {
- sum_truesize = skb_rbtree_purge(&q->rb_fragments);
+ sum_truesize = inet_frag_rbtree_purge(&q->rb_fragments);
}
sum = sum_truesize + f->qsize;
--- a/net/ipv4/ip_fragment.c
+++ b/net/ipv4/ip_fragment.c
@@ -126,8 +126,8 @@ static u8 ip4_frag_ecn(u8 tos)
static struct inet_frags ip4_frags;
-static int ip_frag_reasm(struct ipq *qp, struct sk_buff *prev,
- struct net_device *dev);
+static int ip_frag_reasm(struct ipq *qp, struct sk_buff *skb,
+ struct sk_buff *prev_tail, struct net_device *dev);
static void ip4_frag_init(struct inet_frag_queue *q, const void *a)
@@ -219,7 +219,12 @@ static void ip_expire(struct timer_list
head = skb_rb_first(&qp->q.rb_fragments);
if (!head)
goto out;
- rb_erase(&head->rbnode, &qp->q.rb_fragments);
+ if (FRAG_CB(head)->next_frag)
+ rb_replace_node(&head->rbnode,
+ &FRAG_CB(head)->next_frag->rbnode,
+ &qp->q.rb_fragments);
+ else
+ rb_erase(&head->rbnode, &qp->q.rb_fragments);
memset(&head->rbnode, 0, sizeof(head->rbnode));
barrier();
}
@@ -320,7 +325,7 @@ static int ip_frag_reinit(struct ipq *qp
return -ETIMEDOUT;
}
- sum_truesize = skb_rbtree_purge(&qp->q.rb_fragments);
+ sum_truesize = inet_frag_rbtree_purge(&qp->q.rb_fragments);
sub_frag_mem_limit(qp->q.net, sum_truesize);
qp->q.flags = 0;
@@ -329,6 +334,7 @@ static int ip_frag_reinit(struct ipq *qp
qp->q.fragments = NULL;
qp->q.rb_fragments = RB_ROOT;
qp->q.fragments_tail = NULL;
+ qp->q.last_run_head = NULL;
qp->iif = 0;
qp->ecn = 0;
@@ -340,7 +346,7 @@ static int ip_frag_queue(struct ipq *qp,
{
struct net *net = container_of(qp->q.net, struct net, ipv4.frags);
struct rb_node **rbn, *parent;
- struct sk_buff *skb1;
+ struct sk_buff *skb1, *prev_tail;
struct net_device *dev;
unsigned int fragsize;
int flags, offset;
@@ -418,38 +424,41 @@ static int ip_frag_queue(struct ipq *qp,
*/
/* Find out where to put this fragment. */
- skb1 = qp->q.fragments_tail;
- if (!skb1) {
- /* This is the first fragment we've received. */
- rb_link_node(&skb->rbnode, NULL, &qp->q.rb_fragments.rb_node);
- qp->q.fragments_tail = skb;
- } else if ((skb1->ip_defrag_offset + skb1->len) < end) {
- /* This is the common/special case: skb goes to the end. */
+ prev_tail = qp->q.fragments_tail;
+ if (!prev_tail)
+ ip4_frag_create_run(&qp->q, skb); /* First fragment. */
+ else if (prev_tail->ip_defrag_offset + prev_tail->len < end) {
+ /* This is the common case: skb goes to the end. */
/* Detect and discard overlaps. */
- if (offset < (skb1->ip_defrag_offset + skb1->len))
+ if (offset < prev_tail->ip_defrag_offset + prev_tail->len)
goto discard_qp;
- /* Insert after skb1. */
- rb_link_node(&skb->rbnode, &skb1->rbnode, &skb1->rbnode.rb_right);
- qp->q.fragments_tail = skb;
+ if (offset == prev_tail->ip_defrag_offset + prev_tail->len)
+ ip4_frag_append_to_last_run(&qp->q, skb);
+ else
+ ip4_frag_create_run(&qp->q, skb);
} else {
- /* Binary search. Note that skb can become the first fragment, but
- * not the last (covered above). */
+ /* Binary search. Note that skb can become the first fragment,
+ * but not the last (covered above).
+ */
rbn = &qp->q.rb_fragments.rb_node;
do {
parent = *rbn;
skb1 = rb_to_skb(parent);
if (end <= skb1->ip_defrag_offset)
rbn = &parent->rb_left;
- else if (offset >= skb1->ip_defrag_offset + skb1->len)
+ else if (offset >= skb1->ip_defrag_offset +
+ FRAG_CB(skb1)->frag_run_len)
rbn = &parent->rb_right;
else /* Found an overlap with skb1. */
goto discard_qp;
} while (*rbn);
/* Here we have parent properly set, and rbn pointing to
- * one of its NULL left/right children. Insert skb. */
+ * one of its NULL left/right children. Insert skb.
+ */
+ ip4_frag_init_run(skb);
rb_link_node(&skb->rbnode, parent, rbn);
+ rb_insert_color(&skb->rbnode, &qp->q.rb_fragments);
}
- rb_insert_color(&skb->rbnode, &qp->q.rb_fragments);
if (dev)
qp->iif = dev->ifindex;
@@ -476,7 +485,7 @@ static int ip_frag_queue(struct ipq *qp,
unsigned long orefdst = skb->_skb_refdst;
skb->_skb_refdst = 0UL;
- err = ip_frag_reasm(qp, skb, dev);
+ err = ip_frag_reasm(qp, skb, prev_tail, dev);
skb->_skb_refdst = orefdst;
return err;
}
@@ -495,7 +504,7 @@ err:
/* Build a new IP datagram from all its fragments. */
static int ip_frag_reasm(struct ipq *qp, struct sk_buff *skb,
- struct net_device *dev)
+ struct sk_buff *prev_tail, struct net_device *dev)
{
struct net *net = container_of(qp->q.net, struct net, ipv4.frags);
struct iphdr *iph;
@@ -519,10 +528,16 @@ static int ip_frag_reasm(struct ipq *qp,
fp = skb_clone(skb, GFP_ATOMIC);
if (!fp)
goto out_nomem;
- rb_replace_node(&skb->rbnode, &fp->rbnode, &qp->q.rb_fragments);
+ FRAG_CB(fp)->next_frag = FRAG_CB(skb)->next_frag;
+ if (RB_EMPTY_NODE(&skb->rbnode))
+ FRAG_CB(prev_tail)->next_frag = fp;
+ else
+ rb_replace_node(&skb->rbnode, &fp->rbnode,
+ &qp->q.rb_fragments);
if (qp->q.fragments_tail == skb)
qp->q.fragments_tail = fp;
skb_morph(skb, head);
+ FRAG_CB(skb)->next_frag = FRAG_CB(head)->next_frag;
rb_replace_node(&head->rbnode, &skb->rbnode,
&qp->q.rb_fragments);
consume_skb(head);
@@ -558,7 +573,7 @@ static int ip_frag_reasm(struct ipq *qp,
for (i = 0; i < skb_shinfo(head)->nr_frags; i++)
plen += skb_frag_size(&skb_shinfo(head)->frags[i]);
clone->len = clone->data_len = head->data_len - plen;
- skb->truesize += clone->truesize;
+ head->truesize += clone->truesize;
clone->csum = 0;
clone->ip_summed = head->ip_summed;
add_frag_mem_limit(qp->q.net, clone->truesize);
@@ -571,24 +586,36 @@ static int ip_frag_reasm(struct ipq *qp,
skb_push(head, head->data - skb_network_header(head));
/* Traverse the tree in order, to build frag_list. */
+ fp = FRAG_CB(head)->next_frag;
rbn = rb_next(&head->rbnode);
rb_erase(&head->rbnode, &qp->q.rb_fragments);
- while (rbn) {
- struct rb_node *rbnext = rb_next(rbn);
- fp = rb_to_skb(rbn);
- rb_erase(rbn, &qp->q.rb_fragments);
- rbn = rbnext;
- *nextp = fp;
- nextp = &fp->next;
- fp->prev = NULL;
- memset(&fp->rbnode, 0, sizeof(fp->rbnode));
- head->data_len += fp->len;
- head->len += fp->len;
- if (head->ip_summed != fp->ip_summed)
- head->ip_summed = CHECKSUM_NONE;
- else if (head->ip_summed == CHECKSUM_COMPLETE)
- head->csum = csum_add(head->csum, fp->csum);
- head->truesize += fp->truesize;
+ while (rbn || fp) {
+ /* fp points to the next sk_buff in the current run;
+ * rbn points to the next run.
+ */
+ /* Go through the current run. */
+ while (fp) {
+ *nextp = fp;
+ nextp = &fp->next;
+ fp->prev = NULL;
+ memset(&fp->rbnode, 0, sizeof(fp->rbnode));
+ head->data_len += fp->len;
+ head->len += fp->len;
+ if (head->ip_summed != fp->ip_summed)
+ head->ip_summed = CHECKSUM_NONE;
+ else if (head->ip_summed == CHECKSUM_COMPLETE)
+ head->csum = csum_add(head->csum, fp->csum);
+ head->truesize += fp->truesize;
+ fp = FRAG_CB(fp)->next_frag;
+ }
+ /* Move to the next run. */
+ if (rbn) {
+ struct rb_node *rbnext = rb_next(rbn);
+
+ fp = rb_to_skb(rbn);
+ rb_erase(rbn, &qp->q.rb_fragments);
+ rbn = rbnext;
+ }
}
sub_frag_mem_limit(qp->q.net, head->truesize);
@@ -624,6 +651,7 @@ static int ip_frag_reasm(struct ipq *qp,
qp->q.fragments = NULL;
qp->q.rb_fragments = RB_ROOT;
qp->q.fragments_tail = NULL;
+ qp->q.last_run_head = NULL;
return 0;
out_nomem:
next prev parent reply other threads:[~2018-09-18 4:36 UTC|newest]
Thread overview: 134+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-17 22:40 [PATCH 4.14 000/126] 4.14.71-stable review Greg Kroah-Hartman
2018-09-17 22:40 ` [PATCH 4.14 001/126] i2c: xiic: Make the start and the byte count write atomic Greg Kroah-Hartman
2018-09-17 22:40 ` [PATCH 4.14 002/126] i2c: i801: fix DNVs SMBCTRL register offset Greg Kroah-Hartman
2018-09-17 22:40 ` [PATCH 4.14 003/126] scsi: lpfc: Correct MDS diag and nvmet configuration Greg Kroah-Hartman
2018-09-17 22:40 ` [PATCH 4.14 004/126] nbd: dont allow invalid blocksize settings Greg Kroah-Hartman
2018-09-17 22:40 ` [PATCH 4.14 005/126] block: bfq: swap puts in bfqg_and_blkg_put Greg Kroah-Hartman
2018-09-17 22:40 ` [PATCH 4.14 006/126] android: binder: fix the race mmap and alloc_new_buf_locked Greg Kroah-Hartman
2018-09-17 22:40 ` [PATCH 4.14 007/126] MIPS: VDSO: Match data page cache colouring when D$ aliases Greg Kroah-Hartman
2018-09-17 22:40 ` [PATCH 4.14 008/126] SMB3: Backup intent flag missing for directory opens with backupuid mounts Greg Kroah-Hartman
2018-09-17 22:40 ` [PATCH 4.14 009/126] smb3: check for and properly advertise directory lease support Greg Kroah-Hartman
2018-09-17 22:40 ` [PATCH 4.14 010/126] Btrfs: fix data corruption when deduplicating between different files Greg Kroah-Hartman
2018-09-17 22:40 ` [PATCH 4.14 011/126] KVM: s390: vsie: copy wrapping keys to right place Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 012/126] KVM: VMX: Do not allow reexecute_instruction() when skipping MMIO instr Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 013/126] ALSA: hda - Fix cancel_work_sync() stall from jackpoll work Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 014/126] cpu/hotplug: Adjust misplaced smb() in cpuhp_thread_fun() Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 015/126] cpu/hotplug: Prevent state corruption on error rollback Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 016/126] x86/microcode: Make sure boot_cpu_data.microcode is up-to-date Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 017/126] x86/microcode: Update the new microcode revision unconditionally Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 018/126] switchtec: Fix Spectre v1 vulnerability Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 019/126] crypto: aes-generic - fix aes-generic regression on powerpc Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 020/126] tpm: separate cmd_ready/go_idle from runtime_pm Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 021/126] ARC: [plat-axs*]: Enable SWAP Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 022/126] misc: mic: SCIF Fix scif_get_new_port() error handling Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 023/126] ethtool: Remove trailing semicolon for static inline Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 024/126] i2c: aspeed: Add an explicit type casting for *get_clk_reg_val Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 025/126] Bluetooth: h5: Fix missing dependency on BT_HCIUART_SERDEV Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 026/126] gpio: tegra: Move driver registration to subsys_init level Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 027/126] powerpc/powernv: Fix concurrency issue with npu->mmio_atsd_usage Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 028/126] selftests/bpf: fix a typo in map in map test Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 029/126] media: davinci: vpif_display: Mix memory leak on probe error path Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 030/126] media: dw2102: Fix memleak on sequence of probes Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 031/126] net: phy: Fix the register offsets in Broadcom iProc mdio mux driver Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 032/126] blk-mq: fix updating tags depth Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 033/126] scsi: target: fix __transport_register_session locking Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 034/126] md/raid5: fix data corruption of replacements after originals dropped Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 035/126] timers: Clear timer_base::must_forward_clk with timer_base::lock held Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 036/126] media: camss: csid: Configure data type and decode format properly Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 037/126] gpu: ipu-v3: default to id 0 on missing OF alias Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 038/126] misc: ti-st: Fix memory leak in the error path of probe() Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 039/126] uio: potential double frees if __uio_register_device() fails Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 040/126] firmware: vpd: Fix section enabled flag on vpd_section_destroy Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 041/126] Drivers: hv: vmbus: Cleanup synic memory free path Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 042/126] tty: rocket: Fix possible buffer overwrite on register_PCI Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 043/126] f2fs: fix to active page in lru list for read path Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 044/126] f2fs: do not set free of current section Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 045/126] f2fs: fix defined but not used build warnings Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 046/126] perf tools: Allow overriding MAX_NR_CPUS at compile time Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 047/126] NFSv4.0 fix client reference leak in callback Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 048/126] perf c2c report: Fix crash for empty browser Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 049/126] perf evlist: Fix error out while applying initial delay and LBR Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 050/126] macintosh/via-pmu: Add missing mmio accessors Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 051/126] ath9k: report tx status on EOSP Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 052/126] ath9k_hw: fix channel maximum power level test Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 053/126] ath10k: prevent active scans on potential unusable channels Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 054/126] wlcore: Set rx_status boottime_ns field on rx Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 055/126] rpmsg: core: add support to power domains for devices Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 056/126] MIPS: Fix ISA virt/bus conversion for non-zero PHYS_OFFSET Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 057/126] ata: libahci: Allow reconfigure of DEVSLP register Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 058/126] ata: libahci: Correct setting " Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 059/126] scsi: 3ware: fix return 0 on the error path of probe Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 060/126] tools/testing/nvdimm: kaddr and pfn can be NULL to ->direct_access() Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 061/126] ath10k: disable bundle mgmt tx completion event support Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 062/126] Bluetooth: hidp: Fix handling of strncpy for hid->name information Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 063/126] x86/mm: Remove in_nmi() warning from vmalloc_fault() Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 064/126] pinctrl: imx: off by one in imx_pinconf_group_dbg_show() Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 065/126] gpio: ml-ioh: Fix buffer underwrite on probe error path Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 066/126] pinctrl/amd: only handle irq if it is pending and unmasked Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 067/126] net: mvneta: fix mtu change on port without link Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 068/126] f2fs: try grabbing node page lock aggressively in sync scenario Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 069/126] pktcdvd: Fix possible Spectre-v1 for pkt_devs Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 070/126] f2fs: fix to skip GC if type in SSA and SIT is inconsistent Greg Kroah-Hartman
2018-09-17 22:41 ` [PATCH 4.14 071/126] tpm_tis_spi: Pass the SPI IRQ down to the driver Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 072/126] tpm/tpm_i2c_infineon: switch to i2c_lock_bus(..., I2C_LOCK_SEGMENT) Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 073/126] f2fs: fix to do sanity check with reserved blkaddr of inline inode Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 074/126] MIPS: Octeon: add missing of_node_put() Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 075/126] MIPS: generic: fix " Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 076/126] net: dcb: For wild-card lookups, use priority -1, not 0 Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 077/126] dm cache: only allow a single io_mode cache feature to be requested Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 078/126] Input: atmel_mxt_ts - only use first T9 instance Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 079/126] media: s5p-mfc: Fix buffer look up in s5p_mfc_handle_frame_{new, copy_time} functions Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 080/126] partitions/aix: append null character to print data from disk Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 081/126] partitions/aix: fix usage of uninitialized lv_info and lvname structures Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 082/126] media: helene: fix xtal frequency setting at power on Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 083/126] f2fs: fix to wait on page writeback before updating page Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 084/126] f2fs: Fix uninitialized return in f2fs_ioc_shutdown() Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 085/126] iommu/ipmmu-vmsa: Fix allocation in atomic context Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 086/126] mfd: ti_am335x_tscadc: Fix struct clk memory leak Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 087/126] f2fs: fix to do sanity check with {sit,nat}_ver_bitmap_bytesize Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 088/126] NFSv4.1: Fix a potential layoutget/layoutrecall deadlock Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 089/126] MIPS: WARN_ON invalid DMA cache maintenance, not BUG_ON Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 090/126] RDMA/cma: Do not ignore net namespace for unbound cm_id Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 091/126] drm/i915: set DP Main Stream Attribute for color range on DDI platforms Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 092/126] inet: frags: change inet_frags_init_net() return value Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 093/126] inet: frags: add a pointer to struct netns_frags Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 094/126] inet: frags: refactor ipfrag_init() Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 095/126] inet: frags: Convert timers to use timer_setup() Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 096/126] inet: frags: refactor ipv6_frag_init() Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 097/126] inet: frags: refactor lowpan_net_frag_init() Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 098/126] ipv6: export ip6 fragments sysctl to unprivileged users Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 099/126] rhashtable: add schedule points Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 100/126] inet: frags: use rhashtables for reassembly units Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 101/126] inet: frags: remove some helpers Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 102/126] inet: frags: get rif of inet_frag_evicting() Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 103/126] inet: frags: remove inet_frag_maybe_warn_overflow() Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 104/126] inet: frags: break the 2GB limit for frags storage Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 105/126] inet: frags: do not clone skb in ip_expire() Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 106/126] ipv6: frags: rewrite ip6_expire_frag_queue() Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 107/126] rhashtable: reorganize struct rhashtable layout Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 108/126] inet: frags: reorganize struct netns_frags Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 109/126] inet: frags: get rid of ipfrag_skb_cb/FRAG_CB Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 110/126] inet: frags: fix ip6frag_low_thresh boundary Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 111/126] ip: discard IPv4 datagrams with overlapping segments Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 112/126] net: speed up skb_rbtree_purge() Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 113/126] net: modify skb_rbtree_purge to return the truesize of all purged skbs Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 114/126] ipv6: defrag: drop non-last frags smaller than min mtu Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 115/126] net: pskb_trim_rcsum() and CHECKSUM_COMPLETE are friends Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 116/126] net: add rb_to_skb() and other rb tree helpers Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 117/126] net: sk_buff rbnode reorg Greg Kroah-Hartman
2018-10-04 20:13 ` Mitch Harder
2018-11-29 10:33 ` Greg Kroah-Hartman
2018-11-29 15:07 ` Mitch Harder
2018-09-17 22:42 ` [PATCH 4.14 118/126] ipv4: frags: precedence bug in ip_expire() Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 119/126] ip: add helpers to process in-order fragments faster Greg Kroah-Hartman
2018-09-17 22:42 ` Greg Kroah-Hartman [this message]
2018-09-17 22:42 ` [PATCH 4.14 121/126] ip: frags: fix crash in ip_do_fragment() Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 122/126] mtd: ubi: wl: Fix error return code in ubi_wl_init() Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 123/126] tun: fix use after free for ptr_ring Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 124/126] tuntap: fix use after free during release Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 125/126] autofs: fix autofs_sbi() does not check super block type Greg Kroah-Hartman
2018-09-17 22:42 ` [PATCH 4.14 126/126] mm: get rid of vmacache_flush_all() entirely Greg Kroah-Hartman
2018-09-17 23:59 ` [PATCH 4.14 000/126] 4.14.71-stable review Nathan Chancellor
2018-09-18 7:44 ` Greg Kroah-Hartman
2018-09-18 16:20 ` Guenter Roeck
2018-09-18 16:53 ` Naresh Kamboju
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180917211711.842665758@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=fw@strlen.de \
--cc=linux-kernel@vger.kernel.org \
--cc=posk@google.com \
--cc=stable@vger.kernel.org \
--cc=willemb@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).