diff -druNp --no-dereference linux-libre-4.9.191-gnu/arch/arm/kvm/mmio.c linux-libre-4.9.192-gnu/arch/arm/kvm/mmio.c
--- linux-libre-4.9.191-gnu/arch/arm/kvm/mmio.c	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/arch/arm/kvm/mmio.c	2019-09-10 05:31:05.000000000 -0400
@@ -98,6 +98,12 @@ int kvm_handle_mmio_return(struct kvm_vc
 	unsigned int len;
 	int mask;
 
+	/* Detect an already handled MMIO return */
+	if (unlikely(!vcpu->mmio_needed))
+		return 0;
+
+	vcpu->mmio_needed = 0;
+
 	if (!run->mmio.is_write) {
 		len = run->mmio.len;
 		if (len > sizeof(unsigned long))
@@ -200,6 +206,7 @@ int io_mem_abort(struct kvm_vcpu *vcpu,
 	run->mmio.is_write	= is_write;
 	run->mmio.phys_addr	= fault_ipa;
 	run->mmio.len		= len;
+	vcpu->mmio_needed	= 1;
 
 	if (!ret) {
 		/* We handled the access successfully in the kernel. */
diff -druNp --no-dereference linux-libre-4.9.191-gnu/arch/x86/kernel/apic/apic.c linux-libre-4.9.192-gnu/arch/x86/kernel/apic/apic.c
--- linux-libre-4.9.191-gnu/arch/x86/kernel/apic/apic.c	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/arch/x86/kernel/apic/apic.c	2019-09-10 05:31:05.000000000 -0400
@@ -1067,10 +1067,6 @@ void clear_local_APIC(void)
 	apic_write(APIC_LVT0, v | APIC_LVT_MASKED);
 	v = apic_read(APIC_LVT1);
 	apic_write(APIC_LVT1, v | APIC_LVT_MASKED);
-	if (!x2apic_enabled()) {
-		v = apic_read(APIC_LDR) & ~APIC_LDR_MASK;
-		apic_write(APIC_LDR, v);
-	}
 	if (maxlvt >= 4) {
 		v = apic_read(APIC_LVTPC);
 		apic_write(APIC_LVTPC, v | APIC_LVT_MASKED);
diff -druNp --no-dereference linux-libre-4.9.191-gnu/drivers/bluetooth/btqca.c linux-libre-4.9.192-gnu/drivers/bluetooth/btqca.c
--- linux-libre-4.9.191-gnu/drivers/bluetooth/btqca.c	2019-09-06 08:18:51.000000000 -0400
+++ linux-libre-4.9.192-gnu/drivers/bluetooth/btqca.c	2019-09-10 16:02:47.000000000 -0400
@@ -363,6 +363,9 @@ int qca_uart_setup_rome(struct hci_dev *
 		return err;
 	}
 
+	/* Give the controller some time to get ready to receive the NVM */
+	msleep(10);
+
 	/* Download NVM configuration */
 	config.type = TLV_TYPE_NVM;
 	snprintf(config.fwname, sizeof(config.fwname), "/*(DEBLOBBED)*/",
diff -druNp --no-dereference linux-libre-4.9.191-gnu/drivers/infiniband/hw/mlx4/mad.c linux-libre-4.9.192-gnu/drivers/infiniband/hw/mlx4/mad.c
--- linux-libre-4.9.191-gnu/drivers/infiniband/hw/mlx4/mad.c	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/drivers/infiniband/hw/mlx4/mad.c	2019-09-10 05:31:05.000000000 -0400
@@ -1643,8 +1643,6 @@ tx_err:
 				    tx_buf_size, DMA_TO_DEVICE);
 		kfree(tun_qp->tx_ring[i].buf.addr);
 	}
-	kfree(tun_qp->tx_ring);
-	tun_qp->tx_ring = NULL;
 	i = MLX4_NUM_TUNNEL_BUFS;
 err:
 	while (i > 0) {
@@ -1653,6 +1651,8 @@ err:
 				    rx_buf_size, DMA_FROM_DEVICE);
 		kfree(tun_qp->ring[i].addr);
 	}
+	kfree(tun_qp->tx_ring);
+	tun_qp->tx_ring = NULL;
 	kfree(tun_qp->ring);
 	tun_qp->ring = NULL;
 	return -ENOMEM;
diff -druNp --no-dereference linux-libre-4.9.191-gnu/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c linux-libre-4.9.192-gnu/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c
--- linux-libre-4.9.191-gnu/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c	2019-09-10 05:31:05.000000000 -0400
@@ -2781,8 +2781,10 @@ static ssize_t blocked_fl_write(struct f
 		return -ENOMEM;
 
 	err = bitmap_parse_user(ubuf, count, t, adap->sge.egr_sz);
-	if (err)
+	if (err) {
+		kvfree(t);
 		return err;
+	}
 
 	bitmap_copy(adap->sge.blocked_fl, t, adap->sge.egr_sz);
 	t4_free_mem(t);
diff -druNp --no-dereference linux-libre-4.9.191-gnu/drivers/net/ethernet/ibm/ibmveth.c linux-libre-4.9.192-gnu/drivers/net/ethernet/ibm/ibmveth.c
--- linux-libre-4.9.191-gnu/drivers/net/ethernet/ibm/ibmveth.c	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/drivers/net/ethernet/ibm/ibmveth.c	2019-09-10 05:31:05.000000000 -0400
@@ -1557,7 +1557,7 @@ static int ibmveth_probe(struct vio_dev
 	struct net_device *netdev;
 	struct ibmveth_adapter *adapter;
 	unsigned char *mac_addr_p;
-	unsigned int *mcastFilterSize_p;
+	__be32 *mcastFilterSize_p;
 	long ret;
 	unsigned long ret_attr;
 
@@ -1579,8 +1579,9 @@ static int ibmveth_probe(struct vio_dev
 		return -EINVAL;
 	}
 
-	mcastFilterSize_p = (unsigned int *)vio_get_attribute(dev,
-						VETH_MCAST_FILTER_SIZE, NULL);
+	mcastFilterSize_p = (__be32 *)vio_get_attribute(dev,
+							VETH_MCAST_FILTER_SIZE,
+							NULL);
 	if (!mcastFilterSize_p) {
 		dev_err(&dev->dev, "Can't find VETH_MCAST_FILTER_SIZE "
 			"attribute\n");
@@ -1597,7 +1598,7 @@ static int ibmveth_probe(struct vio_dev
 
 	adapter->vdev = dev;
 	adapter->netdev = netdev;
-	adapter->mcastFilterSize = *mcastFilterSize_p;
+	adapter->mcastFilterSize = be32_to_cpu(*mcastFilterSize_p);
 	adapter->pool_config = 0;
 
 	netif_napi_add(netdev, &adapter->napi, ibmveth_poll, 16);
diff -druNp --no-dereference linux-libre-4.9.191-gnu/drivers/net/ethernet/myricom/myri10ge/myri10ge.c linux-libre-4.9.192-gnu/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
--- linux-libre-4.9.191-gnu/drivers/net/ethernet/myricom/myri10ge/myri10ge.c	2019-09-06 08:10:38.000000000 -0400
+++ linux-libre-4.9.192-gnu/drivers/net/ethernet/myricom/myri10ge/myri10ge.c	2019-09-10 15:54:36.000000000 -0400
@@ -4103,7 +4103,7 @@ static int myri10ge_probe(struct pci_dev
 	 * setup (if available). */
 	status = myri10ge_request_irq(mgp);
 	if (status != 0)
-		goto abort_with_firmware;
+		goto abort_with_slices;
 	myri10ge_free_irq(mgp);
 
 	/* Save configuration space to be restored if the
diff -druNp --no-dereference linux-libre-4.9.191-gnu/drivers/net/ethernet/renesas/ravb_main.c linux-libre-4.9.192-gnu/drivers/net/ethernet/renesas/ravb_main.c
--- linux-libre-4.9.191-gnu/drivers/net/ethernet/renesas/ravb_main.c	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/drivers/net/ethernet/renesas/ravb_main.c	2019-09-10 05:31:05.000000000 -0400
@@ -1,6 +1,6 @@
 /* Renesas Ethernet AVB device driver
  *
- * Copyright (C) 2014-2015 Renesas Electronics Corporation
+ * Copyright (C) 2014-2019 Renesas Electronics Corporation
  * Copyright (C) 2015 Renesas Solutions Corp.
  * Copyright (C) 2015-2016 Cogent Embedded, Inc. <source@cogentembedded.com>
  *
@@ -512,7 +512,10 @@ static void ravb_get_tx_tstamp(struct ne
 			kfree(ts_skb);
 			if (tag == tfa_tag) {
 				skb_tstamp_tx(skb, &shhwtstamps);
+				dev_consume_skb_any(skb);
 				break;
+			} else {
+				dev_kfree_skb_any(skb);
 			}
 		}
 		ravb_modify(ndev, TCCR, TCCR_TFR, TCCR_TFR);
@@ -1537,7 +1540,7 @@ static netdev_tx_t ravb_start_xmit(struc
 					 DMA_TO_DEVICE);
 			goto unmap;
 		}
-		ts_skb->skb = skb;
+		ts_skb->skb = skb_get(skb);
 		ts_skb->tag = priv->ts_skb_tag++;
 		priv->ts_skb_tag &= 0x3ff;
 		list_add_tail(&ts_skb->list, &priv->ts_skb_list);
@@ -1665,6 +1668,7 @@ static int ravb_close(struct net_device
 	/* Clear the timestamp list */
 	list_for_each_entry_safe(ts_skb, ts_skb2, &priv->ts_skb_list, list) {
 		list_del(&ts_skb->list);
+		kfree_skb(ts_skb->skb);
 		kfree(ts_skb);
 	}
 
diff -druNp --no-dereference linux-libre-4.9.191-gnu/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c linux-libre-4.9.192-gnu/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
--- linux-libre-4.9.191-gnu/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c	2019-09-10 05:31:05.000000000 -0400
@@ -771,10 +771,8 @@ static int phy_power_on(struct rk_priv_d
 	int ret;
 	struct device *dev = &bsp_priv->pdev->dev;
 
-	if (!ldo) {
-		dev_err(dev, "no regulator found\n");
-		return -1;
-	}
+	if (!ldo)
+		return 0;
 
 	if (enable) {
 		ret = regulator_enable(ldo);
diff -druNp --no-dereference linux-libre-4.9.191-gnu/drivers/net/ethernet/toshiba/tc35815.c linux-libre-4.9.192-gnu/drivers/net/ethernet/toshiba/tc35815.c
--- linux-libre-4.9.191-gnu/drivers/net/ethernet/toshiba/tc35815.c	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/drivers/net/ethernet/toshiba/tc35815.c	2019-09-10 05:31:05.000000000 -0400
@@ -1498,7 +1498,7 @@ tc35815_rx(struct net_device *dev, int l
 			pci_unmap_single(lp->pci_dev,
 					 lp->rx_skbs[cur_bd].skb_dma,
 					 RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
-			if (!HAVE_DMA_RXALIGN(lp) && NET_IP_ALIGN)
+			if (!HAVE_DMA_RXALIGN(lp) && NET_IP_ALIGN != 0)
 				memmove(skb->data, skb->data - NET_IP_ALIGN,
 					pkt_len);
 			data = skb_put(skb, pkt_len);
diff -druNp --no-dereference linux-libre-4.9.191-gnu/drivers/net/ethernet/tundra/tsi108_eth.c linux-libre-4.9.192-gnu/drivers/net/ethernet/tundra/tsi108_eth.c
--- linux-libre-4.9.191-gnu/drivers/net/ethernet/tundra/tsi108_eth.c	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/drivers/net/ethernet/tundra/tsi108_eth.c	2019-09-10 05:31:05.000000000 -0400
@@ -381,9 +381,10 @@ tsi108_stat_carry_one(int carry, int car
 static void tsi108_stat_carry(struct net_device *dev)
 {
 	struct tsi108_prv_data *data = netdev_priv(dev);
+	unsigned long flags;
 	u32 carry1, carry2;
 
-	spin_lock_irq(&data->misclock);
+	spin_lock_irqsave(&data->misclock, flags);
 
 	carry1 = TSI_READ(TSI108_STAT_CARRY1);
 	carry2 = TSI_READ(TSI108_STAT_CARRY2);
@@ -451,7 +452,7 @@ static void tsi108_stat_carry(struct net
 			      TSI108_STAT_TXPAUSEDROP_CARRY,
 			      &data->tx_pause_drop);
 
-	spin_unlock_irq(&data->misclock);
+	spin_unlock_irqrestore(&data->misclock, flags);
 }
 
 /* Read a stat counter atomically with respect to carries.
diff -druNp --no-dereference linux-libre-4.9.191-gnu/drivers/net/usb/cx82310_eth.c linux-libre-4.9.192-gnu/drivers/net/usb/cx82310_eth.c
--- linux-libre-4.9.191-gnu/drivers/net/usb/cx82310_eth.c	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/drivers/net/usb/cx82310_eth.c	2019-09-10 05:31:05.000000000 -0400
@@ -175,7 +175,8 @@ static int cx82310_bind(struct usbnet *d
 	}
 	if (!timeout) {
 		dev_err(&udev->dev, "firmware not ready in time\n");
-		return -ETIMEDOUT;
+		ret = -ETIMEDOUT;
+		goto err;
 	}
 
 	/* enable ethernet mode (?) */
diff -druNp --no-dereference linux-libre-4.9.191-gnu/drivers/net/usb/kalmia.c linux-libre-4.9.192-gnu/drivers/net/usb/kalmia.c
--- linux-libre-4.9.191-gnu/drivers/net/usb/kalmia.c	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/drivers/net/usb/kalmia.c	2019-09-10 05:31:05.000000000 -0400
@@ -117,16 +117,16 @@ kalmia_init_and_get_ethernet_addr(struct
 	status = kalmia_send_init_packet(dev, usb_buf, sizeof(init_msg_1)
 		/ sizeof(init_msg_1[0]), usb_buf, 24);
 	if (status != 0)
-		return status;
+		goto out;
 
 	memcpy(usb_buf, init_msg_2, 12);
 	status = kalmia_send_init_packet(dev, usb_buf, sizeof(init_msg_2)
 		/ sizeof(init_msg_2[0]), usb_buf, 28);
 	if (status != 0)
-		return status;
+		goto out;
 
 	memcpy(ethernet_addr, usb_buf + 10, ETH_ALEN);
-
+out:
 	kfree(usb_buf);
 	return status;
 }
diff -druNp --no-dereference linux-libre-4.9.191-gnu/drivers/net/wimax/i2400m/fw.c linux-libre-4.9.192-gnu/drivers/net/wimax/i2400m/fw.c
--- linux-libre-4.9.191-gnu/drivers/net/wimax/i2400m/fw.c	2019-09-06 08:18:57.000000000 -0400
+++ linux-libre-4.9.192-gnu/drivers/net/wimax/i2400m/fw.c	2019-09-10 16:02:54.000000000 -0400
@@ -351,13 +351,15 @@ int i2400m_barker_db_init(const char *_o
 			}
 			result = i2400m_barker_db_add(barker);
 			if (result < 0)
-				goto error_add;
+				goto error_parse_add;
 		}
 		kfree(options_orig);
 	}
 	return 0;
 
+error_parse_add:
 error_parse:
+	kfree(options_orig);
 error_add:
 	kfree(i2400m_barker_db);
 	return result;
diff -druNp --no-dereference linux-libre-4.9.191-gnu/drivers/spi/spi-bcm2835aux.c linux-libre-4.9.192-gnu/drivers/spi/spi-bcm2835aux.c
--- linux-libre-4.9.191-gnu/drivers/spi/spi-bcm2835aux.c	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/drivers/spi/spi-bcm2835aux.c	2019-09-10 05:31:05.000000000 -0400
@@ -178,19 +178,14 @@ static void bcm2835aux_spi_reset_hw(stru
 		      BCM2835_AUX_SPI_CNTL0_CLEARFIFO);
 }
 
-static irqreturn_t bcm2835aux_spi_interrupt(int irq, void *dev_id)
+static void bcm2835aux_spi_transfer_helper(struct bcm2835aux_spi *bs)
 {
-	struct spi_master *master = dev_id;
-	struct bcm2835aux_spi *bs = spi_master_get_devdata(master);
-	irqreturn_t ret = IRQ_NONE;
+	u32 stat = bcm2835aux_rd(bs, BCM2835_AUX_SPI_STAT);
 
 	/* check if we have data to read */
-	while (bs->rx_len &&
-	       (!(bcm2835aux_rd(bs, BCM2835_AUX_SPI_STAT) &
-		  BCM2835_AUX_SPI_STAT_RX_EMPTY))) {
+	for (; bs->rx_len && (stat & BCM2835_AUX_SPI_STAT_RX_LVL);
+	     stat = bcm2835aux_rd(bs, BCM2835_AUX_SPI_STAT))
 		bcm2835aux_rd_fifo(bs);
-		ret = IRQ_HANDLED;
-	}
 
 	/* check if we have data to write */
 	while (bs->tx_len &&
@@ -198,16 +193,21 @@ static irqreturn_t bcm2835aux_spi_interr
 	       (!(bcm2835aux_rd(bs, BCM2835_AUX_SPI_STAT) &
 		  BCM2835_AUX_SPI_STAT_TX_FULL))) {
 		bcm2835aux_wr_fifo(bs);
-		ret = IRQ_HANDLED;
 	}
+}
 
-	/* and check if we have reached "done" */
-	while (bs->rx_len &&
-	       (!(bcm2835aux_rd(bs, BCM2835_AUX_SPI_STAT) &
-		  BCM2835_AUX_SPI_STAT_BUSY))) {
-		bcm2835aux_rd_fifo(bs);
-		ret = IRQ_HANDLED;
-	}
+static irqreturn_t bcm2835aux_spi_interrupt(int irq, void *dev_id)
+{
+	struct spi_master *master = dev_id;
+	struct bcm2835aux_spi *bs = spi_master_get_devdata(master);
+
+	/* IRQ may be shared, so return if our interrupts are disabled */
+	if (!(bcm2835aux_rd(bs, BCM2835_AUX_SPI_CNTL1) &
+	      (BCM2835_AUX_SPI_CNTL1_TXEMPTY | BCM2835_AUX_SPI_CNTL1_IDLE)))
+		return IRQ_NONE;
+
+	/* do common fifo handling */
+	bcm2835aux_spi_transfer_helper(bs);
 
 	if (!bs->tx_len) {
 		/* disable tx fifo empty interrupt */
@@ -221,8 +221,7 @@ static irqreturn_t bcm2835aux_spi_interr
 		complete(&master->xfer_completion);
 	}
 
-	/* and return */
-	return ret;
+	return IRQ_HANDLED;
 }
 
 static int __bcm2835aux_spi_transfer_one_irq(struct spi_master *master,
@@ -268,7 +267,6 @@ static int bcm2835aux_spi_transfer_one_p
 {
 	struct bcm2835aux_spi *bs = spi_master_get_devdata(master);
 	unsigned long timeout;
-	u32 stat;
 
 	/* configure spi */
 	bcm2835aux_wr(bs, BCM2835_AUX_SPI_CNTL1, bs->cntl[1]);
@@ -279,24 +277,9 @@ static int bcm2835aux_spi_transfer_one_p
 
 	/* loop until finished the transfer */
 	while (bs->rx_len) {
-		/* read status */
-		stat = bcm2835aux_rd(bs, BCM2835_AUX_SPI_STAT);
-
-		/* fill in tx fifo with remaining data */
-		if ((bs->tx_len) && (!(stat & BCM2835_AUX_SPI_STAT_TX_FULL))) {
-			bcm2835aux_wr_fifo(bs);
-			continue;
-		}
 
-		/* read data from fifo for both cases */
-		if (!(stat & BCM2835_AUX_SPI_STAT_RX_EMPTY)) {
-			bcm2835aux_rd_fifo(bs);
-			continue;
-		}
-		if (!(stat & BCM2835_AUX_SPI_STAT_BUSY)) {
-			bcm2835aux_rd_fifo(bs);
-			continue;
-		}
+		/* do common fifo handling */
+		bcm2835aux_spi_transfer_helper(bs);
 
 		/* there is still data pending to read check the timeout */
 		if (bs->rx_len && time_after(jiffies, timeout)) {
diff -druNp --no-dereference linux-libre-4.9.191-gnu/fs/ceph/inode.c linux-libre-4.9.192-gnu/fs/ceph/inode.c
--- linux-libre-4.9.191-gnu/fs/ceph/inode.c	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/fs/ceph/inode.c	2019-09-10 05:31:05.000000000 -0400
@@ -741,6 +741,7 @@ static int fill_inode(struct inode *inod
 	int issued = 0, implemented, new_issued;
 	struct timespec mtime, atime, ctime;
 	struct ceph_buffer *xattr_blob = NULL;
+	struct ceph_buffer *old_blob = NULL;
 	struct ceph_string *pool_ns = NULL;
 	struct ceph_cap *new_cap = NULL;
 	int err = 0;
@@ -858,7 +859,7 @@ static int fill_inode(struct inode *inod
 	if ((ci->i_xattrs.version == 0 || !(issued & CEPH_CAP_XATTR_EXCL))  &&
 	    le64_to_cpu(info->xattr_version) > ci->i_xattrs.version) {
 		if (ci->i_xattrs.blob)
-			ceph_buffer_put(ci->i_xattrs.blob);
+			old_blob = ci->i_xattrs.blob;
 		ci->i_xattrs.blob = xattr_blob;
 		if (xattr_blob)
 			memcpy(ci->i_xattrs.blob->vec.iov_base,
@@ -1004,8 +1005,8 @@ static int fill_inode(struct inode *inod
 out:
 	if (new_cap)
 		ceph_put_cap(mdsc, new_cap);
-	if (xattr_blob)
-		ceph_buffer_put(xattr_blob);
+	ceph_buffer_put(old_blob);
+	ceph_buffer_put(xattr_blob);
 	ceph_put_string(pool_ns);
 	return err;
 }
diff -druNp --no-dereference linux-libre-4.9.191-gnu/fs/ceph/xattr.c linux-libre-4.9.192-gnu/fs/ceph/xattr.c
--- linux-libre-4.9.191-gnu/fs/ceph/xattr.c	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/fs/ceph/xattr.c	2019-09-10 05:31:05.000000000 -0400
@@ -951,6 +951,7 @@ int __ceph_setxattr(struct inode *inode,
 	struct ceph_inode_info *ci = ceph_inode(inode);
 	struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc;
 	struct ceph_cap_flush *prealloc_cf = NULL;
+	struct ceph_buffer *old_blob = NULL;
 	int issued;
 	int err;
 	int dirty = 0;
@@ -1019,13 +1020,15 @@ retry:
 		struct ceph_buffer *blob;
 
 		spin_unlock(&ci->i_ceph_lock);
-		dout(" preaallocating new blob size=%d\n", required_blob_size);
+		ceph_buffer_put(old_blob); /* Shouldn't be required */
+		dout(" pre-allocating new blob size=%d\n", required_blob_size);
 		blob = ceph_buffer_new(required_blob_size, GFP_NOFS);
 		if (!blob)
 			goto do_sync_unlocked;
 		spin_lock(&ci->i_ceph_lock);
+		/* prealloc_blob can't be released while holding i_ceph_lock */
 		if (ci->i_xattrs.prealloc_blob)
-			ceph_buffer_put(ci->i_xattrs.prealloc_blob);
+			old_blob = ci->i_xattrs.prealloc_blob;
 		ci->i_xattrs.prealloc_blob = blob;
 		goto retry;
 	}
@@ -1041,6 +1044,7 @@ retry:
 	}
 
 	spin_unlock(&ci->i_ceph_lock);
+	ceph_buffer_put(old_blob);
 	if (lock_snap_rwsem)
 		up_read(&mdsc->snap_rwsem);
 	if (dirty)
diff -druNp --no-dereference linux-libre-4.9.191-gnu/include/linux/ceph/buffer.h linux-libre-4.9.192-gnu/include/linux/ceph/buffer.h
--- linux-libre-4.9.191-gnu/include/linux/ceph/buffer.h	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/include/linux/ceph/buffer.h	2019-09-10 05:31:05.000000000 -0400
@@ -29,7 +29,8 @@ static inline struct ceph_buffer *ceph_b
 
 static inline void ceph_buffer_put(struct ceph_buffer *b)
 {
-	kref_put(&b->kref, ceph_buffer_release);
+	if (b)
+		kref_put(&b->kref, ceph_buffer_release);
 }
 
 extern int ceph_decode_buffer(struct ceph_buffer **b, void **p, void *end);
diff -druNp --no-dereference linux-libre-4.9.191-gnu/include/linux/gpio.h linux-libre-4.9.192-gnu/include/linux/gpio.h
--- linux-libre-4.9.191-gnu/include/linux/gpio.h	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/include/linux/gpio.h	2019-09-10 05:31:05.000000000 -0400
@@ -229,30 +229,6 @@ static inline int irq_to_gpio(unsigned i
 	return -EINVAL;
 }
 
-static inline int
-gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
-		       unsigned int gpio_offset, unsigned int pin_offset,
-		       unsigned int npins)
-{
-	WARN_ON(1);
-	return -EINVAL;
-}
-
-static inline int
-gpiochip_add_pingroup_range(struct gpio_chip *chip,
-			struct pinctrl_dev *pctldev,
-			unsigned int gpio_offset, const char *pin_group)
-{
-	WARN_ON(1);
-	return -EINVAL;
-}
-
-static inline void
-gpiochip_remove_pin_ranges(struct gpio_chip *chip)
-{
-	WARN_ON(1);
-}
-
 static inline int devm_gpio_request(struct device *dev, unsigned gpio,
 				    const char *label)
 {
diff -druNp --no-dereference linux-libre-4.9.191-gnu/Makefile linux-libre-4.9.192-gnu/Makefile
--- linux-libre-4.9.191-gnu/Makefile	2019-09-06 07:54:52.000000000 -0400
+++ linux-libre-4.9.192-gnu/Makefile	2019-09-10 15:37:56.000000000 -0400
@@ -1,6 +1,6 @@
 VERSION = 4
 PATCHLEVEL = 9
-SUBLEVEL = 191
+SUBLEVEL = 192
 EXTRAVERSION = -gnu
 NAME = Roaring Lionus
 
diff -druNp --no-dereference linux-libre-4.9.191-gnu/net/core/netpoll.c linux-libre-4.9.192-gnu/net/core/netpoll.c
--- linux-libre-4.9.191-gnu/net/core/netpoll.c	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/net/core/netpoll.c	2019-09-10 05:31:05.000000000 -0400
@@ -122,7 +122,7 @@ static void queue_process(struct work_st
 		txq = netdev_get_tx_queue(dev, q_index);
 		HARD_TX_LOCK(dev, txq, smp_processor_id());
 		if (netif_xmit_frozen_or_stopped(txq) ||
-		    netpoll_start_xmit(skb, dev, txq) != NETDEV_TX_OK) {
+		    !dev_xmit_complete(netpoll_start_xmit(skb, dev, txq))) {
 			skb_queue_head(&npinfo->txq, skb);
 			HARD_TX_UNLOCK(dev, txq);
 			local_irq_restore(flags);
@@ -357,7 +357,7 @@ void netpoll_send_skb_on_dev(struct netp
 
 				HARD_TX_UNLOCK(dev, txq);
 
-				if (status == NETDEV_TX_OK)
+				if (dev_xmit_complete(status))
 					break;
 
 			}
@@ -374,7 +374,7 @@ void netpoll_send_skb_on_dev(struct netp
 
 	}
 
-	if (status != NETDEV_TX_OK) {
+	if (!dev_xmit_complete(status)) {
 		skb_queue_tail(&npinfo->txq, skb);
 		schedule_delayed_work(&npinfo->tx_work,0);
 	}
diff -druNp --no-dereference linux-libre-4.9.191-gnu/net/ipv4/tcp_output.c linux-libre-4.9.192-gnu/net/ipv4/tcp_output.c
--- linux-libre-4.9.191-gnu/net/ipv4/tcp_output.c	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/net/ipv4/tcp_output.c	2019-09-10 05:31:05.000000000 -0400
@@ -1943,7 +1943,7 @@ static bool tcp_can_coalesce_send_queue_
 		if (len <= skb->len)
 			break;
 
-		if (unlikely(TCP_SKB_CB(skb)->eor))
+		if (unlikely(TCP_SKB_CB(skb)->eor) || tcp_has_tx_tstamp(skb))
 			return false;
 
 		len -= skb->len;
@@ -2066,6 +2066,7 @@ static int tcp_mtu_probe(struct sock *sk
 			 * we need to propagate it to the new skb.
 			 */
 			TCP_SKB_CB(nskb)->eor = TCP_SKB_CB(skb)->eor;
+			tcp_skb_collapse_tstamp(nskb, skb);
 			tcp_unlink_write_queue(skb, sk);
 			sk_wmem_free_skb(sk, skb);
 		} else {
diff -druNp --no-dereference linux-libre-4.9.191-gnu/net/ipv6/mcast.c linux-libre-4.9.192-gnu/net/ipv6/mcast.c
--- linux-libre-4.9.191-gnu/net/ipv6/mcast.c	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/net/ipv6/mcast.c	2019-09-10 05:31:05.000000000 -0400
@@ -772,12 +772,13 @@ static void mld_del_delrec(struct inet6_
 		im->idev = pmc->idev;
 		im->mca_crcount = idev->mc_qrv;
 		if (im->mca_sfmode == MCAST_INCLUDE) {
-			im->mca_tomb = pmc->mca_tomb;
-			im->mca_sources = pmc->mca_sources;
+			swap(im->mca_tomb, pmc->mca_tomb);
+			swap(im->mca_sources, pmc->mca_sources);
 			for (psf = im->mca_sources; psf; psf = psf->sf_next)
 				psf->sf_crcount = im->mca_crcount;
 		}
 		in6_dev_put(pmc->idev);
+		ip6_mc_clear_src(pmc);
 		kfree(pmc);
 	}
 	spin_unlock_bh(&im->mca_lock);
diff -druNp --no-dereference linux-libre-4.9.191-gnu/tools/hv/hv_kvp_daemon.c linux-libre-4.9.192-gnu/tools/hv/hv_kvp_daemon.c
--- linux-libre-4.9.191-gnu/tools/hv/hv_kvp_daemon.c	2019-09-06 04:19:54.000000000 -0400
+++ linux-libre-4.9.192-gnu/tools/hv/hv_kvp_daemon.c	2019-09-10 05:31:05.000000000 -0400
@@ -878,7 +878,7 @@ kvp_get_ip_info(int family, char *if_nam
 	int sn_offset = 0;
 	int error = 0;
 	char *buffer;
-	struct hv_kvp_ipaddr_value *ip_buffer;
+	struct hv_kvp_ipaddr_value *ip_buffer = NULL;
 	char cidr_mask[5]; /* /xyz */
 	int weight;
 	int i;
