]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.19-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 30 Apr 2020 14:45:59 +0000 (16:45 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 30 Apr 2020 14:45:59 +0000 (16:45 +0200)
added patches:
i2c-altera-use-proper-variable-to-hold-errno.patch
net-cxgb4-check-the-return-from-t4_query_params-properly.patch
rxrpc-fix-data-tx-to-disable-nofrag-for-udp-on-af_inet6-socket.patch
xfs-acquire-superblock-freeze-protection-on-eofblocks-scans.patch

queue-4.19/i2c-altera-use-proper-variable-to-hold-errno.patch [new file with mode: 0644]
queue-4.19/net-cxgb4-check-the-return-from-t4_query_params-properly.patch [new file with mode: 0644]
queue-4.19/rxrpc-fix-data-tx-to-disable-nofrag-for-udp-on-af_inet6-socket.patch [new file with mode: 0644]
queue-4.19/series
queue-4.19/xfs-acquire-superblock-freeze-protection-on-eofblocks-scans.patch [new file with mode: 0644]

diff --git a/queue-4.19/i2c-altera-use-proper-variable-to-hold-errno.patch b/queue-4.19/i2c-altera-use-proper-variable-to-hold-errno.patch
new file mode 100644 (file)
index 0000000..80faee3
--- /dev/null
@@ -0,0 +1,54 @@
+From edb2c9dd3948738ef030c32b948543e84f4d3f81 Mon Sep 17 00:00:00 2001
+From: Wolfram Sang <wsa+renesas@sang-engineering.com>
+Date: Fri, 27 Mar 2020 23:28:26 +0100
+Subject: i2c: altera: use proper variable to hold errno
+
+From: Wolfram Sang <wsa+renesas@sang-engineering.com>
+
+commit edb2c9dd3948738ef030c32b948543e84f4d3f81 upstream.
+
+device_property_read_u32() returns errno or 0, so we should use the
+integer variable 'ret' and not the u32 'val' to hold the retval.
+
+Fixes: 0560ad576268 ("i2c: altera: Add Altera I2C Controller driver")
+Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
+Reviewed-by: Thor Thayer <thor.thayer@linux.intel.com>
+Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/i2c/busses/i2c-altera.c |    9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+--- a/drivers/i2c/busses/i2c-altera.c
++++ b/drivers/i2c/busses/i2c-altera.c
+@@ -395,7 +395,6 @@ static int altr_i2c_probe(struct platfor
+       struct altr_i2c_dev *idev = NULL;
+       struct resource *res;
+       int irq, ret;
+-      u32 val;
+       idev = devm_kzalloc(&pdev->dev, sizeof(*idev), GFP_KERNEL);
+       if (!idev)
+@@ -422,17 +421,17 @@ static int altr_i2c_probe(struct platfor
+       init_completion(&idev->msg_complete);
+       spin_lock_init(&idev->lock);
+-      val = device_property_read_u32(idev->dev, "fifo-size",
++      ret = device_property_read_u32(idev->dev, "fifo-size",
+                                      &idev->fifo_size);
+-      if (val) {
++      if (ret) {
+               dev_err(&pdev->dev, "FIFO size set to default of %d\n",
+                       ALTR_I2C_DFLT_FIFO_SZ);
+               idev->fifo_size = ALTR_I2C_DFLT_FIFO_SZ;
+       }
+-      val = device_property_read_u32(idev->dev, "clock-frequency",
++      ret = device_property_read_u32(idev->dev, "clock-frequency",
+                                      &idev->bus_clk_rate);
+-      if (val) {
++      if (ret) {
+               dev_err(&pdev->dev, "Default to 100kHz\n");
+               idev->bus_clk_rate = 100000;    /* default clock rate */
+       }
diff --git a/queue-4.19/net-cxgb4-check-the-return-from-t4_query_params-properly.patch b/queue-4.19/net-cxgb4-check-the-return-from-t4_query_params-properly.patch
new file mode 100644 (file)
index 0000000..8a0deab
--- /dev/null
@@ -0,0 +1,39 @@
+From c799fca8baf18d1bbbbad6c3b736eefbde8bdb90 Mon Sep 17 00:00:00 2001
+From: Jason Gunthorpe <jgg@ziepe.ca>
+Date: Tue, 14 Apr 2020 12:27:08 -0300
+Subject: net/cxgb4: Check the return from t4_query_params properly
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Jason Gunthorpe <jgg@mellanox.com>
+
+commit c799fca8baf18d1bbbbad6c3b736eefbde8bdb90 upstream.
+
+Positive return values are also failures that don't set val,
+although this probably can't happen. Fixes gcc 10 warning:
+
+drivers/net/ethernet/chelsio/cxgb4/t4_hw.c: In function ‘t4_phy_fw_ver’:
+drivers/net/ethernet/chelsio/cxgb4/t4_hw.c:3747:14: warning: ‘val’ may be used uninitialized in this function [-Wmaybe-uninitialized]
+ 3747 |  *phy_fw_ver = val;
+
+Fixes: 01b6961410b7 ("cxgb4: Add PHY firmware support for T420-BT cards")
+Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/ethernet/chelsio/cxgb4/t4_hw.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
++++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
+@@ -3748,7 +3748,7 @@ int t4_phy_fw_ver(struct adapter *adap,
+                FW_PARAMS_PARAM_Z_V(FW_PARAMS_PARAM_DEV_PHYFW_VERSION));
+       ret = t4_query_params(adap, adap->mbox, adap->pf, 0, 1,
+                             &param, &val);
+-      if (ret < 0)
++      if (ret)
+               return ret;
+       *phy_fw_ver = val;
+       return 0;
diff --git a/queue-4.19/rxrpc-fix-data-tx-to-disable-nofrag-for-udp-on-af_inet6-socket.patch b/queue-4.19/rxrpc-fix-data-tx-to-disable-nofrag-for-udp-on-af_inet6-socket.patch
new file mode 100644 (file)
index 0000000..3b43031
--- /dev/null
@@ -0,0 +1,111 @@
+From 0e631eee17dcea576ab922fa70e4fdbd596ee452 Mon Sep 17 00:00:00 2001
+From: David Howells <dhowells@redhat.com>
+Date: Mon, 13 Apr 2020 13:57:14 +0100
+Subject: rxrpc: Fix DATA Tx to disable nofrag for UDP on AF_INET6 socket
+
+From: David Howells <dhowells@redhat.com>
+
+commit 0e631eee17dcea576ab922fa70e4fdbd596ee452 upstream.
+
+Fix the DATA packet transmission to disable nofrag for UDPv4 on an AF_INET6
+socket as well as UDPv6 when trying to transmit fragmentably.
+
+Without this, packets filled to the normal size used by the kernel AFS
+client of 1412 bytes be rejected by udp_sendmsg() with EMSGSIZE
+immediately.  The ->sk_error_report() notification hook is called, but
+rxrpc doesn't generate a trace for it.
+
+This is a temporary fix; a more permanent solution needs to involve
+changing the size of the packets being filled in accordance with the MTU,
+which isn't currently done in AF_RXRPC.  The reason for not doing so was
+that, barring the last packet in an rx jumbo packet, jumbos can only be
+assembled out of 1412-byte packets - and the plan was to construct jumbos
+on the fly at transmission time.
+
+Also, there's no point turning on IPV6_MTU_DISCOVER, since IPv6 has to
+engage in this anyway since fragmentation is only done by the sender.  We
+can then condense the switch-statement in rxrpc_send_data_packet().
+
+Fixes: 75b54cb57ca3 ("rxrpc: Add IPv6 support")
+Signed-off-by: David Howells <dhowells@redhat.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/rxrpc/local_object.c |    9 ---------
+ net/rxrpc/output.c       |   42 +++++++++++-------------------------------
+ 2 files changed, 11 insertions(+), 40 deletions(-)
+
+--- a/net/rxrpc/local_object.c
++++ b/net/rxrpc/local_object.c
+@@ -169,15 +169,6 @@ static int rxrpc_open_socket(struct rxrp
+                       goto error;
+               }
+-              /* we want to set the don't fragment bit */
+-              opt = IPV6_PMTUDISC_DO;
+-              ret = kernel_setsockopt(local->socket, SOL_IPV6, IPV6_MTU_DISCOVER,
+-                                      (char *) &opt, sizeof(opt));
+-              if (ret < 0) {
+-                      _debug("setsockopt failed");
+-                      goto error;
+-              }
+-
+               /* Fall through and set IPv4 options too otherwise we don't get
+                * errors from IPv4 packets sent through the IPv6 socket.
+                */
+--- a/net/rxrpc/output.c
++++ b/net/rxrpc/output.c
+@@ -480,41 +480,21 @@ send_fragmentable:
+       skb->tstamp = ktime_get_real();
+       switch (conn->params.local->srx.transport.family) {
++      case AF_INET6:
+       case AF_INET:
+               opt = IP_PMTUDISC_DONT;
+-              ret = kernel_setsockopt(conn->params.local->socket,
+-                                      SOL_IP, IP_MTU_DISCOVER,
+-                                      (char *)&opt, sizeof(opt));
+-              if (ret == 0) {
+-                      ret = kernel_sendmsg(conn->params.local->socket, &msg,
+-                                           iov, 2, len);
+-                      conn->params.peer->last_tx_at = ktime_get_seconds();
+-
+-                      opt = IP_PMTUDISC_DO;
+-                      kernel_setsockopt(conn->params.local->socket, SOL_IP,
+-                                        IP_MTU_DISCOVER,
+-                                        (char *)&opt, sizeof(opt));
+-              }
+-              break;
+-
+-#ifdef CONFIG_AF_RXRPC_IPV6
+-      case AF_INET6:
+-              opt = IPV6_PMTUDISC_DONT;
+-              ret = kernel_setsockopt(conn->params.local->socket,
+-                                      SOL_IPV6, IPV6_MTU_DISCOVER,
+-                                      (char *)&opt, sizeof(opt));
+-              if (ret == 0) {
+-                      ret = kernel_sendmsg(conn->params.local->socket, &msg,
+-                                           iov, 2, len);
+-                      conn->params.peer->last_tx_at = ktime_get_seconds();
++              kernel_setsockopt(conn->params.local->socket,
++                                SOL_IP, IP_MTU_DISCOVER,
++                                (char *)&opt, sizeof(opt));
++              ret = kernel_sendmsg(conn->params.local->socket, &msg,
++                                   iov, 2, len);
++              conn->params.peer->last_tx_at = ktime_get_seconds();
+-                      opt = IPV6_PMTUDISC_DO;
+-                      kernel_setsockopt(conn->params.local->socket,
+-                                        SOL_IPV6, IPV6_MTU_DISCOVER,
+-                                        (char *)&opt, sizeof(opt));
+-              }
++              opt = IP_PMTUDISC_DO;
++              kernel_setsockopt(conn->params.local->socket,
++                                SOL_IP, IP_MTU_DISCOVER,
++                                (char *)&opt, sizeof(opt));
+               break;
+-#endif
+       default:
+               BUG();
index c99190dcb6f53041bd476e31c5a079b5b9803971..47eb000719f47e260c6bbe1c7fa47975096f5681 100644 (file)
@@ -9,3 +9,7 @@ asoc-q6dsp6-q6afe-dai-add-missing-channels-to-mi2s-dais.patch
 asoc-tas571x-disable-regulators-on-failed-probe.patch
 asoc-wm8960-fix-wrong-clock-after-suspend-resume.patch
 nfsd-memory-corruption-in-nfsd4_lock.patch
+i2c-altera-use-proper-variable-to-hold-errno.patch
+rxrpc-fix-data-tx-to-disable-nofrag-for-udp-on-af_inet6-socket.patch
+net-cxgb4-check-the-return-from-t4_query_params-properly.patch
+xfs-acquire-superblock-freeze-protection-on-eofblocks-scans.patch
diff --git a/queue-4.19/xfs-acquire-superblock-freeze-protection-on-eofblocks-scans.patch b/queue-4.19/xfs-acquire-superblock-freeze-protection-on-eofblocks-scans.patch
new file mode 100644 (file)
index 0000000..dcf7ab8
--- /dev/null
@@ -0,0 +1,79 @@
+From 4b674b9ac852937af1f8c62f730c325fb6eadcdb Mon Sep 17 00:00:00 2001
+From: Brian Foster <bfoster@redhat.com>
+Date: Sun, 12 Apr 2020 13:11:10 -0700
+Subject: xfs: acquire superblock freeze protection on eofblocks scans
+
+From: Brian Foster <bfoster@redhat.com>
+
+commit 4b674b9ac852937af1f8c62f730c325fb6eadcdb upstream.
+
+The filesystem freeze sequence in XFS waits on any background
+eofblocks or cowblocks scans to complete before the filesystem is
+quiesced. At this point, the freezer has already stopped the
+transaction subsystem, however, which means a truncate or cowblock
+cancellation in progress is likely blocked in transaction
+allocation. This results in a deadlock between freeze and the
+associated scanner.
+
+Fix this problem by holding superblock write protection across calls
+into the block reapers. Since protection for background scans is
+acquired from the workqueue task context, trylock to avoid a similar
+deadlock between freeze and blocking on the write lock.
+
+Fixes: d6b636ebb1c9f ("xfs: halt auto-reclamation activities while rebuilding rmap")
+Reported-by: Paul Furtado <paulfurtado91@gmail.com>
+Signed-off-by: Brian Foster <bfoster@redhat.com>
+Reviewed-by: Chandan Rajendra <chandanrlinux@gmail.com>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Reviewed-by: Allison Collins <allison.henderson@oracle.com>
+Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
+Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/xfs/xfs_icache.c |   10 ++++++++++
+ fs/xfs/xfs_ioctl.c  |    5 ++++-
+ 2 files changed, 14 insertions(+), 1 deletion(-)
+
+--- a/fs/xfs/xfs_icache.c
++++ b/fs/xfs/xfs_icache.c
+@@ -902,7 +902,12 @@ xfs_eofblocks_worker(
+ {
+       struct xfs_mount *mp = container_of(to_delayed_work(work),
+                               struct xfs_mount, m_eofblocks_work);
++
++      if (!sb_start_write_trylock(mp->m_super))
++              return;
+       xfs_icache_free_eofblocks(mp, NULL);
++      sb_end_write(mp->m_super);
++
+       xfs_queue_eofblocks(mp);
+ }
+@@ -929,7 +934,12 @@ xfs_cowblocks_worker(
+ {
+       struct xfs_mount *mp = container_of(to_delayed_work(work),
+                               struct xfs_mount, m_cowblocks_work);
++
++      if (!sb_start_write_trylock(mp->m_super))
++              return;
+       xfs_icache_free_cowblocks(mp, NULL);
++      sb_end_write(mp->m_super);
++
+       xfs_queue_cowblocks(mp);
+ }
+--- a/fs/xfs/xfs_ioctl.c
++++ b/fs/xfs/xfs_ioctl.c
+@@ -2182,7 +2182,10 @@ xfs_file_ioctl(
+               if (error)
+                       return error;
+-              return xfs_icache_free_eofblocks(mp, &keofb);
++              sb_start_write(mp->m_super);
++              error = xfs_icache_free_eofblocks(mp, &keofb);
++              sb_end_write(mp->m_super);
++              return error;
+       }
+       default: