From: Greg Kroah-Hartman Date: Thu, 30 Apr 2020 14:45:59 +0000 (+0200) Subject: 4.19-stable patches X-Git-Tag: v5.4.37~39 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cf076f6dbd1e44a6c2fe75f2f115e44670b803f6;p=thirdparty%2Fkernel%2Fstable-queue.git 4.19-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-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 index 00000000000..80faee3ac83 --- /dev/null +++ b/queue-4.19/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 +@@ -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 index 00000000000..8a0deabcf34 --- /dev/null +++ b/queue-4.19/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-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 index 00000000000..3b430313747 --- /dev/null +++ b/queue-4.19/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 +@@ -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(); diff --git a/queue-4.19/series b/queue-4.19/series index c99190dcb6f..47eb000719f 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -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 index 00000000000..dcf7ab871f3 --- /dev/null +++ b/queue-4.19/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 +@@ -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: