From: Greg Kroah-Hartman Date: Thu, 30 Apr 2020 14:46:12 +0000 (+0200) Subject: 5.4-stable patches X-Git-Tag: v5.4.37~38 X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=826e7622d9f26c6d2e0923a953794ab9c779212d;p=thirdparty%2Fkernel%2Fstable-queue.git 5.4-stable patches 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 --- diff --git a/queue-5.4/i2c-altera-use-proper-variable-to-hold-errno.patch b/queue-5.4/i2c-altera-use-proper-variable-to-hold-errno.patch new file mode 100644 index 00000000000..47e38275ae3 --- /dev/null +++ b/queue-5.4/i2c-altera-use-proper-variable-to-hold-errno.patch @@ -0,0 +1,54 @@ +From edb2c9dd3948738ef030c32b948543e84f4d3f81 Mon Sep 17 00:00:00 2001 +From: Wolfram Sang +Date: Fri, 27 Mar 2020 23:28:26 +0100 +Subject: i2c: altera: use proper variable to hold errno + +From: Wolfram Sang + +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 +Reviewed-by: Thor Thayer +Signed-off-by: Wolfram Sang +Signed-off-by: Greg Kroah-Hartman + +--- + 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 +@@ -384,7 +384,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) +@@ -411,17 +410,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-5.4/net-cxgb4-check-the-return-from-t4_query_params-properly.patch b/queue-5.4/net-cxgb4-check-the-return-from-t4_query_params-properly.patch new file mode 100644 index 00000000000..8a0deabcf34 --- /dev/null +++ b/queue-5.4/net-cxgb4-check-the-return-from-t4_query_params-properly.patch @@ -0,0 +1,39 @@ +From c799fca8baf18d1bbbbad6c3b736eefbde8bdb90 Mon Sep 17 00:00:00 2001 +From: Jason Gunthorpe +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 + +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 +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + 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, + ¶m, &val); +- if (ret < 0) ++ if (ret) + return ret; + *phy_fw_ver = val; + return 0; diff --git a/queue-5.4/rxrpc-fix-data-tx-to-disable-nofrag-for-udp-on-af_inet6-socket.patch b/queue-5.4/rxrpc-fix-data-tx-to-disable-nofrag-for-udp-on-af_inet6-socket.patch new file mode 100644 index 00000000000..a81928e7b02 --- /dev/null +++ b/queue-5.4/rxrpc-fix-data-tx-to-disable-nofrag-for-udp-on-af_inet6-socket.patch @@ -0,0 +1,111 @@ +From 0e631eee17dcea576ab922fa70e4fdbd596ee452 Mon Sep 17 00:00:00 2001 +From: David Howells +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 + +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 +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + 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 +@@ -165,15 +165,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 +@@ -474,41 +474,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(); diff --git a/queue-5.4/series b/queue-5.4/series index 069fcb64dfc..6787040aafa 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -19,3 +19,7 @@ asoc-wm8960-fix-wrong-clock-after-suspend-resume.patch drivers-soc-xilinx-fix-firmware-driver-kconfig-dependency.patch nfsd-memory-corruption-in-nfsd4_lock.patch bpf-forbid-xadd-on-spilled-pointers-for-unprivileged-users.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-5.4/xfs-acquire-superblock-freeze-protection-on-eofblocks-scans.patch b/queue-5.4/xfs-acquire-superblock-freeze-protection-on-eofblocks-scans.patch new file mode 100644 index 00000000000..c98486cb2e6 --- /dev/null +++ b/queue-5.4/xfs-acquire-superblock-freeze-protection-on-eofblocks-scans.patch @@ -0,0 +1,79 @@ +From 4b674b9ac852937af1f8c62f730c325fb6eadcdb Mon Sep 17 00:00:00 2001 +From: Brian Foster +Date: Sun, 12 Apr 2020 13:11:10 -0700 +Subject: xfs: acquire superblock freeze protection on eofblocks scans + +From: Brian Foster + +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 +Signed-off-by: Brian Foster +Reviewed-by: Chandan Rajendra +Reviewed-by: Christoph Hellwig +Reviewed-by: Allison Collins +Reviewed-by: Darrick J. Wong +Signed-off-by: Darrick J. Wong +Signed-off-by: Greg Kroah-Hartman + +--- + 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 +@@ -907,7 +907,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); + } + +@@ -934,7 +939,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 +@@ -2401,7 +2401,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: