commit:     6cd91af027f81b6cee50613966500feed1cabd1f
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Sun Aug  8 13:40:57 2021 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Sun Aug  8 13:40:57 2021 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=6cd91af0

Linux patch 4.9.279

Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>

 0000_README              |   4 +
 1278_linux-4.9.279.patch | 204 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 208 insertions(+)

diff --git a/0000_README b/0000_README
index fb935c2..b51463c 100644
--- a/0000_README
+++ b/0000_README
@@ -1155,6 +1155,10 @@ Patch:  1277_linux-4.9.278.patch
 From:   http://www.kernel.org
 Desc:   Linux 4.9.278
 
+Patch:  1278_linux-4.9.279.patch
+From:   http://www.kernel.org
+Desc:   Linux 4.9.279
+
 Patch:  1500_XATTR_USER_PREFIX.patch
 From:   https://bugs.gentoo.org/show_bug.cgi?id=470644
 Desc:   Support for namespace user.pax.* on tmpfs.

diff --git a/1278_linux-4.9.279.patch b/1278_linux-4.9.279.patch
new file mode 100644
index 0000000..ebb17fd
--- /dev/null
+++ b/1278_linux-4.9.279.patch
@@ -0,0 +1,204 @@
+diff --git a/Makefile b/Makefile
+index 82fc1c7475926..b88bc8d14ca38 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 4
+ PATCHLEVEL = 9
+-SUBLEVEL = 278
++SUBLEVEL = 279
+ EXTRAVERSION =
+ NAME = Roaring Lionus
+ 
+diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
+index 64fdea3328861..96f6edcb00627 100644
+--- a/drivers/net/usb/r8152.c
++++ b/drivers/net/usb/r8152.c
+@@ -3347,9 +3347,10 @@ static int rtl8152_close(struct net_device *netdev)
+               tp->rtl_ops.down(tp);
+ 
+               mutex_unlock(&tp->control);
++      }
+ 
++      if (!res)
+               usb_autopm_put_interface(tp->intf);
+-      }
+ 
+       free_all_mem(tp);
+ 
+diff --git a/drivers/spi/spi-mt65xx.c b/drivers/spi/spi-mt65xx.c
+index 419aecb942749..dd0bf25d45502 100644
+--- a/drivers/spi/spi-mt65xx.c
++++ b/drivers/spi/spi-mt65xx.c
+@@ -337,24 +337,15 @@ static int mtk_spi_fifo_transfer(struct spi_master 
*master,
+       mtk_spi_prepare_transfer(master, xfer);
+       mtk_spi_setup_packet(master);
+ 
+-      cnt = xfer->len / 4;
+-      if (xfer->tx_buf)
++      if (xfer->tx_buf) {
++              cnt = xfer->len / 4;
+               iowrite32_rep(mdata->base + SPI_TX_DATA_REG, xfer->tx_buf, cnt);
+-
+-      if (xfer->rx_buf)
+-              ioread32_rep(mdata->base + SPI_RX_DATA_REG, xfer->rx_buf, cnt);
+-
+-      remainder = xfer->len % 4;
+-      if (remainder > 0) {
+-              reg_val = 0;
+-              if (xfer->tx_buf) {
++              remainder = xfer->len % 4;
++              if (remainder > 0) {
++                      reg_val = 0;
+                       memcpy(&reg_val, xfer->tx_buf + (cnt * 4), remainder);
+                       writel(reg_val, mdata->base + SPI_TX_DATA_REG);
+               }
+-              if (xfer->rx_buf) {
+-                      reg_val = readl(mdata->base + SPI_RX_DATA_REG);
+-                      memcpy(xfer->rx_buf + (cnt * 4), &reg_val, remainder);
+-              }
+       }
+ 
+       mtk_spi_enable_transfer(master);
+diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c
+index d4d8b7e36b2ff..2534e44cfd40e 100644
+--- a/fs/btrfs/compression.c
++++ b/fs/btrfs/compression.c
+@@ -290,7 +290,7 @@ static void end_compressed_bio_write(struct bio *bio)
+                                        cb->start,
+                                        cb->start + cb->len - 1,
+                                        NULL,
+-                                       bio->bi_error ? 0 : 1);
++                                       !cb->errors);
+       cb->compressed_pages[0]->mapping = NULL;
+ 
+       end_compressed_writeback(inode, cb);
+diff --git a/include/linux/mfd/rt5033-private.h 
b/include/linux/mfd/rt5033-private.h
+index 1b63fc2f42d1c..52d53d134f72c 100644
+--- a/include/linux/mfd/rt5033-private.h
++++ b/include/linux/mfd/rt5033-private.h
+@@ -203,13 +203,13 @@ enum rt5033_reg {
+ #define RT5033_REGULATOR_BUCK_VOLTAGE_MIN             1000000U
+ #define RT5033_REGULATOR_BUCK_VOLTAGE_MAX             3000000U
+ #define RT5033_REGULATOR_BUCK_VOLTAGE_STEP            100000U
+-#define RT5033_REGULATOR_BUCK_VOLTAGE_STEP_NUM                32
++#define RT5033_REGULATOR_BUCK_VOLTAGE_STEP_NUM                21
+ 
+ /* RT5033 regulator LDO output voltage uV */
+ #define RT5033_REGULATOR_LDO_VOLTAGE_MIN              1200000U
+ #define RT5033_REGULATOR_LDO_VOLTAGE_MAX              3000000U
+ #define RT5033_REGULATOR_LDO_VOLTAGE_STEP             100000U
+-#define RT5033_REGULATOR_LDO_VOLTAGE_STEP_NUM         32
++#define RT5033_REGULATOR_LDO_VOLTAGE_STEP_NUM         19
+ 
+ /* RT5033 regulator SAFE LDO output voltage uV */
+ #define RT5033_REGULATOR_SAFE_LDO_VOLTAGE             4900000U
+diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
+index 50b9a0bbe5dff..839c534bdcdb9 100644
+--- a/net/bluetooth/hci_core.c
++++ b/net/bluetooth/hci_core.c
+@@ -1533,6 +1533,14 @@ int hci_dev_do_close(struct hci_dev *hdev)
+ 
+       BT_DBG("%s %p", hdev->name, hdev);
+ 
++      if (!hci_dev_test_flag(hdev, HCI_UNREGISTER) &&
++          !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
++          test_bit(HCI_UP, &hdev->flags)) {
++              /* Execute vendor specific shutdown routine */
++              if (hdev->shutdown)
++                      hdev->shutdown(hdev);
++      }
++
+       cancel_delayed_work(&hdev->power_off);
+ 
+       hci_request_cancel_all(hdev);
+@@ -1600,14 +1608,6 @@ int hci_dev_do_close(struct hci_dev *hdev)
+               clear_bit(HCI_INIT, &hdev->flags);
+       }
+ 
+-      if (!hci_dev_test_flag(hdev, HCI_UNREGISTER) &&
+-          !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
+-          test_bit(HCI_UP, &hdev->flags)) {
+-              /* Execute vendor specific shutdown routine */
+-              if (hdev->shutdown)
+-                      hdev->shutdown(hdev);
+-      }
+-
+       /* flush cmd  work */
+       flush_work(&hdev->cmd_work);
+ 
+diff --git a/net/can/raw.c b/net/can/raw.c
+index 2bb50b1535c2f..082965c8dcaf6 100644
+--- a/net/can/raw.c
++++ b/net/can/raw.c
+@@ -541,10 +541,18 @@ static int raw_setsockopt(struct socket *sock, int 
level, int optname,
+                               return -EFAULT;
+               }
+ 
++              rtnl_lock();
+               lock_sock(sk);
+ 
+-              if (ro->bound && ro->ifindex)
++              if (ro->bound && ro->ifindex) {
+                       dev = dev_get_by_index(&init_net, ro->ifindex);
++                      if (!dev) {
++                              if (count > 1)
++                                      kfree(filter);
++                              err = -ENODEV;
++                              goto out_fil;
++                      }
++              }
+ 
+               if (ro->bound) {
+                       /* (try to) register the new filters */
+@@ -581,6 +589,7 @@ static int raw_setsockopt(struct socket *sock, int level, 
int optname,
+                       dev_put(dev);
+ 
+               release_sock(sk);
++              rtnl_unlock();
+ 
+               break;
+ 
+@@ -593,10 +602,16 @@ static int raw_setsockopt(struct socket *sock, int 
level, int optname,
+ 
+               err_mask &= CAN_ERR_MASK;
+ 
++              rtnl_lock();
+               lock_sock(sk);
+ 
+-              if (ro->bound && ro->ifindex)
++              if (ro->bound && ro->ifindex) {
+                       dev = dev_get_by_index(&init_net, ro->ifindex);
++                      if (!dev) {
++                              err = -ENODEV;
++                              goto out_err;
++                      }
++              }
+ 
+               /* remove current error mask */
+               if (ro->bound) {
+@@ -618,6 +633,7 @@ static int raw_setsockopt(struct socket *sock, int level, 
int optname,
+                       dev_put(dev);
+ 
+               release_sock(sk);
++              rtnl_unlock();
+ 
+               break;
+ 
+diff --git a/net/core/skbuff.c b/net/core/skbuff.c
+index 076444dac96d1..0e34f5ad62162 100644
+--- a/net/core/skbuff.c
++++ b/net/core/skbuff.c
+@@ -2288,8 +2288,11 @@ skb_zerocopy_headlen(const struct sk_buff *from)
+ 
+       if (!from->head_frag ||
+           skb_headlen(from) < L1_CACHE_BYTES ||
+-          skb_shinfo(from)->nr_frags >= MAX_SKB_FRAGS)
++          skb_shinfo(from)->nr_frags >= MAX_SKB_FRAGS) {
+               hlen = skb_headlen(from);
++              if (!hlen)
++                      hlen = from->len;
++      }
+ 
+       if (skb_has_frag_list(from))
+               hlen = from->len;

Reply via email to