Date: Wednesday, April 20, 2022 @ 12:07:44
  Author: andyrtr
Revision: 442941

upgpkg: linux-lts 5.15.35-1: upstream update 5.15.35

Added:
  
linux-lts/trunk/0004-Bluetooth_btintel_Fix_bdaddress_comparison_with_garbage_value.patch
    (from rev 442940, 
linux-lts/trunk/0005-Bluetooth_btintel_Fix_bdaddress_comparison_with_garbage_value.patch)
  linux-lts/trunk/0005-lg-laptop_Recognize_more_models.patch
    (from rev 442940, 
linux-lts/trunk/0006-lg-laptop_Recognize_more_models.patch)
  linux-lts/trunk/0006_fix_NFSv4_mount_regression.diff
    (from rev 442940, linux-lts/trunk/0007_fix_NFSv4_mount_regression.diff)
Modified:
  linux-lts/trunk/PKGBUILD
  linux-lts/trunk/config
Deleted:
  
linux-lts/trunk/0004-cpufreq_intel_pstate_ITMT_support_for_overclocked_system.patch
  
linux-lts/trunk/0005-Bluetooth_btintel_Fix_bdaddress_comparison_with_garbage_value.patch
  linux-lts/trunk/0006-lg-laptop_Recognize_more_models.patch
  linux-lts/trunk/0007_fix_NFSv4_mount_regression.diff

--------------------------------------------------------------------------+
 0004-Bluetooth_btintel_Fix_bdaddress_comparison_with_garbage_value.patch |   
57 ++
 0004-cpufreq_intel_pstate_ITMT_support_for_overclocked_system.patch      |   
51 --
 0005-Bluetooth_btintel_Fix_bdaddress_comparison_with_garbage_value.patch |   
57 --
 0005-lg-laptop_Recognize_more_models.patch                               |   
36 +
 0006-lg-laptop_Recognize_more_models.patch                               |   
36 -
 0006_fix_NFSv4_mount_regression.diff                                     |  
243 ++++++++++
 0007_fix_NFSv4_mount_regression.diff                                     |  
243 ----------
 PKGBUILD                                                                 |   
16 
 config                                                                   |    
2 
 9 files changed, 344 insertions(+), 397 deletions(-)

Copied: 
linux-lts/trunk/0004-Bluetooth_btintel_Fix_bdaddress_comparison_with_garbage_value.patch
 (from rev 442940, 
linux-lts/trunk/0005-Bluetooth_btintel_Fix_bdaddress_comparison_with_garbage_value.patch)
===================================================================
--- 0004-Bluetooth_btintel_Fix_bdaddress_comparison_with_garbage_value.patch    
                        (rev 0)
+++ 0004-Bluetooth_btintel_Fix_bdaddress_comparison_with_garbage_value.patch    
2022-04-20 12:07:44 UTC (rev 442941)
@@ -0,0 +1,57 @@
+From a6d4fb4f5e7fe795d9e3b28b261a0f86f1026d03 Mon Sep 17 00:00:00 2001
+From: Kiran K <[email protected]>
+Date: Wed, 13 Oct 2021 13:35:11 +0530
+Subject: [PATCH] Bluetooth: btintel: Fix bdaddress comparison with garbage
+ value
+
+Intel Read Verision(TLV) data is parsed into a local structure variable
+and it contains a field for bd address. Bd address is returned only in
+bootloader mode and hence bd address in TLV structure needs to be validated
+only if controller is present in boot loader mode.
+
+Signed-off-by: Kiran K <[email protected]>
+Reviewed-by: Tedd Ho-Jeong An <[email protected]>
+---
+ drivers/bluetooth/btintel.c | 22 ++++++++++++++--------
+ 1 file changed, 14 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c
+index f1705b46fc889..b9055a3e61ed7 100644
+--- a/drivers/bluetooth/btintel.c
++++ b/drivers/bluetooth/btintel.c
+@@ -2006,14 +2006,16 @@ static int btintel_prepare_fw_download_tlv(struct 
hci_dev *hdev,
+       if (ver->img_type == 0x03) {
+               btintel_clear_flag(hdev, INTEL_BOOTLOADER);
+               btintel_check_bdaddr(hdev);
+-      }
+-
+-      /* If the OTP has no valid Bluetooth device address, then there will
+-       * also be no valid address for the operational firmware.
+-       */
+-      if (!bacmp(&ver->otp_bd_addr, BDADDR_ANY)) {
+-              bt_dev_info(hdev, "No device address configured");
+-              set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks);
++      } else {
++              /*
++               * Check for valid bd address in boot loader mode. Device
++               * will be marked as unconfigured if empty bd address is
++               * found.
++               */
++              if (!bacmp(&ver->otp_bd_addr, BDADDR_ANY)) {
++                      bt_dev_info(hdev, "No device address configured");
++                      set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks);
++              }
+       }
+ 
+       btintel_get_fw_name_tlv(ver, fwname, sizeof(fwname), "sfi");
+@@ -2303,6 +2305,10 @@ static int btintel_setup_combined(struct hci_dev *hdev)
+               goto exit_error;
+       }
+ 
++      /* memset ver_tlv to start with clean state as few fields are exclusive
++       * to bootloader mode and are not populated in operational mode
++       */
++      memset(&ver_tlv, 0, sizeof(ver_tlv));
+       /* For TLV type device, parse the tlv data */
+       err = btintel_parse_version_tlv(hdev, &ver_tlv, skb);
+       if (err) {

Deleted: 0004-cpufreq_intel_pstate_ITMT_support_for_overclocked_system.patch
===================================================================
--- 0004-cpufreq_intel_pstate_ITMT_support_for_overclocked_system.patch 
2022-04-20 12:03:42 UTC (rev 442940)
+++ 0004-cpufreq_intel_pstate_ITMT_support_for_overclocked_system.patch 
2022-04-20 12:07:44 UTC (rev 442941)
@@ -1,51 +0,0 @@
-From aa7300919d0656a001fe0d526508b8c5958e7630 Mon Sep 17 00:00:00 2001
-From: Srinivas Pandruvada <[email protected]>
-Date: Thu, 18 Nov 2021 21:18:01 -0800
-Subject: [PATCH] cpufreq: intel_pstate: ITMT support for overclocked system
-
-On systems with overclocking enabled, CPPC Highest Performance can be
-hard coded to 0xff. In this case even if we have cores with different
-highest performance, ITMT can't be enabled as the current implementation
-depends on CPPC Highest Performance.
-
-On such systems we can use MSR_HWP_CAPABILITIES maximum performance field
-when CPPC.Highest Performance is 0xff.
-
-Due to legacy reasons, we can't solely depend on MSR_HWP_CAPABILITIES as
-in some older systems CPPC Highest Performance is the only way to identify
-different performing cores.
-
-Reported-by: Michael Larabel <[email protected]>
-Signed-off-by: Srinivas Pandruvada <[email protected]>
----
- drivers/cpufreq/intel_pstate.c | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
-diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
-index e15c3bc17a55c..8a2c6b58b6524 100644
---- a/drivers/cpufreq/intel_pstate.c
-+++ b/drivers/cpufreq/intel_pstate.c
-@@ -335,6 +335,8 @@ static void intel_pstste_sched_itmt_work_fn(struct 
work_struct *work)
- 
- static DECLARE_WORK(sched_itmt_work, intel_pstste_sched_itmt_work_fn);
- 
-+#define CPPC_MAX_PERF U8_MAX
-+
- static void intel_pstate_set_itmt_prio(int cpu)
- {
-       struct cppc_perf_caps cppc_perf;
-@@ -345,6 +347,14 @@ static void intel_pstate_set_itmt_prio(int cpu)
-       if (ret)
-               return;
- 
-+      /*
-+       * On some systems with overclocking enabled, CPPC.highest_perf is 
hardcoded to 0xff.
-+       * In this case we can't use CPPC.highest_perf to enable ITMT.
-+       * In this case we can look at MSR_HWP_CAPABILITIES bits [8:0] to 
decide.
-+       */
-+      if (cppc_perf.highest_perf == CPPC_MAX_PERF)
-+              cppc_perf.highest_perf = 
HWP_HIGHEST_PERF(READ_ONCE(all_cpu_data[cpu]->hwp_cap_cached));
-+
-       /*
-        * The priorities can be set regardless of whether or not
-        * sched_set_itmt_support(true) has been called and it is valid to

Deleted: 
0005-Bluetooth_btintel_Fix_bdaddress_comparison_with_garbage_value.patch
===================================================================
--- 0005-Bluetooth_btintel_Fix_bdaddress_comparison_with_garbage_value.patch    
2022-04-20 12:03:42 UTC (rev 442940)
+++ 0005-Bluetooth_btintel_Fix_bdaddress_comparison_with_garbage_value.patch    
2022-04-20 12:07:44 UTC (rev 442941)
@@ -1,57 +0,0 @@
-From a6d4fb4f5e7fe795d9e3b28b261a0f86f1026d03 Mon Sep 17 00:00:00 2001
-From: Kiran K <[email protected]>
-Date: Wed, 13 Oct 2021 13:35:11 +0530
-Subject: [PATCH] Bluetooth: btintel: Fix bdaddress comparison with garbage
- value
-
-Intel Read Verision(TLV) data is parsed into a local structure variable
-and it contains a field for bd address. Bd address is returned only in
-bootloader mode and hence bd address in TLV structure needs to be validated
-only if controller is present in boot loader mode.
-
-Signed-off-by: Kiran K <[email protected]>
-Reviewed-by: Tedd Ho-Jeong An <[email protected]>
----
- drivers/bluetooth/btintel.c | 22 ++++++++++++++--------
- 1 file changed, 14 insertions(+), 8 deletions(-)
-
-diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c
-index f1705b46fc889..b9055a3e61ed7 100644
---- a/drivers/bluetooth/btintel.c
-+++ b/drivers/bluetooth/btintel.c
-@@ -2006,14 +2006,16 @@ static int btintel_prepare_fw_download_tlv(struct 
hci_dev *hdev,
-       if (ver->img_type == 0x03) {
-               btintel_clear_flag(hdev, INTEL_BOOTLOADER);
-               btintel_check_bdaddr(hdev);
--      }
--
--      /* If the OTP has no valid Bluetooth device address, then there will
--       * also be no valid address for the operational firmware.
--       */
--      if (!bacmp(&ver->otp_bd_addr, BDADDR_ANY)) {
--              bt_dev_info(hdev, "No device address configured");
--              set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks);
-+      } else {
-+              /*
-+               * Check for valid bd address in boot loader mode. Device
-+               * will be marked as unconfigured if empty bd address is
-+               * found.
-+               */
-+              if (!bacmp(&ver->otp_bd_addr, BDADDR_ANY)) {
-+                      bt_dev_info(hdev, "No device address configured");
-+                      set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks);
-+              }
-       }
- 
-       btintel_get_fw_name_tlv(ver, fwname, sizeof(fwname), "sfi");
-@@ -2303,6 +2305,10 @@ static int btintel_setup_combined(struct hci_dev *hdev)
-               goto exit_error;
-       }
- 
-+      /* memset ver_tlv to start with clean state as few fields are exclusive
-+       * to bootloader mode and are not populated in operational mode
-+       */
-+      memset(&ver_tlv, 0, sizeof(ver_tlv));
-       /* For TLV type device, parse the tlv data */
-       err = btintel_parse_version_tlv(hdev, &ver_tlv, skb);
-       if (err) {

Copied: linux-lts/trunk/0005-lg-laptop_Recognize_more_models.patch (from rev 
442940, linux-lts/trunk/0006-lg-laptop_Recognize_more_models.patch)
===================================================================
--- 0005-lg-laptop_Recognize_more_models.patch                          (rev 0)
+++ 0005-lg-laptop_Recognize_more_models.patch  2022-04-20 12:07:44 UTC (rev 
442941)
@@ -0,0 +1,36 @@
+From 72edf8c167268bb68d701f46006ccfdfa5490db8 Mon Sep 17 00:00:00 2001
+From: Matan Ziv-Av <[email protected]>
+Date: Tue, 23 Nov 2021 22:14:55 +0200
+Subject: [PATCH] lg-laptop: Recognize more models
+
+LG uses 5 instead of 0 in the third digit (second digit after 2019) of the 
year string to indicate newer models in the same year. Handle this case as well.
+
+Signed-off-by: Matan Ziv-Av <[email protected]>
+For: https://bugs.archlinux.org/task/71772
+---
+ drivers/platform/x86/lg-laptop.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/drivers/platform/x86/lg-laptop.c 
b/drivers/platform/x86/lg-laptop.c
+index 88b551caeaaf4..d6f74d3a7605e 100644
+--- a/drivers/platform/x86/lg-laptop.c
++++ b/drivers/platform/x86/lg-laptop.c
+@@ -658,6 +658,18 @@ static int acpi_add(struct acpi_device *device)
+       if (product && strlen(product) > 4)
+               switch (product[4]) {
+               case '5':
++                      if (strlen(product) > 5)
++                              switch (product[5]) {
++                              case 'N':
++                                      year = 2021;
++                                      break;
++                              case '0':
++                                      year = 2016;
++                                      break;
++                              default:
++                                      year = 2022;
++                              }
++                      break;
+               case '6':
+                       year = 2016;
+                       break;

Deleted: 0006-lg-laptop_Recognize_more_models.patch
===================================================================
--- 0006-lg-laptop_Recognize_more_models.patch  2022-04-20 12:03:42 UTC (rev 
442940)
+++ 0006-lg-laptop_Recognize_more_models.patch  2022-04-20 12:07:44 UTC (rev 
442941)
@@ -1,36 +0,0 @@
-From 72edf8c167268bb68d701f46006ccfdfa5490db8 Mon Sep 17 00:00:00 2001
-From: Matan Ziv-Av <[email protected]>
-Date: Tue, 23 Nov 2021 22:14:55 +0200
-Subject: [PATCH] lg-laptop: Recognize more models
-
-LG uses 5 instead of 0 in the third digit (second digit after 2019) of the 
year string to indicate newer models in the same year. Handle this case as well.
-
-Signed-off-by: Matan Ziv-Av <[email protected]>
-For: https://bugs.archlinux.org/task/71772
----
- drivers/platform/x86/lg-laptop.c | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
-diff --git a/drivers/platform/x86/lg-laptop.c 
b/drivers/platform/x86/lg-laptop.c
-index 88b551caeaaf4..d6f74d3a7605e 100644
---- a/drivers/platform/x86/lg-laptop.c
-+++ b/drivers/platform/x86/lg-laptop.c
-@@ -658,6 +658,18 @@ static int acpi_add(struct acpi_device *device)
-       if (product && strlen(product) > 4)
-               switch (product[4]) {
-               case '5':
-+                      if (strlen(product) > 5)
-+                              switch (product[5]) {
-+                              case 'N':
-+                                      year = 2021;
-+                                      break;
-+                              case '0':
-+                                      year = 2016;
-+                                      break;
-+                              default:
-+                                      year = 2022;
-+                              }
-+                      break;
-               case '6':
-                       year = 2016;
-                       break;

Copied: linux-lts/trunk/0006_fix_NFSv4_mount_regression.diff (from rev 442940, 
linux-lts/trunk/0007_fix_NFSv4_mount_regression.diff)
===================================================================
--- 0006_fix_NFSv4_mount_regression.diff                                (rev 0)
+++ 0006_fix_NFSv4_mount_regression.diff        2022-04-20 12:07:44 UTC (rev 
442941)
@@ -0,0 +1,243 @@
+From 6f2836341d8a39e1e000572b10959347d7e61fd9 Mon Sep 17 00:00:00 2001
+From: Olga Kornievskaia <[email protected]>
+Date: Wed, 12 Jan 2022 10:27:38 -0500
+Subject: NFSv4.1 query for fs_location attr on a new file system
+
+[ Upstream commit 1976b2b31462151403c9fc110204fcc2a77bdfd1 ]
+
+Query the server for other possible trunkable locations for a given
+file system on a 4.1+ mount.
+
+v2:
+-- added missing static to nfs4_discover_trunking,
+reported by the kernel test robot
+
+Signed-off-by: Olga Kornievskaia <[email protected]>
+Signed-off-by: Anna Schumaker <[email protected]>
+Signed-off-by: Sasha Levin <[email protected]>
+---
+ fs/nfs/client.c         |  7 +++++
+ fs/nfs/nfs4_fs.h        |  9 +++---
+ fs/nfs/nfs4proc.c       | 76 ++++++++++++++++++++++++++++++++++++++++++-------
+ fs/nfs/nfs4state.c      |  3 +-
+ include/linux/nfs_xdr.h |  1 +
+ 5 files changed, 81 insertions(+), 15 deletions(-)
+
+diff --git a/fs/nfs/client.c b/fs/nfs/client.c
+index 551833862171f..090b16890e3d6 100644
+--- a/fs/nfs/client.c
++++ b/fs/nfs/client.c
+@@ -860,6 +860,13 @@ int nfs_probe_fsinfo(struct nfs_server *server, struct 
nfs_fh *mntfh, struct nfs
+                       server->namelen = pathinfo.max_namelen;
+       }
+ 
++      if (clp->rpc_ops->discover_trunking != NULL &&
++                      (server->caps & NFS_CAP_FS_LOCATIONS)) {
++              error = clp->rpc_ops->discover_trunking(server, mntfh);
++              if (error < 0)
++                      return error;
++      }
++
+       return 0;
+ }
+ EXPORT_SYMBOL_GPL(nfs_probe_fsinfo);
+diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h
+index ba78df4b13d94..1a048ee653a11 100644
+--- a/fs/nfs/nfs4_fs.h
++++ b/fs/nfs/nfs4_fs.h
+@@ -261,8 +261,8 @@ struct nfs4_state_maintenance_ops {
+ };
+ 
+ struct nfs4_mig_recovery_ops {
+-      int (*get_locations)(struct inode *, struct nfs4_fs_locations *,
+-              struct page *, const struct cred *);
++      int (*get_locations)(struct nfs_server *, struct nfs_fh *,
++              struct nfs4_fs_locations *, struct page *, const struct cred *);
+       int (*fsid_present)(struct inode *, const struct cred *);
+ };
+ 
+@@ -303,8 +303,9 @@ extern int nfs4_do_close(struct nfs4_state *state, gfp_t 
gfp_mask, int wait);
+ extern int nfs4_server_capabilities(struct nfs_server *server, struct nfs_fh 
*fhandle);
+ extern int nfs4_proc_fs_locations(struct rpc_clnt *, struct inode *, const 
struct qstr *,
+                                 struct nfs4_fs_locations *, struct page *);
+-extern int nfs4_proc_get_locations(struct inode *, struct nfs4_fs_locations *,
+-              struct page *page, const struct cred *);
++extern int nfs4_proc_get_locations(struct nfs_server *, struct nfs_fh *,
++                                 struct nfs4_fs_locations *,
++                                 struct page *page, const struct cred *);
+ extern int nfs4_proc_fsid_present(struct inode *, const struct cred *);
+ extern struct rpc_clnt *nfs4_proc_lookup_mountpoint(struct inode *,
+                                                   struct dentry *,
+diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
+index 367a1b99b7550..389fa72d4ca98 100644
+--- a/fs/nfs/nfs4proc.c
++++ b/fs/nfs/nfs4proc.c
+@@ -3952,6 +3952,60 @@ int nfs4_server_capabilities(struct nfs_server *server, 
struct nfs_fh *fhandle)
+       return err;
+ }
+ 
++static int _nfs4_discover_trunking(struct nfs_server *server,
++                                 struct nfs_fh *fhandle)
++{
++      struct nfs4_fs_locations *locations = NULL;
++      struct page *page;
++      const struct cred *cred;
++      struct nfs_client *clp = server->nfs_client;
++      const struct nfs4_state_maintenance_ops *ops =
++              clp->cl_mvops->state_renewal_ops;
++      int status = -ENOMEM;
++
++      cred = ops->get_state_renewal_cred(clp);
++      if (cred == NULL) {
++              cred = nfs4_get_clid_cred(clp);
++              if (cred == NULL)
++                      return -ENOKEY;
++      }
++
++      page = alloc_page(GFP_KERNEL);
++      locations = kmalloc(sizeof(struct nfs4_fs_locations), GFP_KERNEL);
++      if (page == NULL || locations == NULL)
++              goto out;
++
++      status = nfs4_proc_get_locations(server, fhandle, locations, page,
++                                       cred);
++      if (status)
++              goto out;
++out:
++      if (page)
++              __free_page(page);
++      kfree(locations);
++      return status;
++}
++
++static int nfs4_discover_trunking(struct nfs_server *server,
++                                struct nfs_fh *fhandle)
++{
++      struct nfs4_exception exception = {
++              .interruptible = true,
++      };
++      struct nfs_client *clp = server->nfs_client;
++      int err = 0;
++
++      if (!nfs4_has_session(clp))
++              goto out;
++      do {
++              err = nfs4_handle_exception(server,
++                              _nfs4_discover_trunking(server, fhandle),
++                              &exception);
++      } while (exception.retry);
++out:
++      return err;
++}
++
+ static int _nfs4_lookup_root(struct nfs_server *server, struct nfs_fh 
*fhandle,
+               struct nfs_fsinfo *info)
+ {
+@@ -7886,18 +7940,18 @@ int nfs4_proc_fs_locations(struct rpc_clnt *client, 
struct inode *dir,
+  * appended to this compound to identify the client ID which is
+  * performing recovery.
+  */
+-static int _nfs40_proc_get_locations(struct inode *inode,
++static int _nfs40_proc_get_locations(struct nfs_server *server,
++                                   struct nfs_fh *fhandle,
+                                    struct nfs4_fs_locations *locations,
+                                    struct page *page, const struct cred *cred)
+ {
+-      struct nfs_server *server = NFS_SERVER(inode);
+       struct rpc_clnt *clnt = server->client;
+       u32 bitmask[2] = {
+               [0] = FATTR4_WORD0_FSID | FATTR4_WORD0_FS_LOCATIONS,
+       };
+       struct nfs4_fs_locations_arg args = {
+               .clientid       = server->nfs_client->cl_clientid,
+-              .fh             = NFS_FH(inode),
++              .fh             = fhandle,
+               .page           = page,
+               .bitmask        = bitmask,
+               .migration      = 1,            /* skip LOOKUP */
+@@ -7943,17 +7997,17 @@ static int _nfs40_proc_get_locations(struct inode 
*inode,
+  * When the client supports GETATTR(fs_locations_info), it can
+  * be plumbed in here.
+  */
+-static int _nfs41_proc_get_locations(struct inode *inode,
++static int _nfs41_proc_get_locations(struct nfs_server *server,
++                                   struct nfs_fh *fhandle,
+                                    struct nfs4_fs_locations *locations,
+                                    struct page *page, const struct cred *cred)
+ {
+-      struct nfs_server *server = NFS_SERVER(inode);
+       struct rpc_clnt *clnt = server->client;
+       u32 bitmask[2] = {
+               [0] = FATTR4_WORD0_FSID | FATTR4_WORD0_FS_LOCATIONS,
+       };
+       struct nfs4_fs_locations_arg args = {
+-              .fh             = NFS_FH(inode),
++              .fh             = fhandle,
+               .page           = page,
+               .bitmask        = bitmask,
+               .migration      = 1,            /* skip LOOKUP */
+@@ -8002,11 +8056,11 @@ static int _nfs41_proc_get_locations(struct inode 
*inode,
+  * -NFS4ERR_LEASE_MOVED is returned if the server still has leases
+  * from this client that require migration recovery.
+  */
+-int nfs4_proc_get_locations(struct inode *inode,
++int nfs4_proc_get_locations(struct nfs_server *server,
++                          struct nfs_fh *fhandle,
+                           struct nfs4_fs_locations *locations,
+                           struct page *page, const struct cred *cred)
+ {
+-      struct nfs_server *server = NFS_SERVER(inode);
+       struct nfs_client *clp = server->nfs_client;
+       const struct nfs4_mig_recovery_ops *ops =
+                                       clp->cl_mvops->mig_recovery_ops;
+@@ -8019,10 +8073,11 @@ int nfs4_proc_get_locations(struct inode *inode,
+               (unsigned long long)server->fsid.major,
+               (unsigned long long)server->fsid.minor,
+               clp->cl_hostname);
+-      nfs_display_fhandle(NFS_FH(inode), __func__);
++      nfs_display_fhandle(fhandle, __func__);
+ 
+       do {
+-              status = ops->get_locations(inode, locations, page, cred);
++              status = ops->get_locations(server, fhandle, locations, page,
++                                          cred);
+               if (status != -NFS4ERR_DELAY)
+                       break;
+               nfs4_handle_exception(server, status, &exception);
+@@ -10516,6 +10571,7 @@ const struct nfs_rpc_ops nfs_v4_clientops = {
+       .free_client    = nfs4_free_client,
+       .create_server  = nfs4_create_server,
+       .clone_server   = nfs_clone_server,
++      .discover_trunking = nfs4_discover_trunking,
+ };
+ 
+ static const struct xattr_handler nfs4_xattr_nfs4_acl_handler = {
+diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
+index acc1cd3e63a48..51f5cb41e87a4 100644
+--- a/fs/nfs/nfs4state.c
++++ b/fs/nfs/nfs4state.c
+@@ -2097,7 +2097,8 @@ static int nfs4_try_migration(struct nfs_server *server, 
const struct cred *cred
+       }
+ 
+       inode = d_inode(server->super->s_root);
+-      result = nfs4_proc_get_locations(inode, locations, page, cred);
++      result = nfs4_proc_get_locations(server, NFS_FH(inode), locations,
++                                       page, cred);
+       if (result) {
+               dprintk("<-- %s: failed to retrieve fs_locations: %d\n",
+                       __func__, result);
+diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
+index e9698b6278a52..ecd74cc347974 100644
+--- a/include/linux/nfs_xdr.h
++++ b/include/linux/nfs_xdr.h
+@@ -1805,6 +1805,7 @@ struct nfs_rpc_ops {
+       struct nfs_server *(*create_server)(struct fs_context *);
+       struct nfs_server *(*clone_server)(struct nfs_server *, struct nfs_fh *,
+                                          struct nfs_fattr *, 
rpc_authflavor_t);
++      int     (*discover_trunking)(struct nfs_server *, struct nfs_fh *);
+ };
+ 
+ /*
+-- 
+cgit 
+

Deleted: 0007_fix_NFSv4_mount_regression.diff
===================================================================
--- 0007_fix_NFSv4_mount_regression.diff        2022-04-20 12:03:42 UTC (rev 
442940)
+++ 0007_fix_NFSv4_mount_regression.diff        2022-04-20 12:07:44 UTC (rev 
442941)
@@ -1,243 +0,0 @@
-From 6f2836341d8a39e1e000572b10959347d7e61fd9 Mon Sep 17 00:00:00 2001
-From: Olga Kornievskaia <[email protected]>
-Date: Wed, 12 Jan 2022 10:27:38 -0500
-Subject: NFSv4.1 query for fs_location attr on a new file system
-
-[ Upstream commit 1976b2b31462151403c9fc110204fcc2a77bdfd1 ]
-
-Query the server for other possible trunkable locations for a given
-file system on a 4.1+ mount.
-
-v2:
--- added missing static to nfs4_discover_trunking,
-reported by the kernel test robot
-
-Signed-off-by: Olga Kornievskaia <[email protected]>
-Signed-off-by: Anna Schumaker <[email protected]>
-Signed-off-by: Sasha Levin <[email protected]>
----
- fs/nfs/client.c         |  7 +++++
- fs/nfs/nfs4_fs.h        |  9 +++---
- fs/nfs/nfs4proc.c       | 76 ++++++++++++++++++++++++++++++++++++++++++-------
- fs/nfs/nfs4state.c      |  3 +-
- include/linux/nfs_xdr.h |  1 +
- 5 files changed, 81 insertions(+), 15 deletions(-)
-
-diff --git a/fs/nfs/client.c b/fs/nfs/client.c
-index 551833862171f..090b16890e3d6 100644
---- a/fs/nfs/client.c
-+++ b/fs/nfs/client.c
-@@ -860,6 +860,13 @@ int nfs_probe_fsinfo(struct nfs_server *server, struct 
nfs_fh *mntfh, struct nfs
-                       server->namelen = pathinfo.max_namelen;
-       }
- 
-+      if (clp->rpc_ops->discover_trunking != NULL &&
-+                      (server->caps & NFS_CAP_FS_LOCATIONS)) {
-+              error = clp->rpc_ops->discover_trunking(server, mntfh);
-+              if (error < 0)
-+                      return error;
-+      }
-+
-       return 0;
- }
- EXPORT_SYMBOL_GPL(nfs_probe_fsinfo);
-diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h
-index ba78df4b13d94..1a048ee653a11 100644
---- a/fs/nfs/nfs4_fs.h
-+++ b/fs/nfs/nfs4_fs.h
-@@ -261,8 +261,8 @@ struct nfs4_state_maintenance_ops {
- };
- 
- struct nfs4_mig_recovery_ops {
--      int (*get_locations)(struct inode *, struct nfs4_fs_locations *,
--              struct page *, const struct cred *);
-+      int (*get_locations)(struct nfs_server *, struct nfs_fh *,
-+              struct nfs4_fs_locations *, struct page *, const struct cred *);
-       int (*fsid_present)(struct inode *, const struct cred *);
- };
- 
-@@ -303,8 +303,9 @@ extern int nfs4_do_close(struct nfs4_state *state, gfp_t 
gfp_mask, int wait);
- extern int nfs4_server_capabilities(struct nfs_server *server, struct nfs_fh 
*fhandle);
- extern int nfs4_proc_fs_locations(struct rpc_clnt *, struct inode *, const 
struct qstr *,
-                                 struct nfs4_fs_locations *, struct page *);
--extern int nfs4_proc_get_locations(struct inode *, struct nfs4_fs_locations *,
--              struct page *page, const struct cred *);
-+extern int nfs4_proc_get_locations(struct nfs_server *, struct nfs_fh *,
-+                                 struct nfs4_fs_locations *,
-+                                 struct page *page, const struct cred *);
- extern int nfs4_proc_fsid_present(struct inode *, const struct cred *);
- extern struct rpc_clnt *nfs4_proc_lookup_mountpoint(struct inode *,
-                                                   struct dentry *,
-diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
-index 367a1b99b7550..389fa72d4ca98 100644
---- a/fs/nfs/nfs4proc.c
-+++ b/fs/nfs/nfs4proc.c
-@@ -3952,6 +3952,60 @@ int nfs4_server_capabilities(struct nfs_server *server, 
struct nfs_fh *fhandle)
-       return err;
- }
- 
-+static int _nfs4_discover_trunking(struct nfs_server *server,
-+                                 struct nfs_fh *fhandle)
-+{
-+      struct nfs4_fs_locations *locations = NULL;
-+      struct page *page;
-+      const struct cred *cred;
-+      struct nfs_client *clp = server->nfs_client;
-+      const struct nfs4_state_maintenance_ops *ops =
-+              clp->cl_mvops->state_renewal_ops;
-+      int status = -ENOMEM;
-+
-+      cred = ops->get_state_renewal_cred(clp);
-+      if (cred == NULL) {
-+              cred = nfs4_get_clid_cred(clp);
-+              if (cred == NULL)
-+                      return -ENOKEY;
-+      }
-+
-+      page = alloc_page(GFP_KERNEL);
-+      locations = kmalloc(sizeof(struct nfs4_fs_locations), GFP_KERNEL);
-+      if (page == NULL || locations == NULL)
-+              goto out;
-+
-+      status = nfs4_proc_get_locations(server, fhandle, locations, page,
-+                                       cred);
-+      if (status)
-+              goto out;
-+out:
-+      if (page)
-+              __free_page(page);
-+      kfree(locations);
-+      return status;
-+}
-+
-+static int nfs4_discover_trunking(struct nfs_server *server,
-+                                struct nfs_fh *fhandle)
-+{
-+      struct nfs4_exception exception = {
-+              .interruptible = true,
-+      };
-+      struct nfs_client *clp = server->nfs_client;
-+      int err = 0;
-+
-+      if (!nfs4_has_session(clp))
-+              goto out;
-+      do {
-+              err = nfs4_handle_exception(server,
-+                              _nfs4_discover_trunking(server, fhandle),
-+                              &exception);
-+      } while (exception.retry);
-+out:
-+      return err;
-+}
-+
- static int _nfs4_lookup_root(struct nfs_server *server, struct nfs_fh 
*fhandle,
-               struct nfs_fsinfo *info)
- {
-@@ -7886,18 +7940,18 @@ int nfs4_proc_fs_locations(struct rpc_clnt *client, 
struct inode *dir,
-  * appended to this compound to identify the client ID which is
-  * performing recovery.
-  */
--static int _nfs40_proc_get_locations(struct inode *inode,
-+static int _nfs40_proc_get_locations(struct nfs_server *server,
-+                                   struct nfs_fh *fhandle,
-                                    struct nfs4_fs_locations *locations,
-                                    struct page *page, const struct cred *cred)
- {
--      struct nfs_server *server = NFS_SERVER(inode);
-       struct rpc_clnt *clnt = server->client;
-       u32 bitmask[2] = {
-               [0] = FATTR4_WORD0_FSID | FATTR4_WORD0_FS_LOCATIONS,
-       };
-       struct nfs4_fs_locations_arg args = {
-               .clientid       = server->nfs_client->cl_clientid,
--              .fh             = NFS_FH(inode),
-+              .fh             = fhandle,
-               .page           = page,
-               .bitmask        = bitmask,
-               .migration      = 1,            /* skip LOOKUP */
-@@ -7943,17 +7997,17 @@ static int _nfs40_proc_get_locations(struct inode 
*inode,
-  * When the client supports GETATTR(fs_locations_info), it can
-  * be plumbed in here.
-  */
--static int _nfs41_proc_get_locations(struct inode *inode,
-+static int _nfs41_proc_get_locations(struct nfs_server *server,
-+                                   struct nfs_fh *fhandle,
-                                    struct nfs4_fs_locations *locations,
-                                    struct page *page, const struct cred *cred)
- {
--      struct nfs_server *server = NFS_SERVER(inode);
-       struct rpc_clnt *clnt = server->client;
-       u32 bitmask[2] = {
-               [0] = FATTR4_WORD0_FSID | FATTR4_WORD0_FS_LOCATIONS,
-       };
-       struct nfs4_fs_locations_arg args = {
--              .fh             = NFS_FH(inode),
-+              .fh             = fhandle,
-               .page           = page,
-               .bitmask        = bitmask,
-               .migration      = 1,            /* skip LOOKUP */
-@@ -8002,11 +8056,11 @@ static int _nfs41_proc_get_locations(struct inode 
*inode,
-  * -NFS4ERR_LEASE_MOVED is returned if the server still has leases
-  * from this client that require migration recovery.
-  */
--int nfs4_proc_get_locations(struct inode *inode,
-+int nfs4_proc_get_locations(struct nfs_server *server,
-+                          struct nfs_fh *fhandle,
-                           struct nfs4_fs_locations *locations,
-                           struct page *page, const struct cred *cred)
- {
--      struct nfs_server *server = NFS_SERVER(inode);
-       struct nfs_client *clp = server->nfs_client;
-       const struct nfs4_mig_recovery_ops *ops =
-                                       clp->cl_mvops->mig_recovery_ops;
-@@ -8019,10 +8073,11 @@ int nfs4_proc_get_locations(struct inode *inode,
-               (unsigned long long)server->fsid.major,
-               (unsigned long long)server->fsid.minor,
-               clp->cl_hostname);
--      nfs_display_fhandle(NFS_FH(inode), __func__);
-+      nfs_display_fhandle(fhandle, __func__);
- 
-       do {
--              status = ops->get_locations(inode, locations, page, cred);
-+              status = ops->get_locations(server, fhandle, locations, page,
-+                                          cred);
-               if (status != -NFS4ERR_DELAY)
-                       break;
-               nfs4_handle_exception(server, status, &exception);
-@@ -10516,6 +10571,7 @@ const struct nfs_rpc_ops nfs_v4_clientops = {
-       .free_client    = nfs4_free_client,
-       .create_server  = nfs4_create_server,
-       .clone_server   = nfs_clone_server,
-+      .discover_trunking = nfs4_discover_trunking,
- };
- 
- static const struct xattr_handler nfs4_xattr_nfs4_acl_handler = {
-diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
-index acc1cd3e63a48..51f5cb41e87a4 100644
---- a/fs/nfs/nfs4state.c
-+++ b/fs/nfs/nfs4state.c
-@@ -2097,7 +2097,8 @@ static int nfs4_try_migration(struct nfs_server *server, 
const struct cred *cred
-       }
- 
-       inode = d_inode(server->super->s_root);
--      result = nfs4_proc_get_locations(inode, locations, page, cred);
-+      result = nfs4_proc_get_locations(server, NFS_FH(inode), locations,
-+                                       page, cred);
-       if (result) {
-               dprintk("<-- %s: failed to retrieve fs_locations: %d\n",
-                       __func__, result);
-diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
-index e9698b6278a52..ecd74cc347974 100644
---- a/include/linux/nfs_xdr.h
-+++ b/include/linux/nfs_xdr.h
-@@ -1805,6 +1805,7 @@ struct nfs_rpc_ops {
-       struct nfs_server *(*create_server)(struct fs_context *);
-       struct nfs_server *(*clone_server)(struct nfs_server *, struct nfs_fh *,
-                                          struct nfs_fattr *, 
rpc_authflavor_t);
-+      int     (*discover_trunking)(struct nfs_server *, struct nfs_fh *);
- };
- 
- /*
--- 
-cgit 
-

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2022-04-20 12:03:42 UTC (rev 442940)
+++ PKGBUILD    2022-04-20 12:07:44 UTC (rev 442941)
@@ -1,7 +1,7 @@
 # Maintainer: Andreas Radke <[email protected]>
 
 pkgbase=linux-lts
-pkgver=5.15.34
+pkgver=5.15.35
 pkgrel=1
 pkgdesc='LTS Linux'
 url="https://www.kernel.org/";
@@ -19,10 +19,9 @@
   0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
   0002-PCI_Add_more_NVIDIA_controllers_to_the_MSI_masking_quirk.patch
   0003-iommu_intel_do_deep_dma-unmapping_to_avoid_kernel-flooding.patch
-  0004-cpufreq_intel_pstate_ITMT_support_for_overclocked_system.patch
-  0005-Bluetooth_btintel_Fix_bdaddress_comparison_with_garbage_value.patch
-  0006-lg-laptop_Recognize_more_models.patch
-  0007_fix_NFSv4_mount_regression.diff
+  0004-Bluetooth_btintel_Fix_bdaddress_comparison_with_garbage_value.patch
+  0005-lg-laptop_Recognize_more_models.patch
+  0006_fix_NFSv4_mount_regression.diff
 )
 validpgpkeys=(
   'ABAF11C65A2970B130ABE3C479BE3E4300411886'  # Linus Torvalds
@@ -29,13 +28,12 @@
   '647F28654894E3BD457199BE38DBBDC86092693E'  # Greg Kroah-Hartman
 )
 # https://www.kernel.org/pub/linux/kernel/v5.x/sha256sums.asc
-sha256sums=('a7514685392f0f89b337fa252a10a004c6a97d23e8d1126059c8e373398fdb69'
+sha256sums=('0a1a5ae2f30eb2b38215e59077f045aabd7f4e2857a881482f02ea48186105d8'
             'SKIP'
-            '58d7a2536cb2cbdd659f6f2ffd24512355ce76c8c7a5379f001c802f6a8295ef'
+            'c1f3516b15b15d63382e40a71c16f348728b8e47a2337166a9d499234faf1894'
             '99df282c594cc269d9a5d19bb86ea887892d3654cfc53c4ce94a644cf3278423'
             'c35018601f04ae81e0a2018a8597595db6ae053158c206845399cdebb2d2b706'
             '7c7707c738983f3683d76295b496f578996b7341fa39ad334ec2833bfe4b966e'
-            '420844779356286057d931e30bbe1dabb8ee52bff575845a8fbf3c34e1a1d29e'
             '3fa8a4af66d5a3b99b48ca979a247c61e81c9b2d3bcdffa9d3895a5532a420b4'
             '79266c6cc970733fd35881d9a8f0a74c25c00b4d81741b8d4bba6827c48f7c78'
             'e9527ad81d5b1821a7b17c56cb3abaec85785563f51e448cb3c06f1c68e2966f')
@@ -49,7 +47,7 @@
 
   # fix NFSv4 mounting issue regression - FS#73838 / FS#73860
   # 
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/patch/?id=6f2836341d8a39e1e000572b10959347d7e61fd9
-  patch -Rp1 -i ../0007_fix_NFSv4_mount_regression.diff
+  patch -Rp1 -i ../0006_fix_NFSv4_mount_regression.diff
 
   echo "Setting version..."
   scripts/setlocalversion --save-scmversion

Modified: config
===================================================================
--- config      2022-04-20 12:03:42 UTC (rev 442940)
+++ config      2022-04-20 12:07:44 UTC (rev 442941)
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.15.34 Kernel Configuration
+# Linux/x86 5.15.35 Kernel Configuration
 #
 CONFIG_CC_VERSION_TEXT="gcc (GCC) 11.2.0"
 CONFIG_CC_IS_GCC=y

Reply via email to