]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.6-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 30 Apr 2020 14:46:26 +0000 (16:46 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 30 Apr 2020 14:46:26 +0000 (16:46 +0200)
added patches:
brcmfmac-add-stub-for-monitor-interface-xmit.patch
clk-asm9260-fix-__clk_hw_register_fixed_rate_with_accuracy-typo.patch
efi-x86-don-t-remap-text-rodata-gap-read-only-for-mixed-mode.patch
hwmon-drivetemp-return-enodata-for-invalid-temperatures.patch
hwmon-drivetemp-use-drivetemp-s-true-module-name-in-kconfig-section.patch
i2c-altera-use-proper-variable-to-hold-errno.patch
net-cxgb4-check-the-return-from-t4_query_params-properly.patch
netfilter-nf_tables-reintroduce-the-nft_set_concat-flag.patch
rtw88-avoid-unused-function-warnings.patch
rxrpc-fix-data-tx-to-disable-nofrag-for-udp-on-af_inet6-socket.patch
tipc-fix-incorrect-increasing-of-link-window.patch
xfs-acquire-superblock-freeze-protection-on-eofblocks-scans.patch

13 files changed:
queue-5.6/brcmfmac-add-stub-for-monitor-interface-xmit.patch [new file with mode: 0644]
queue-5.6/clk-asm9260-fix-__clk_hw_register_fixed_rate_with_accuracy-typo.patch [new file with mode: 0644]
queue-5.6/efi-x86-don-t-remap-text-rodata-gap-read-only-for-mixed-mode.patch [new file with mode: 0644]
queue-5.6/hwmon-drivetemp-return-enodata-for-invalid-temperatures.patch [new file with mode: 0644]
queue-5.6/hwmon-drivetemp-use-drivetemp-s-true-module-name-in-kconfig-section.patch [new file with mode: 0644]
queue-5.6/i2c-altera-use-proper-variable-to-hold-errno.patch [new file with mode: 0644]
queue-5.6/net-cxgb4-check-the-return-from-t4_query_params-properly.patch [new file with mode: 0644]
queue-5.6/netfilter-nf_tables-reintroduce-the-nft_set_concat-flag.patch [new file with mode: 0644]
queue-5.6/rtw88-avoid-unused-function-warnings.patch [new file with mode: 0644]
queue-5.6/rxrpc-fix-data-tx-to-disable-nofrag-for-udp-on-af_inet6-socket.patch [new file with mode: 0644]
queue-5.6/series
queue-5.6/tipc-fix-incorrect-increasing-of-link-window.patch [new file with mode: 0644]
queue-5.6/xfs-acquire-superblock-freeze-protection-on-eofblocks-scans.patch [new file with mode: 0644]

diff --git a/queue-5.6/brcmfmac-add-stub-for-monitor-interface-xmit.patch b/queue-5.6/brcmfmac-add-stub-for-monitor-interface-xmit.patch
new file mode 100644 (file)
index 0000000..49408d4
--- /dev/null
@@ -0,0 +1,109 @@
+From 5bf8e6096c7390f8f2c4d5394b5e49823adb004e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
+Date: Fri, 27 Mar 2020 14:03:07 +0100
+Subject: brcmfmac: add stub for monitor interface xmit
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Rafał Miłecki <rafal@milecki.pl>
+
+commit 5bf8e6096c7390f8f2c4d5394b5e49823adb004e upstream.
+
+According to the struct net_device_ops documentation .ndo_start_xmit is
+"Required; cannot be NULL.". Missing it may crash kernel easily:
+
+[  341.216709] Unable to handle kernel NULL pointer dereference at virtual address 00000000
+[  341.224836] pgd = 26088755
+[  341.227544] [00000000] *pgd=00000000
+[  341.231135] Internal error: Oops: 80000007 [#1] SMP ARM
+[  341.236367] Modules linked in: pppoe ppp_async iptable_nat brcmfmac xt_state xt_nat xt_conntrack xt_REDIRECT xt_MASQU
+[  341.304689] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.4.24 #0
+[  341.310621] Hardware name: BCM5301X
+[  341.314116] PC is at 0x0
+[  341.316664] LR is at dev_hard_start_xmit+0x8c/0x11c
+[  341.321546] pc : [<00000000>]    lr : [<c0469fa8>]    psr: 60000113
+[  341.327821] sp : c0801c30  ip : c610cf00  fp : c08048e4
+[  341.333051] r10: c073a63a  r9 : c08044dc  r8 : c6c04e00
+[  341.338283] r7 : 00000000  r6 : c60f5000  r5 : 00000000  r4 : c6a9c3c0
+[  341.344820] r3 : 00000000  r2 : bf25a13c  r1 : c60f5000  r0 : c6a9c3c0
+[  341.351358] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
+[  341.358504] Control: 10c5387d  Table: 0611c04a  DAC: 00000051
+[  341.364257] Process swapper/0 (pid: 0, stack limit = 0xc68ed0ca)
+[  341.370271] Stack: (0xc0801c30 to 0xc0802000)
+[  341.374633] 1c20:                                     c6e7d480 c0802d00 c60f5050 c0801c6c
+[  341.382825] 1c40: c60f5000 c6a9c3c0 c6f90000 c6f9005c c6c04e00 c60f5000 00000000 c6f9005c
+[  341.391015] 1c60: 00000000 c04a033c 00f90200 00000010 c6a9c3c0 c6a9c3c0 c6f90000 00000000
+[  341.399205] 1c80: 00000000 00000000 00000000 c046a7ac c6f9005c 00000001 fffffff4 00000000
+[  341.407395] 1ca0: c6f90200 00000000 c60f5000 c0479550 00000000 c6f90200 c6a9c3c0 16000000
+[  341.415586] 1cc0: 0000001c 6f4ad52f c6197040 b6df9387 36000000 c0520404 c073a80c c6a9c3c0
+[  341.423777] 1ce0: 00000000 c6d643c0 c6a9c3c0 c0800024 00000001 00000001 c6d643c8 c6a9c3c0
+[  341.431967] 1d00: c081b9c0 c7abca80 c610c840 c081b9c0 0000001c 00400000 c6bc5e6c c0522fb4
+[  341.440157] 1d20: c6d64400 00000004 c6bc5e0a 00000000 c60f5000 c7abca80 c081b9c0 c0522f54
+[  341.448348] 1d40: c6a9c3c0 c7abca80 c0803e48 c0549c94 c610c828 0000000a c0801d74 00000003
+[  341.456538] 1d60: c6ec8f0a 00000000 c60f5000 c7abca80 c081b9c0 c0548520 0000000a 00000000
+[  341.464728] 1d80: 00000000 003a0000 00000000 00000000 00000000 00000000 00000000 00000000
+[  341.472919] 1da0: 000002ff 00000000 00000000 16000000 00000000 00000000 00000000 00000000
+[  341.481110] 1dc0: 00000000 0000008f 00000000 00000000 00000000 2d132a69 c6bc5e40 00000000
+[  341.489300] 1de0: c6bc5e40 c6a9c3c0 00000000 c6ec8e50 00000001 c054b070 00000001 00000000
+[  341.497490] 1e00: c0807200 c6bc5e00 00000000 ffffe000 00000100 c054aea4 00000000 00000000
+[  341.505681] 1e20: 00000122 00400000 c0802d00 c0172e80 6f56a70e ffffffff 6f56a70e c7eb9cc0
+[  341.513871] 1e40: c7eb82c0 00000000 c0801e60 c017309c 00000000 00000000 07780000 c07382c0
+[  341.522061] 1e60: 00000000 c7eb9cc0 c0739cc0 c0803f74 c0801e70 c0801e70 c0801ea4 c013d380
+[  341.530253] 1e80: 00000000 000000a0 00000001 c0802084 c0802080 40000001 ffffe000 00000100
+[  341.538443] 1ea0: c0802080 c01021e8 c8803100 10c5387d 00000000 c07341f0 c0739880 0000000a
+[  341.546633] 1ec0: c0734180 00001017 c0802d00 c062aa98 00200002 c062aa60 c8803100 c073984c
+[  341.554823] 1ee0: 00000000 00000001 00000000 c7810000 c8803100 10c5387d 00000000 c011c188
+[  341.563014] 1f00: c073984c c015f0f8 c0804244 c0815ae4 c880210c c8802100 c0801f40 c037c584
+[  341.571204] 1f20: c01035f8 60000013 ffffffff c0801f74 c080afd4 c0800000 10c5387d c0101a8c
+[  341.579395] 1f40: 00000000 004ac9dc c7eba4b4 c010ee60 ffffe000 c0803e68 c0803ea8 00000001
+[  341.587587] 1f60: c080afd4 c062ca20 10c5387d 00000000 00000000 c0801f90 c01035f4 c01035f8
+[  341.595776] 1f80: 60000013 ffffffff 00000051 00000000 ffffe000 c013ff50 000000ce c0803e40
+[  341.603967] 1fa0: c082216c 00000000 00000001 c072ba38 10c5387d c0140214 c0822184 c0700df8
+[  341.612157] 1fc0: ffffffff ffffffff 00000000 c070058c c072ba38 2d162e71 00000000 c0700330
+[  341.620348] 1fe0: 00000051 10c0387d 000000ff 00a521d0 413fc090 00000000 00000000 00000000
+[  341.628558] [<c0469fa8>] (dev_hard_start_xmit) from [<c04a033c>] (sch_direct_xmit+0xe4/0x2bc)
+[  341.637106] [<c04a033c>] (sch_direct_xmit) from [<c046a7ac>] (__dev_queue_xmit+0x6a4/0x72c)
+[  341.645481] [<c046a7ac>] (__dev_queue_xmit) from [<c0520404>] (ip6_finish_output2+0x18c/0x434)
+[  341.654112] [<c0520404>] (ip6_finish_output2) from [<c0522fb4>] (ip6_output+0x5c/0xd0)
+[  341.662053] [<c0522fb4>] (ip6_output) from [<c0549c94>] (mld_sendpack+0x1a0/0x1a8)
+[  341.669640] [<c0549c94>] (mld_sendpack) from [<c054b070>] (mld_ifc_timer_expire+0x1cc/0x2e4)
+[  341.678111] [<c054b070>] (mld_ifc_timer_expire) from [<c0172e80>] (call_timer_fn.constprop.3+0x24/0x98)
+[  341.687527] [<c0172e80>] (call_timer_fn.constprop.3) from [<c017309c>] (run_timer_softirq+0x1a8/0x1e4)
+[  341.696860] [<c017309c>] (run_timer_softirq) from [<c01021e8>] (__do_softirq+0x120/0x2b0)
+[  341.705066] [<c01021e8>] (__do_softirq) from [<c011c188>] (irq_exit+0x78/0x84)
+[  341.712317] [<c011c188>] (irq_exit) from [<c015f0f8>] (__handle_domain_irq+0x60/0xb4)
+[  341.720179] [<c015f0f8>] (__handle_domain_irq) from [<c037c584>] (gic_handle_irq+0x4c/0x90)
+[  341.728549] [<c037c584>] (gic_handle_irq) from [<c0101a8c>] (__irq_svc+0x6c/0x90)
+
+Fixes: 20f2c5fa3af0 ("brcmfmac: add initial support for monitor mode")
+Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+Link: https://lore.kernel.org/r/20200327130307.26477-1-zajec5@gmail.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c |    9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
+@@ -729,9 +729,18 @@ static int brcmf_net_mon_stop(struct net
+       return err;
+ }
++static netdev_tx_t brcmf_net_mon_start_xmit(struct sk_buff *skb,
++                                          struct net_device *ndev)
++{
++      dev_kfree_skb_any(skb);
++
++      return NETDEV_TX_OK;
++}
++
+ static const struct net_device_ops brcmf_netdev_ops_mon = {
+       .ndo_open = brcmf_net_mon_open,
+       .ndo_stop = brcmf_net_mon_stop,
++      .ndo_start_xmit = brcmf_net_mon_start_xmit,
+ };
+ int brcmf_net_mon_attach(struct brcmf_if *ifp)
diff --git a/queue-5.6/clk-asm9260-fix-__clk_hw_register_fixed_rate_with_accuracy-typo.patch b/queue-5.6/clk-asm9260-fix-__clk_hw_register_fixed_rate_with_accuracy-typo.patch
new file mode 100644 (file)
index 0000000..cdcec4d
--- /dev/null
@@ -0,0 +1,45 @@
+From 924ed1f5c181132897c5928af7f3afd28792889c Mon Sep 17 00:00:00 2001
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Wed, 8 Apr 2020 17:53:43 +0200
+Subject: clk: asm9260: fix __clk_hw_register_fixed_rate_with_accuracy typo
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+commit 924ed1f5c181132897c5928af7f3afd28792889c upstream.
+
+The __clk_hw_register_fixed_rate_with_accuracy() function (with two '_')
+does not exist, and apparently never did:
+
+drivers/clk/clk-asm9260.c: In function 'asm9260_acc_init':
+drivers/clk/clk-asm9260.c:279:7: error: implicit declaration of function '__clk_hw_register_fixed_rate_with_accuracy'; did you mean 'clk_hw_register_fixed_rate_with_accuracy'? [-Werror=implicit-function-declaration]
+  279 |  hw = __clk_hw_register_fixed_rate_with_accuracy(NULL, NULL, pll_clk,
+      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      |       clk_hw_register_fixed_rate_with_accuracy
+drivers/clk/clk-asm9260.c:279:5: error: assignment to 'struct clk_hw *' from 'int' makes pointer from integer without a cast [-Werror=int-conversion]
+  279 |  hw = __clk_hw_register_fixed_rate_with_accuracy(NULL, NULL, pll_clk,
+      |     ^
+
+From what I can tell, __clk_hw_register_fixed_rate() is the correct
+API here, so use that instead.
+
+Fixes: 728e3096741a ("clk: asm9260: Use parent accuracy in fixed rate clk")
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Link: https://lkml.kernel.org/r/20200408155402.2138446-1-arnd@arndb.de
+Signed-off-by: Stephen Boyd <sboyd@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/clk/clk-asm9260.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/clk/clk-asm9260.c
++++ b/drivers/clk/clk-asm9260.c
+@@ -276,7 +276,7 @@ static void __init asm9260_acc_init(stru
+       /* TODO: Convert to DT parent scheme */
+       ref_clk = of_clk_get_parent_name(np, 0);
+-      hw = __clk_hw_register_fixed_rate_with_accuracy(NULL, NULL, pll_clk,
++      hw = __clk_hw_register_fixed_rate(NULL, NULL, pll_clk,
+                       ref_clk, NULL, NULL, 0, rate, 0,
+                       CLK_FIXED_RATE_PARENT_ACCURACY);
diff --git a/queue-5.6/efi-x86-don-t-remap-text-rodata-gap-read-only-for-mixed-mode.patch b/queue-5.6/efi-x86-don-t-remap-text-rodata-gap-read-only-for-mixed-mode.patch
new file mode 100644 (file)
index 0000000..d18a3e4
--- /dev/null
@@ -0,0 +1,100 @@
+From f6103162008dfd37567f240b50e5e1ea7cf2e00c Mon Sep 17 00:00:00 2001
+From: Ard Biesheuvel <ardb@kernel.org>
+Date: Thu, 9 Apr 2020 15:04:34 +0200
+Subject: efi/x86: Don't remap text<->rodata gap read-only for mixed mode
+
+From: Ard Biesheuvel <ardb@kernel.org>
+
+commit f6103162008dfd37567f240b50e5e1ea7cf2e00c upstream.
+
+Commit
+
+  d9e3d2c4f10320 ("efi/x86: Don't map the entire kernel text RW for mixed mode")
+
+updated the code that creates the 1:1 memory mapping to use read-only
+attributes for the 1:1 alias of the kernel's text and rodata sections, to
+protect it from inadvertent modification. However, it failed to take into
+account that the unused gap between text and rodata is given to the page
+allocator for general use.
+
+If the vmap'ed stack happens to be allocated from this region, any by-ref
+output arguments passed to EFI runtime services that are allocated on the
+stack (such as the 'datasize' argument taken by GetVariable() when invoked
+from efivar_entry_size()) will be referenced via a read-only mapping,
+resulting in a page fault if the EFI code tries to write to it:
+
+  BUG: unable to handle page fault for address: 00000000386aae88
+  #PF: supervisor write access in kernel mode
+  #PF: error_code(0x0003) - permissions violation
+  PGD fd61063 P4D fd61063 PUD fd62063 PMD 386000e1
+  Oops: 0003 [#1] SMP PTI
+  CPU: 2 PID: 255 Comm: systemd-sysv-ge Not tainted 5.6.0-rc4-default+ #22
+  Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
+  RIP: 0008:0x3eaeed95
+  Code: ...  <89> 03 be 05 00 00 80 a1 74 63 b1 3e 83 c0 48 e8 44 d2 ff ff eb 05
+  RSP: 0018:000000000fd73fa0 EFLAGS: 00010002
+  RAX: 0000000000000001 RBX: 00000000386aae88 RCX: 000000003e9f1120
+  RDX: 0000000000000001 RSI: 0000000000000000 RDI: 0000000000000001
+  RBP: 000000000fd73fd8 R08: 00000000386aae88 R09: 0000000000000000
+  R10: 0000000000000002 R11: 0000000000000000 R12: 0000000000000000
+  R13: ffffc0f040220000 R14: 0000000000000000 R15: 0000000000000000
+  FS:  00007f21160ac940(0000) GS:ffff9cf23d500000(0000) knlGS:0000000000000000
+  CS:  0008 DS: 0018 ES: 0018 CR0: 0000000080050033
+  CR2: 00000000386aae88 CR3: 000000000fd6c004 CR4: 00000000003606e0
+  DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
+  DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
+  Call Trace:
+  Modules linked in:
+  CR2: 00000000386aae88
+  ---[ end trace a8bfbd202e712834 ]---
+
+Let's fix this by remapping text and rodata individually, and leave the
+gaps mapped read-write.
+
+Fixes: d9e3d2c4f10320 ("efi/x86: Don't map the entire kernel text RW for mixed mode")
+Reported-by: Jiri Slaby <jslaby@suse.cz>
+Tested-by: Jiri Slaby <jslaby@suse.cz>
+Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Link: https://lore.kernel.org/r/20200409130434.6736-10-ardb@kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/platform/efi/efi_64.c |   12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+--- a/arch/x86/platform/efi/efi_64.c
++++ b/arch/x86/platform/efi/efi_64.c
+@@ -202,7 +202,7 @@ virt_to_phys_or_null_size(void *va, unsi
+ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages)
+ {
+-      unsigned long pfn, text, pf;
++      unsigned long pfn, text, pf, rodata;
+       struct page *page;
+       unsigned npages;
+       pgd_t *pgd = efi_mm.pgd;
+@@ -256,7 +256,7 @@ int __init efi_setup_page_tables(unsigne
+       efi_scratch.phys_stack = page_to_phys(page + 1); /* stack grows down */
+-      npages = (__end_rodata_aligned - _text) >> PAGE_SHIFT;
++      npages = (_etext - _text) >> PAGE_SHIFT;
+       text = __pa(_text);
+       pfn = text >> PAGE_SHIFT;
+@@ -266,6 +266,14 @@ int __init efi_setup_page_tables(unsigne
+               return 1;
+       }
++      npages = (__end_rodata - __start_rodata) >> PAGE_SHIFT;
++      rodata = __pa(__start_rodata);
++      pfn = rodata >> PAGE_SHIFT;
++      if (kernel_map_pages_in_pgd(pgd, pfn, rodata, npages, pf)) {
++              pr_err("Failed to map kernel rodata 1:1\n");
++              return 1;
++      }
++
+       return 0;
+ }
diff --git a/queue-5.6/hwmon-drivetemp-return-enodata-for-invalid-temperatures.patch b/queue-5.6/hwmon-drivetemp-return-enodata-for-invalid-temperatures.patch
new file mode 100644 (file)
index 0000000..3f798e2
--- /dev/null
@@ -0,0 +1,47 @@
+From ed08ebb7124e90a99420bb913d602907d377d03d Mon Sep 17 00:00:00 2001
+From: Guenter Roeck <linux@roeck-us.net>
+Date: Wed, 8 Apr 2020 20:37:30 -0700
+Subject: hwmon: (drivetemp) Return -ENODATA for invalid temperatures
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Guenter Roeck <linux@roeck-us.net>
+
+commit ed08ebb7124e90a99420bb913d602907d377d03d upstream.
+
+Holger Hoffstätte observed that Samsung 850 Pro may return invalid
+temperatures for a short period of time after resume. Return -ENODATA
+to userspace if this is observed.
+
+Fixes:  5b46903d8bf3 ("hwmon: Driver for disk and solid state drives with temperature sensors")
+Reported-by: Holger Hoffstätte <holger@applied-asynchrony.com>
+Cc: Holger Hoffstätte <holger@applied-asynchrony.com>
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hwmon/drivetemp.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/drivers/hwmon/drivetemp.c
++++ b/drivers/hwmon/drivetemp.c
+@@ -264,12 +264,18 @@ static int drivetemp_get_scttemp(struct
+               return err;
+       switch (attr) {
+       case hwmon_temp_input:
++              if (!temp_is_valid(buf[SCT_STATUS_TEMP]))
++                      return -ENODATA;
+               *val = temp_from_sct(buf[SCT_STATUS_TEMP]);
+               break;
+       case hwmon_temp_lowest:
++              if (!temp_is_valid(buf[SCT_STATUS_TEMP_LOWEST]))
++                      return -ENODATA;
+               *val = temp_from_sct(buf[SCT_STATUS_TEMP_LOWEST]);
+               break;
+       case hwmon_temp_highest:
++              if (!temp_is_valid(buf[SCT_STATUS_TEMP_HIGHEST]))
++                      return -ENODATA;
+               *val = temp_from_sct(buf[SCT_STATUS_TEMP_HIGHEST]);
+               break;
+       default:
diff --git a/queue-5.6/hwmon-drivetemp-use-drivetemp-s-true-module-name-in-kconfig-section.patch b/queue-5.6/hwmon-drivetemp-use-drivetemp-s-true-module-name-in-kconfig-section.patch
new file mode 100644 (file)
index 0000000..6ec2ef8
--- /dev/null
@@ -0,0 +1,65 @@
+From 6bdf8f3efe867c5893e27431a555e41f54ed7f9a Mon Sep 17 00:00:00 2001
+From: Ann T Ropea <bedhanger@gmx.de>
+Date: Tue, 7 Apr 2020 01:55:21 +0200
+Subject: hwmon: (drivetemp) Use drivetemp's true module name in Kconfig section
+
+From: Ann T Ropea <bedhanger@gmx.de>
+
+commit 6bdf8f3efe867c5893e27431a555e41f54ed7f9a upstream.
+
+The addition of the support for reading the temperature of ATA drives as
+per commit 5b46903d8bf3 ("hwmon: Driver for disk and solid state drives
+with temperature sensors") lists in the respective Kconfig section the
+name of the module to be optionally built as "satatemp".
+
+However, building the kernel modules with "CONFIG_SENSORS_DRIVETEMP=m",
+does not generate a file named "satatemp.ko".
+
+Instead, the rest of the original commit uses the term "drivetemp" and
+a file named "drivetemp.ko" ends up in the kernel's modules directory.
+This file has the right ingredients:
+
+       $ strings /path/to/drivetemp.ko | grep ^description
+       description=Hard drive temperature monitor
+
+and modprobing it produces the expected result:
+
+       # drivetemp is not loaded
+       $ sensors -u drivetemp-scsi-4-0
+       Specified sensor(s) not found!
+       $ sudo modprobe drivetemp
+       $ sensors -u drivetemp-scsi-4-0
+       drivetemp-scsi-4-0
+       Adapter: SCSI adapter
+       temp1:
+         temp1_input: 35.000
+         temp1_max: 60.000
+         temp1_min: 0.000
+         temp1_crit: 70.000
+         temp1_lcrit: -40.000
+         temp1_lowest: 20.000
+         temp1_highest: 36.000
+
+Fix Kconfig by referring to the true name of the module.
+
+Fixes: 5b46903d8bf3 ("hwmon: Driver for disk and solid state drives with temperature sensors")
+Signed-off-by: Ann T Ropea <bedhanger@gmx.de>
+Link: https://lore.kernel.org/r/20200406235521.185309-1-bedhanger@gmx.de
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hwmon/Kconfig |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/hwmon/Kconfig
++++ b/drivers/hwmon/Kconfig
+@@ -403,7 +403,7 @@ config SENSORS_DRIVETEMP
+         hard disk drives.
+         This driver can also be built as a module. If so, the module
+-        will be called satatemp.
++        will be called drivetemp.
+ config SENSORS_DS620
+       tristate "Dallas Semiconductor DS620"
diff --git a/queue-5.6/i2c-altera-use-proper-variable-to-hold-errno.patch b/queue-5.6/i2c-altera-use-proper-variable-to-hold-errno.patch
new file mode 100644 (file)
index 0000000..47e3827
--- /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
+@@ -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.6/net-cxgb4-check-the-return-from-t4_query_params-properly.patch b/queue-5.6/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-5.6/netfilter-nf_tables-reintroduce-the-nft_set_concat-flag.patch b/queue-5.6/netfilter-nf_tables-reintroduce-the-nft_set_concat-flag.patch
new file mode 100644 (file)
index 0000000..67db085
--- /dev/null
@@ -0,0 +1,52 @@
+From ef516e8625ddea90b3a0313f3a0b0baa83db7ac2 Mon Sep 17 00:00:00 2001
+From: Pablo Neira Ayuso <pablo@netfilter.org>
+Date: Tue, 7 Apr 2020 14:10:38 +0200
+Subject: netfilter: nf_tables: reintroduce the NFT_SET_CONCAT flag
+
+From: Pablo Neira Ayuso <pablo@netfilter.org>
+
+commit ef516e8625ddea90b3a0313f3a0b0baa83db7ac2 upstream.
+
+Stefano originally proposed to introduce this flag, users hit EOPNOTSUPP
+in new binaries with old kernels when defining a set with ranges in
+a concatenation.
+
+Fixes: f3a2181e16f1 ("netfilter: nf_tables: Support for sets with multiple ranged fields")
+Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ include/uapi/linux/netfilter/nf_tables.h |    2 ++
+ net/netfilter/nf_tables_api.c            |    2 +-
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+--- a/include/uapi/linux/netfilter/nf_tables.h
++++ b/include/uapi/linux/netfilter/nf_tables.h
+@@ -276,6 +276,7 @@ enum nft_rule_compat_attributes {
+  * @NFT_SET_TIMEOUT: set uses timeouts
+  * @NFT_SET_EVAL: set can be updated from the evaluation path
+  * @NFT_SET_OBJECT: set contains stateful objects
++ * @NFT_SET_CONCAT: set contains a concatenation
+  */
+ enum nft_set_flags {
+       NFT_SET_ANONYMOUS               = 0x1,
+@@ -285,6 +286,7 @@ enum nft_set_flags {
+       NFT_SET_TIMEOUT                 = 0x10,
+       NFT_SET_EVAL                    = 0x20,
+       NFT_SET_OBJECT                  = 0x40,
++      NFT_SET_CONCAT                  = 0x80,
+ };
+ /**
+--- a/net/netfilter/nf_tables_api.c
++++ b/net/netfilter/nf_tables_api.c
+@@ -3949,7 +3949,7 @@ static int nf_tables_newset(struct net *
+               if (flags & ~(NFT_SET_ANONYMOUS | NFT_SET_CONSTANT |
+                             NFT_SET_INTERVAL | NFT_SET_TIMEOUT |
+                             NFT_SET_MAP | NFT_SET_EVAL |
+-                            NFT_SET_OBJECT))
++                            NFT_SET_OBJECT | NFT_SET_CONCAT))
+                       return -EOPNOTSUPP;
+               /* Only one of these operations is supported */
+               if ((flags & (NFT_SET_MAP | NFT_SET_OBJECT)) ==
diff --git a/queue-5.6/rtw88-avoid-unused-function-warnings.patch b/queue-5.6/rtw88-avoid-unused-function-warnings.patch
new file mode 100644 (file)
index 0000000..0b68bcb
--- /dev/null
@@ -0,0 +1,71 @@
+From 7dc7c41607d192ff660ba4ea82d517745c1d7523 Mon Sep 17 00:00:00 2001
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Wed, 8 Apr 2020 20:53:51 +0200
+Subject: rtw88: avoid unused function warnings
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+commit 7dc7c41607d192ff660ba4ea82d517745c1d7523 upstream.
+
+The rtw88 driver defines emtpy functions with multiple indirections
+but gets one of these wrong:
+
+drivers/net/wireless/realtek/rtw88/pci.c:1347:12: error: 'rtw_pci_resume' defined but not used [-Werror=unused-function]
+ 1347 | static int rtw_pci_resume(struct device *dev)
+      |            ^~~~~~~~~~~~~~
+drivers/net/wireless/realtek/rtw88/pci.c:1342:12: error: 'rtw_pci_suspend' defined but not used [-Werror=unused-function]
+ 1342 | static int rtw_pci_suspend(struct device *dev)
+
+Better simplify it to rely on the conditional reference in
+SIMPLE_DEV_PM_OPS(), and mark the functions as __maybe_unused to avoid
+warning about it.
+
+I'm not sure if these are needed at all given that the functions
+don't do anything, but they were only recently added.
+
+Fixes: 44bc17f7f5b3 ("rtw88: support wowlan feature for 8822c")
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+Link: https://lore.kernel.org/r/20200408185413.218643-1-arnd@arndb.de
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/wireless/realtek/rtw88/pci.c |   11 +++--------
+ 1 file changed, 3 insertions(+), 8 deletions(-)
+
+--- a/drivers/net/wireless/realtek/rtw88/pci.c
++++ b/drivers/net/wireless/realtek/rtw88/pci.c
+@@ -1287,22 +1287,17 @@ static void rtw_pci_phy_cfg(struct rtw_d
+       rtw_pci_link_cfg(rtwdev);
+ }
+-#ifdef CONFIG_PM
+-static int rtw_pci_suspend(struct device *dev)
++static int __maybe_unused rtw_pci_suspend(struct device *dev)
+ {
+       return 0;
+ }
+-static int rtw_pci_resume(struct device *dev)
++static int __maybe_unused rtw_pci_resume(struct device *dev)
+ {
+       return 0;
+ }
+ static SIMPLE_DEV_PM_OPS(rtw_pm_ops, rtw_pci_suspend, rtw_pci_resume);
+-#define RTW_PM_OPS (&rtw_pm_ops)
+-#else
+-#define RTW_PM_OPS NULL
+-#endif
+ static int rtw_pci_claim(struct rtw_dev *rtwdev, struct pci_dev *pdev)
+ {
+@@ -1530,7 +1525,7 @@ static struct pci_driver rtw_pci_driver
+       .id_table = rtw_pci_id_table,
+       .probe = rtw_pci_probe,
+       .remove = rtw_pci_remove,
+-      .driver.pm = RTW_PM_OPS,
++      .driver.pm = &rtw_pm_ops,
+ };
+ module_pci_driver(rtw_pci_driver);
diff --git a/queue-5.6/rxrpc-fix-data-tx-to-disable-nofrag-for-udp-on-af_inet6-socket.patch b/queue-5.6/rxrpc-fix-data-tx-to-disable-nofrag-for-udp-on-af_inet6-socket.patch
new file mode 100644 (file)
index 0000000..a81928e
--- /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
+@@ -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();
index 9718f2fdf90fa7edfd4ce214fb56d079f7b7186f..440c9d6784cd06b60acf7ed18d02c85be4d06c9e 100644 (file)
@@ -24,3 +24,15 @@ drivers-soc-xilinx-fix-firmware-driver-kconfig-dependency.patch
 nfsd-memory-corruption-in-nfsd4_lock.patch
 arm-dts-omap3-disable-rng-on-n950-n9.patch
 bpf-forbid-xadd-on-spilled-pointers-for-unprivileged-users.patch
+brcmfmac-add-stub-for-monitor-interface-xmit.patch
+i2c-altera-use-proper-variable-to-hold-errno.patch
+hwmon-drivetemp-use-drivetemp-s-true-module-name-in-kconfig-section.patch
+clk-asm9260-fix-__clk_hw_register_fixed_rate_with_accuracy-typo.patch
+rtw88-avoid-unused-function-warnings.patch
+hwmon-drivetemp-return-enodata-for-invalid-temperatures.patch
+rxrpc-fix-data-tx-to-disable-nofrag-for-udp-on-af_inet6-socket.patch
+netfilter-nf_tables-reintroduce-the-nft_set_concat-flag.patch
+efi-x86-don-t-remap-text-rodata-gap-read-only-for-mixed-mode.patch
+net-cxgb4-check-the-return-from-t4_query_params-properly.patch
+tipc-fix-incorrect-increasing-of-link-window.patch
+xfs-acquire-superblock-freeze-protection-on-eofblocks-scans.patch
diff --git a/queue-5.6/tipc-fix-incorrect-increasing-of-link-window.patch b/queue-5.6/tipc-fix-incorrect-increasing-of-link-window.patch
new file mode 100644 (file)
index 0000000..2f964cc
--- /dev/null
@@ -0,0 +1,49 @@
+From edadedf1c5b4e4404192a0a4c3c0c05e3b7672ab Mon Sep 17 00:00:00 2001
+From: Tuong Lien <tuong.t.lien@dektech.com.au>
+Date: Wed, 15 Apr 2020 18:34:49 +0700
+Subject: tipc: fix incorrect increasing of link window
+
+From: Tuong Lien <tuong.t.lien@dektech.com.au>
+
+commit edadedf1c5b4e4404192a0a4c3c0c05e3b7672ab upstream.
+
+In commit 16ad3f4022bb ("tipc: introduce variable window congestion
+control"), we allow link window to change with the congestion avoidance
+algorithm. However, there is a bug that during the slow-start if packet
+retransmission occurs, the link will enter the fast-recovery phase, set
+its window to the 'ssthresh' which is never less than 300, so the link
+window suddenly increases to that limit instead of decreasing.
+
+Consequently, two issues have been observed:
+
+- For broadcast-link: it can leave a gap between the link queues that a
+new packet will be inserted and sent before the previous ones, i.e. not
+in-order.
+
+- For unicast: the algorithm does not work as expected, the link window
+jumps to the slow-start threshold whereas packet retransmission occurs.
+
+This commit fixes the issues by avoiding such the link window increase,
+but still decreasing if the 'ssthresh' is lowered.
+
+Fixes: 16ad3f4022bb ("tipc: introduce variable window congestion control")
+Acked-by: Jon Maloy <jmaloy@redhat.com>
+Signed-off-by: Tuong Lien <tuong.t.lien@dektech.com.au>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/tipc/link.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/net/tipc/link.c
++++ b/net/tipc/link.c
+@@ -1065,7 +1065,7 @@ static void tipc_link_update_cwin(struct
+       /* Enter fast recovery */
+       if (unlikely(retransmitted)) {
+               l->ssthresh = max_t(u16, l->window / 2, 300);
+-              l->window = l->ssthresh;
++              l->window = min_t(u16, l->ssthresh, l->window);
+               return;
+       }
+       /* Enter slow start */
diff --git a/queue-5.6/xfs-acquire-superblock-freeze-protection-on-eofblocks-scans.patch b/queue-5.6/xfs-acquire-superblock-freeze-protection-on-eofblocks-scans.patch
new file mode 100644 (file)
index 0000000..81372e3
--- /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
+@@ -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
+@@ -2264,7 +2264,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: