]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
move the 6.6 queue back in place
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 21 Jan 2025 08:54:39 +0000 (09:54 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 21 Jan 2025 08:54:39 +0000 (09:54 +0100)
69 files changed:
queue-6.6/acpi-resource-acpi_dev_irq_override-check-dmi-match-.patch [moved from temp-6.6/acpi-resource-acpi_dev_irq_override-check-dmi-match-.patch with 100% similarity]
queue-6.6/alsa-hda-realtek-add-support-for-ayaneo-system-using-cs35l41-hda.patch [moved from temp-6.6/alsa-hda-realtek-add-support-for-ayaneo-system-using-cs35l41-hda.patch with 100% similarity]
queue-6.6/block-fix-uaf-for-flush-rq-while-iterating-tags.patch [moved from temp-6.6/block-fix-uaf-for-flush-rq-while-iterating-tags.patch with 100% similarity]
queue-6.6/bpf-fix-bpf_sk_select_reuseport-memory-leak.patch [moved from temp-6.6/bpf-fix-bpf_sk_select_reuseport-memory-leak.patch with 100% similarity]
queue-6.6/cachefiles-parse-the-secctx-immediately.patch [moved from temp-6.6/cachefiles-parse-the-secctx-immediately.patch with 100% similarity]
queue-6.6/drm-amd-display-fix-out-of-bounds-access-in-dcn21_link_encoder_create.patch [moved from temp-6.6/drm-amd-display-fix-out-of-bounds-access-in-dcn21_link_encoder_create.patch with 100% similarity]
queue-6.6/drm-amdgpu-always-sync-the-gfx-pipe-on-ctx-switch.patch [moved from temp-6.6/drm-amdgpu-always-sync-the-gfx-pipe-on-ctx-switch.patch with 100% similarity]
queue-6.6/drm-i915-fb-relax-clear-color-alignment-to-64-bytes.patch [moved from temp-6.6/drm-i915-fb-relax-clear-color-alignment-to-64-bytes.patch with 100% similarity]
queue-6.6/drm-v3d-ensure-job-pointer-is-set-to-null-after-job-.patch [moved from temp-6.6/drm-v3d-ensure-job-pointer-is-set-to-null-after-job-.patch with 100% similarity]
queue-6.6/drm-vmwgfx-add-new-keep_resv-bo-param.patch [moved from temp-6.6/drm-vmwgfx-add-new-keep_resv-bo-param.patch with 100% similarity]
queue-6.6/filemap-avoid-truncating-64-bit-offset-to-32-bits.patch [moved from temp-6.6/filemap-avoid-truncating-64-bit-offset-to-32-bits.patch with 100% similarity]
queue-6.6/fs-fix-missing-declaration-of-init_files.patch [moved from temp-6.6/fs-fix-missing-declaration-of-init_files.patch with 100% similarity]
queue-6.6/fs-proc-fix-softlockup-in-__read_vmcore-part-2.patch [moved from temp-6.6/fs-proc-fix-softlockup-in-__read_vmcore-part-2.patch with 100% similarity]
queue-6.6/gpio-xilinx-convert-gpio_lock-to-raw-spinlock.patch [moved from temp-6.6/gpio-xilinx-convert-gpio_lock-to-raw-spinlock.patch with 100% similarity]
queue-6.6/gtp-destroy-device-along-with-udp-socket-s-netns-dis.patch [moved from temp-6.6/gtp-destroy-device-along-with-udp-socket-s-netns-dis.patch with 100% similarity]
queue-6.6/gtp-use-exit_batch_rtnl-method.patch [moved from temp-6.6/gtp-use-exit_batch_rtnl-method.patch with 100% similarity]
queue-6.6/gtp-use-for_each_netdev_rcu-in-gtp_genl_dump_pdp.patch [moved from temp-6.6/gtp-use-for_each_netdev_rcu-in-gtp_genl_dump_pdp.patch with 100% similarity]
queue-6.6/hfs-sanity-check-the-root-record.patch [moved from temp-6.6/hfs-sanity-check-the-root-record.patch with 100% similarity]
queue-6.6/hrtimers-handle-cpu-state-correctly-on-hotplug.patch [moved from temp-6.6/hrtimers-handle-cpu-state-correctly-on-hotplug.patch with 100% similarity]
queue-6.6/hwmon-tmp513-fix-division-of-negative-numbers.patch [moved from temp-6.6/hwmon-tmp513-fix-division-of-negative-numbers.patch with 100% similarity]
queue-6.6/i2c-atr-fix-client-detach.patch [moved from temp-6.6/i2c-atr-fix-client-detach.patch with 100% similarity]
queue-6.6/i2c-mux-demux-pinctrl-check-initial-mux-selection-to.patch [moved from temp-6.6/i2c-mux-demux-pinctrl-check-initial-mux-selection-to.patch with 100% similarity]
queue-6.6/i2c-rcar-fix-nack-handling-when-being-a-target.patch [moved from temp-6.6/i2c-rcar-fix-nack-handling-when-being-a-target.patch with 100% similarity]
queue-6.6/iio-imu-inv_icm42600-fix-spi-burst-write-not-supported.patch [moved from temp-6.6/iio-imu-inv_icm42600-fix-spi-burst-write-not-supported.patch with 100% similarity]
queue-6.6/iomap-avoid-avoid-truncating-64-bit-offset-to-32-bit.patch [moved from temp-6.6/iomap-avoid-avoid-truncating-64-bit-offset-to-32-bit.patch with 100% similarity]
queue-6.6/irqchip-gic-v3-handle-cpu_pm_enter_failed-correctly.patch [moved from temp-6.6/irqchip-gic-v3-handle-cpu_pm_enter_failed-correctly.patch with 100% similarity]
queue-6.6/irqchip-gic-v3-its-don-t-enable-interrupts-in-its_irq_set_vcpu_affinity.patch [moved from temp-6.6/irqchip-gic-v3-its-don-t-enable-interrupts-in-its_irq_set_vcpu_affinity.patch with 100% similarity]
queue-6.6/irqchip-plug-a-of-node-reference-leak-in-platform_irqchip_probe.patch [moved from temp-6.6/irqchip-plug-a-of-node-reference-leak-in-platform_irqchip_probe.patch with 100% similarity]
queue-6.6/kheaders-ignore-silly-rename-files.patch [moved from temp-6.6/kheaders-ignore-silly-rename-files.patch with 100% similarity]
queue-6.6/mac802154-check-local-interfaces-before-deleting-sda.patch [moved from temp-6.6/mac802154-check-local-interfaces-before-deleting-sda.patch with 100% similarity]
queue-6.6/mptcp-be-sure-to-send-ack-when-mptcp-level-window-re-opens.patch [moved from temp-6.6/mptcp-be-sure-to-send-ack-when-mptcp-level-window-re-opens.patch with 100% similarity]
queue-6.6/mptcp-fix-spurious-wake-up-on-under-memory-pressure.patch [moved from temp-6.6/mptcp-fix-spurious-wake-up-on-under-memory-pressure.patch with 100% similarity]
queue-6.6/net-add-exit_batch_rtnl-method.patch [moved from temp-6.6/net-add-exit_batch_rtnl-method.patch with 100% similarity]
queue-6.6/net-ethernet-ti-cpsw_ale-fix-cpsw_ale_get_field.patch [moved from temp-6.6/net-ethernet-ti-cpsw_ale-fix-cpsw_ale_get_field.patch with 100% similarity]
queue-6.6/net-ethernet-xgbe-re-add-aneg-to-supported-features-in-phy-quirks.patch [moved from temp-6.6/net-ethernet-xgbe-re-add-aneg-to-supported-features-in-phy-quirks.patch with 100% similarity]
queue-6.6/net-fec-handle-page_pool_dev_alloc_pages-error.patch [moved from temp-6.6/net-fec-handle-page_pool_dev_alloc_pages-error.patch with 100% similarity]
queue-6.6/net-mlx5-clear-port-select-structure-when-fail-to-cr.patch [moved from temp-6.6/net-mlx5-clear-port-select-structure-when-fail-to-cr.patch with 100% similarity]
queue-6.6/net-mlx5-fix-rdma-tx-steering-prio.patch [moved from temp-6.6/net-mlx5-fix-rdma-tx-steering-prio.patch with 100% similarity]
queue-6.6/net-mlx5e-always-start-ipsec-sequence-number-from-1.patch [moved from temp-6.6/net-mlx5e-always-start-ipsec-sequence-number-from-1.patch with 100% similarity]
queue-6.6/net-mlx5e-fix-inversion-dependency-warning-while-ena.patch [moved from temp-6.6/net-mlx5e-fix-inversion-dependency-warning-while-ena.patch with 100% similarity]
queue-6.6/net-mlx5e-rely-on-reqid-in-ipsec-tunnel-mode.patch [moved from temp-6.6/net-mlx5e-rely-on-reqid-in-ipsec-tunnel-mode.patch with 100% similarity]
queue-6.6/net-xilinx-axienet-fix-irq-coalescing-packet-count-o.patch [moved from temp-6.6/net-xilinx-axienet-fix-irq-coalescing-packet-count-o.patch with 100% similarity]
queue-6.6/nfp-bpf-prevent-integer-overflow-in-nfp_bpf_event_ou.patch [moved from temp-6.6/nfp-bpf-prevent-integer-overflow-in-nfp_bpf_event_ou.patch with 100% similarity]
queue-6.6/nouveau-fence-handle-cross-device-fences-properly.patch [moved from temp-6.6/nouveau-fence-handle-cross-device-fences-properly.patch with 100% similarity]
queue-6.6/nvmet-propagate-npwg-topology.patch [moved from temp-6.6/nvmet-propagate-npwg-topology.patch with 100% similarity]
queue-6.6/ocfs2-fix-deadlock-in-ocfs2_get_system_file_inode.patch [moved from temp-6.6/ocfs2-fix-deadlock-in-ocfs2_get_system_file_inode.patch with 100% similarity]
queue-6.6/openvswitch-fix-lockup-on-tx-to-unregistering-netdev.patch [moved from temp-6.6/openvswitch-fix-lockup-on-tx-to-unregistering-netdev.patch with 100% similarity]
queue-6.6/pktgen-avoid-out-of-bounds-access-in-get_imix_entrie.patch [moved from temp-6.6/pktgen-avoid-out-of-bounds-access-in-get_imix_entrie.patch with 100% similarity]
queue-6.6/pmdomain-imx8mp-blk-ctrl-add-missing-loop-break-condition.patch [moved from temp-6.6/pmdomain-imx8mp-blk-ctrl-add-missing-loop-break-condition.patch with 100% similarity]
queue-6.6/poll_wait-add-mb-to-fix-theoretical-race-between-wai.patch [moved from temp-6.6/poll_wait-add-mb-to-fix-theoretical-race-between-wai.patch with 100% similarity]
queue-6.6/rdma-bnxt_re-fix-to-export-port-num-to-ib_query_qp.patch [moved from temp-6.6/rdma-bnxt_re-fix-to-export-port-num-to-ib_query_qp.patch with 100% similarity]
queue-6.6/revert-mtd-spi-nor-core-replace-dummy-buswidth-from-.patch [moved from temp-6.6/revert-mtd-spi-nor-core-replace-dummy-buswidth-from-.patch with 100% similarity]
queue-6.6/revert-pci-use-preserve_config-in-place-of-pci_flags.patch [moved from temp-6.6/revert-pci-use-preserve_config-in-place-of-pci_flags.patch with 100% similarity]
queue-6.6/scsi-ufs-core-honor-runtime-system-pm-levels-if-set-.patch [moved from temp-6.6/scsi-ufs-core-honor-runtime-system-pm-levels-if-set-.patch with 100% similarity]
queue-6.6/selftests-mptcp-avoid-spurious-errors-on-disconnect.patch [moved from temp-6.6/selftests-mptcp-avoid-spurious-errors-on-disconnect.patch with 100% similarity]
queue-6.6/selftests-tc-testing-reduce-rshift-value.patch [moved from temp-6.6/selftests-tc-testing-reduce-rshift-value.patch with 100% similarity]
queue-6.6/series [moved from temp-6.6/series with 94% similarity]
queue-6.6/smb-client-fix-double-free-of-tcp_server_info-hostna.patch [moved from temp-6.6/smb-client-fix-double-free-of-tcp_server_info-hostna.patch with 100% similarity]
queue-6.6/soc-ti-pruss-fix-pruss-apis.patch [moved from temp-6.6/soc-ti-pruss-fix-pruss-apis.patch with 100% similarity]
queue-6.6/vsock-bpf-return-early-if-transport-is-not-assigned.patch [moved from temp-6.6/vsock-bpf-return-early-if-transport-is-not-assigned.patch with 100% similarity]
queue-6.6/vsock-prevent-null-ptr-deref-in-vsock_.patch [moved from temp-6.6/vsock-prevent-null-ptr-deref-in-vsock_.patch with 100% similarity]
queue-6.6/vsock-reset-socket-state-when-de-assigning-the-transport.patch [moved from temp-6.6/vsock-reset-socket-state-when-de-assigning-the-transport.patch with 100% similarity]
queue-6.6/vsock-virtio-cancel-close-work-in-the-destructor.patch [moved from temp-6.6/vsock-virtio-cancel-close-work-in-the-destructor.patch with 100% similarity]
queue-6.6/vsock-virtio-discard-packets-if-the-transport-changes.patch [moved from temp-6.6/vsock-virtio-discard-packets-if-the-transport-changes.patch with 100% similarity]
queue-6.6/x86-asm-make-serialize-always_inline.patch [moved from temp-6.6/x86-asm-make-serialize-always_inline.patch with 100% similarity]
queue-6.6/zram-fix-potential-uaf-of-zram-table.patch [moved from temp-6.6/zram-fix-potential-uaf-of-zram-table.patch with 100% similarity]
temp-6.6/revert-ovl-do-not-encode-lower-fh-with-upper-sb_writers-held.patch [deleted file]
temp-6.6/revert-ovl-pass-realinode-to-ovl_encode_real_fh-instead-of-realdentry.patch [deleted file]
temp-6.6/revert-ovl-support-encoding-fid-from-inode-with-no-alias.patch [deleted file]

similarity index 94%
rename from temp-6.6/series
rename to queue-6.6/series
index c2ab85a07b521d47dabfec9856bb7a2ba35524ec..2e39acf5e2fc3b930db91f10d84108dcb7d05f3f 100644 (file)
@@ -1,6 +1,3 @@
-revert-ovl-support-encoding-fid-from-inode-with-no-alias.patch
-revert-ovl-pass-realinode-to-ovl_encode_real_fh-instead-of-realdentry.patch
-revert-ovl-do-not-encode-lower-fh-with-upper-sb_writers-held.patch
 net-ethernet-ti-cpsw_ale-fix-cpsw_ale_get_field.patch
 bpf-fix-bpf_sk_select_reuseport-memory-leak.patch
 openvswitch-fix-lockup-on-tx-to-unregistering-netdev.patch
diff --git a/temp-6.6/revert-ovl-do-not-encode-lower-fh-with-upper-sb_writers-held.patch b/temp-6.6/revert-ovl-do-not-encode-lower-fh-with-upper-sb_writers-held.patch
deleted file mode 100644 (file)
index a53aeed..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-From ee94867eb77c316799fa7b8f4851857c65e2740e Mon Sep 17 00:00:00 2001
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Date: Tue, 21 Jan 2025 09:13:50 +0100
-Subject: Revert "ovl: do not encode lower fh with upper sb_writers held"
-
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-This reverts commit 26423e18cd6f709ca4fe7194c29c11658cd0cdd0 which is
-commit 5b02bfc1e7e3811c5bf7f0fa626a0694d0dbbd77 upstream.
-
-It is reported to part of a series that causes problems in the 6.6.y
-tree, so revert it at this point in time and it can come back later if
-still needed.
-
-Reported-by: Ignat Korchagin <ignat@cloudflare.com>
-Link: https://lore.kernel.org/r/ACD4D6CC-C4D5-4657-A805-03C34559046E@cloudflare.com
-Cc: Dmitry Safonov <dima@arista.com>
-Cc: Amir Goldstein <amir73il@gmail.com>
-Cc: Christian Brauner <brauner@kernel.org>
-Cc: Sasha Levin <sashal@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- fs/overlayfs/copy_up.c   |   53 +++++++++++++++++------------------------------
- fs/overlayfs/namei.c     |   37 +++++++-------------------------
- fs/overlayfs/overlayfs.h |   26 ++++++-----------------
- fs/overlayfs/super.c     |   20 +++++------------
- fs/overlayfs/util.c      |   10 --------
- 5 files changed, 42 insertions(+), 104 deletions(-)
-
---- a/fs/overlayfs/copy_up.c
-+++ b/fs/overlayfs/copy_up.c
-@@ -426,29 +426,29 @@ out_err:
-       return ERR_PTR(err);
- }
--struct ovl_fh *ovl_get_origin_fh(struct ovl_fs *ofs, struct dentry *origin)
-+int ovl_set_origin(struct ovl_fs *ofs, struct dentry *lower,
-+                 struct dentry *upper)
- {
-+      const struct ovl_fh *fh = NULL;
-+      int err;
-+
-       /*
-        * When lower layer doesn't support export operations store a 'null' fh,
-        * so we can use the overlay.origin xattr to distignuish between a copy
-        * up and a pure upper inode.
-        */
--      if (!ovl_can_decode_fh(origin->d_sb))
--              return NULL;
--
--      return ovl_encode_real_fh(ofs, origin, false);
--}
--
--int ovl_set_origin_fh(struct ovl_fs *ofs, const struct ovl_fh *fh,
--                    struct dentry *upper)
--{
--      int err;
-+      if (ovl_can_decode_fh(lower->d_sb)) {
-+              fh = ovl_encode_real_fh(ofs, lower, false);
-+              if (IS_ERR(fh))
-+                      return PTR_ERR(fh);
-+      }
-       /*
-        * Do not fail when upper doesn't support xattrs.
-        */
-       err = ovl_check_setxattr(ofs, upper, OVL_XATTR_ORIGIN, fh->buf,
-                                fh ? fh->fb.len : 0, 0);
-+      kfree(fh);
-       /* Ignore -EPERM from setting "user.*" on symlink/special */
-       return err == -EPERM ? 0 : err;
-@@ -476,7 +476,7 @@ static int ovl_set_upper_fh(struct ovl_f
-  *
-  * Caller must hold i_mutex on indexdir.
-  */
--static int ovl_create_index(struct dentry *dentry, const struct ovl_fh *fh,
-+static int ovl_create_index(struct dentry *dentry, struct dentry *origin,
-                           struct dentry *upper)
- {
-       struct ovl_fs *ofs = OVL_FS(dentry->d_sb);
-@@ -502,7 +502,7 @@ static int ovl_create_index(struct dentr
-       if (WARN_ON(ovl_test_flag(OVL_INDEX, d_inode(dentry))))
-               return -EIO;
--      err = ovl_get_index_name_fh(fh, &name);
-+      err = ovl_get_index_name(ofs, origin, &name);
-       if (err)
-               return err;
-@@ -541,7 +541,6 @@ struct ovl_copy_up_ctx {
-       struct dentry *destdir;
-       struct qstr destname;
-       struct dentry *workdir;
--      const struct ovl_fh *origin_fh;
-       bool origin;
-       bool indexed;
-       bool metacopy;
-@@ -638,7 +637,7 @@ static int ovl_copy_up_metadata(struct o
-        * hard link.
-        */
-       if (c->origin) {
--              err = ovl_set_origin_fh(ofs, c->origin_fh, temp);
-+              err = ovl_set_origin(ofs, c->lowerpath.dentry, temp);
-               if (err)
-                       return err;
-       }
-@@ -750,7 +749,7 @@ static int ovl_copy_up_workdir(struct ov
-               goto cleanup;
-       if (S_ISDIR(c->stat.mode) && c->indexed) {
--              err = ovl_create_index(c->dentry, c->origin_fh, temp);
-+              err = ovl_create_index(c->dentry, c->lowerpath.dentry, temp);
-               if (err)
-                       goto cleanup;
-       }
-@@ -862,8 +861,6 @@ static int ovl_do_copy_up(struct ovl_cop
- {
-       int err;
-       struct ovl_fs *ofs = OVL_FS(c->dentry->d_sb);
--      struct dentry *origin = c->lowerpath.dentry;
--      struct ovl_fh *fh = NULL;
-       bool to_index = false;
-       /*
-@@ -880,25 +877,17 @@ static int ovl_do_copy_up(struct ovl_cop
-                       to_index = true;
-       }
--      if (S_ISDIR(c->stat.mode) || c->stat.nlink == 1 || to_index) {
--              fh = ovl_get_origin_fh(ofs, origin);
--              if (IS_ERR(fh))
--                      return PTR_ERR(fh);
--
--              /* origin_fh may be NULL */
--              c->origin_fh = fh;
-+      if (S_ISDIR(c->stat.mode) || c->stat.nlink == 1 || to_index)
-               c->origin = true;
--      }
-       if (to_index) {
-               c->destdir = ovl_indexdir(c->dentry->d_sb);
--              err = ovl_get_index_name(ofs, origin, &c->destname);
-+              err = ovl_get_index_name(ofs, c->lowerpath.dentry, &c->destname);
-               if (err)
--                      goto out_free_fh;
-+                      return err;
-       } else if (WARN_ON(!c->parent)) {
-               /* Disconnected dentry must be copied up to index dir */
--              err = -EIO;
--              goto out_free_fh;
-+              return -EIO;
-       } else {
-               /*
-                * Mark parent "impure" because it may now contain non-pure
-@@ -906,7 +895,7 @@ static int ovl_do_copy_up(struct ovl_cop
-                */
-               err = ovl_set_impure(c->parent, c->destdir);
-               if (err)
--                      goto out_free_fh;
-+                      return err;
-       }
-       /* Should we copyup with O_TMPFILE or with workdir? */
-@@ -938,8 +927,6 @@ static int ovl_do_copy_up(struct ovl_cop
- out:
-       if (to_index)
-               kfree(c->destname.name);
--out_free_fh:
--      kfree(fh);
-       return err;
- }
---- a/fs/overlayfs/namei.c
-+++ b/fs/overlayfs/namei.c
-@@ -507,19 +507,6 @@ static int ovl_verify_fh(struct ovl_fs *
-       return err;
- }
--int ovl_verify_set_fh(struct ovl_fs *ofs, struct dentry *dentry,
--                    enum ovl_xattr ox, const struct ovl_fh *fh,
--                    bool is_upper, bool set)
--{
--      int err;
--
--      err = ovl_verify_fh(ofs, dentry, ox, fh);
--      if (set && err == -ENODATA)
--              err = ovl_setxattr(ofs, dentry, ox, fh->buf, fh->fb.len);
--
--      return err;
--}
--
- /*
-  * Verify that @real dentry matches the file handle stored in xattr @name.
-  *
-@@ -528,9 +515,9 @@ int ovl_verify_set_fh(struct ovl_fs *ofs
-  *
-  * Return 0 on match, -ESTALE on mismatch, -ENODATA on no xattr, < 0 on error.
-  */
--int ovl_verify_origin_xattr(struct ovl_fs *ofs, struct dentry *dentry,
--                          enum ovl_xattr ox, struct dentry *real,
--                          bool is_upper, bool set)
-+int ovl_verify_set_fh(struct ovl_fs *ofs, struct dentry *dentry,
-+                    enum ovl_xattr ox, struct dentry *real, bool is_upper,
-+                    bool set)
- {
-       struct inode *inode;
-       struct ovl_fh *fh;
-@@ -543,7 +530,9 @@ int ovl_verify_origin_xattr(struct ovl_f
-               goto fail;
-       }
--      err = ovl_verify_set_fh(ofs, dentry, ox, fh, is_upper, set);
-+      err = ovl_verify_fh(ofs, dentry, ox, fh);
-+      if (set && err == -ENODATA)
-+              err = ovl_setxattr(ofs, dentry, ox, fh->buf, fh->fb.len);
-       if (err)
-               goto fail;
-@@ -559,7 +548,6 @@ fail:
-       goto out;
- }
--
- /* Get upper dentry from index */
- struct dentry *ovl_index_upper(struct ovl_fs *ofs, struct dentry *index,
-                              bool connected)
-@@ -696,7 +684,7 @@ orphan:
-       goto out;
- }
--int ovl_get_index_name_fh(const struct ovl_fh *fh, struct qstr *name)
-+static int ovl_get_index_name_fh(struct ovl_fh *fh, struct qstr *name)
- {
-       char *n, *s;
-@@ -885,27 +873,20 @@ int ovl_path_next(int idx, struct dentry
- static int ovl_fix_origin(struct ovl_fs *ofs, struct dentry *dentry,
-                         struct dentry *lower, struct dentry *upper)
- {
--      const struct ovl_fh *fh;
-       int err;
-       if (ovl_check_origin_xattr(ofs, upper))
-               return 0;
--      fh = ovl_get_origin_fh(ofs, lower);
--      if (IS_ERR(fh))
--              return PTR_ERR(fh);
--
-       err = ovl_want_write(dentry);
-       if (err)
--              goto out;
-+              return err;
--      err = ovl_set_origin_fh(ofs, fh, upper);
-+      err = ovl_set_origin(ofs, lower, upper);
-       if (!err)
-               err = ovl_set_impure(dentry->d_parent, upper->d_parent);
-       ovl_drop_write(dentry);
--out:
--      kfree(fh);
-       return err;
- }
---- a/fs/overlayfs/overlayfs.h
-+++ b/fs/overlayfs/overlayfs.h
-@@ -632,15 +632,11 @@ struct dentry *ovl_decode_real_fh(struct
- int ovl_check_origin_fh(struct ovl_fs *ofs, struct ovl_fh *fh, bool connected,
-                       struct dentry *upperdentry, struct ovl_path **stackp);
- int ovl_verify_set_fh(struct ovl_fs *ofs, struct dentry *dentry,
--                    enum ovl_xattr ox, const struct ovl_fh *fh,
--                    bool is_upper, bool set);
--int ovl_verify_origin_xattr(struct ovl_fs *ofs, struct dentry *dentry,
--                          enum ovl_xattr ox, struct dentry *real,
--                          bool is_upper, bool set);
-+                    enum ovl_xattr ox, struct dentry *real, bool is_upper,
-+                    bool set);
- struct dentry *ovl_index_upper(struct ovl_fs *ofs, struct dentry *index,
-                              bool connected);
- int ovl_verify_index(struct ovl_fs *ofs, struct dentry *index);
--int ovl_get_index_name_fh(const struct ovl_fh *fh, struct qstr *name);
- int ovl_get_index_name(struct ovl_fs *ofs, struct dentry *origin,
-                      struct qstr *name);
- struct dentry *ovl_get_index_fh(struct ovl_fs *ofs, struct ovl_fh *fh);
-@@ -652,24 +648,17 @@ struct dentry *ovl_lookup(struct inode *
-                         unsigned int flags);
- bool ovl_lower_positive(struct dentry *dentry);
--static inline int ovl_verify_origin_fh(struct ovl_fs *ofs, struct dentry *upper,
--                                     const struct ovl_fh *fh, bool set)
--{
--      return ovl_verify_set_fh(ofs, upper, OVL_XATTR_ORIGIN, fh, false, set);
--}
--
- static inline int ovl_verify_origin(struct ovl_fs *ofs, struct dentry *upper,
-                                   struct dentry *origin, bool set)
- {
--      return ovl_verify_origin_xattr(ofs, upper, OVL_XATTR_ORIGIN, origin,
--                                     false, set);
-+      return ovl_verify_set_fh(ofs, upper, OVL_XATTR_ORIGIN, origin,
-+                               false, set);
- }
- static inline int ovl_verify_upper(struct ovl_fs *ofs, struct dentry *index,
-                                  struct dentry *upper, bool set)
- {
--      return ovl_verify_origin_xattr(ofs, index, OVL_XATTR_UPPER, upper,
--                                     true, set);
-+      return ovl_verify_set_fh(ofs, index, OVL_XATTR_UPPER, upper, true, set);
- }
- /* readdir.c */
-@@ -834,9 +823,8 @@ int ovl_copy_xattr(struct super_block *s
- int ovl_set_attr(struct ovl_fs *ofs, struct dentry *upper, struct kstat *stat);
- struct ovl_fh *ovl_encode_real_fh(struct ovl_fs *ofs, struct dentry *real,
-                                 bool is_upper);
--struct ovl_fh *ovl_get_origin_fh(struct ovl_fs *ofs, struct dentry *origin);
--int ovl_set_origin_fh(struct ovl_fs *ofs, const struct ovl_fh *fh,
--                    struct dentry *upper);
-+int ovl_set_origin(struct ovl_fs *ofs, struct dentry *lower,
-+                 struct dentry *upper);
- /* export.c */
- extern const struct export_operations ovl_export_operations;
---- a/fs/overlayfs/super.c
-+++ b/fs/overlayfs/super.c
-@@ -879,20 +879,15 @@ static int ovl_get_indexdir(struct super
- {
-       struct vfsmount *mnt = ovl_upper_mnt(ofs);
-       struct dentry *indexdir;
--      struct dentry *origin = ovl_lowerstack(oe)->dentry;
--      const struct ovl_fh *fh;
-       int err;
--      fh = ovl_get_origin_fh(ofs, origin);
--      if (IS_ERR(fh))
--              return PTR_ERR(fh);
--
-       err = mnt_want_write(mnt);
-       if (err)
--              goto out_free_fh;
-+              return err;
-       /* Verify lower root is upper root origin */
--      err = ovl_verify_origin_fh(ofs, upperpath->dentry, fh, true);
-+      err = ovl_verify_origin(ofs, upperpath->dentry,
-+                              ovl_lowerstack(oe)->dentry, true);
-       if (err) {
-               pr_err("failed to verify upper root origin\n");
-               goto out;
-@@ -924,10 +919,9 @@ static int ovl_get_indexdir(struct super
-                * directory entries.
-                */
-               if (ovl_check_origin_xattr(ofs, ofs->indexdir)) {
--                      err = ovl_verify_origin_xattr(ofs, ofs->indexdir,
--                                                    OVL_XATTR_ORIGIN,
--                                                    upperpath->dentry, true,
--                                                    false);
-+                      err = ovl_verify_set_fh(ofs, ofs->indexdir,
-+                                              OVL_XATTR_ORIGIN,
-+                                              upperpath->dentry, true, false);
-                       if (err)
-                               pr_err("failed to verify index dir 'origin' xattr\n");
-               }
-@@ -945,8 +939,6 @@ static int ovl_get_indexdir(struct super
- out:
-       mnt_drop_write(mnt);
--out_free_fh:
--      kfree(fh);
-       return err;
- }
---- a/fs/overlayfs/util.c
-+++ b/fs/overlayfs/util.c
-@@ -976,18 +976,12 @@ static void ovl_cleanup_index(struct den
-       struct dentry *index = NULL;
-       struct inode *inode;
-       struct qstr name = { };
--      bool got_write = false;
-       int err;
-       err = ovl_get_index_name(ofs, lowerdentry, &name);
-       if (err)
-               goto fail;
--      err = ovl_want_write(dentry);
--      if (err)
--              goto fail;
--
--      got_write = true;
-       inode = d_inode(upperdentry);
-       if (!S_ISDIR(inode->i_mode) && inode->i_nlink != 1) {
-               pr_warn_ratelimited("cleanup linked index (%pd2, ino=%lu, nlink=%u)\n",
-@@ -1025,8 +1019,6 @@ static void ovl_cleanup_index(struct den
-               goto fail;
- out:
--      if (got_write)
--              ovl_drop_write(dentry);
-       kfree(name.name);
-       dput(index);
-       return;
-@@ -1097,8 +1089,6 @@ void ovl_nlink_end(struct dentry *dentry
- {
-       struct inode *inode = d_inode(dentry);
--      ovl_drop_write(dentry);
--
-       if (ovl_test_flag(OVL_INDEX, inode) && inode->i_nlink == 0) {
-               const struct cred *old_cred;
diff --git a/temp-6.6/revert-ovl-pass-realinode-to-ovl_encode_real_fh-instead-of-realdentry.patch b/temp-6.6/revert-ovl-pass-realinode-to-ovl_encode_real_fh-instead-of-realdentry.patch
deleted file mode 100644 (file)
index 38f01ae..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-From 58dc59cfbeb18778fab486d382b851af4cd7e264 Mon Sep 17 00:00:00 2001
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Date: Tue, 21 Jan 2025 09:13:38 +0100
-Subject: Revert "ovl: pass realinode to ovl_encode_real_fh() instead of realdentry"
-
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-This reverts commit a3f8a2b13a277d942c810d2ccc654d5bc824a430 which is
-commit 07aeefae7ff44d80524375253980b1bdee2396b0 upstream.
-
-It is reported to part of a series that causes problems in the 6.6.y
-tree, so revert it at this point in time and it can come back later if
-still needed.
-
-Reported-by: Ignat Korchagin <ignat@cloudflare.com>
-Link: https://lore.kernel.org/r/ACD4D6CC-C4D5-4657-A805-03C34559046E@cloudflare.com
-Cc: Dmitry Safonov <dima@arista.com>
-Cc: Amir Goldstein <amir73il@gmail.com>
-Cc: Christian Brauner <brauner@kernel.org>
-Cc: Sasha Levin <sashal@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- fs/overlayfs/copy_up.c   |   11 +++++------
- fs/overlayfs/export.c    |    5 ++---
- fs/overlayfs/namei.c     |    4 ++--
- fs/overlayfs/overlayfs.h |    2 +-
- 4 files changed, 10 insertions(+), 12 deletions(-)
-
---- a/fs/overlayfs/copy_up.c
-+++ b/fs/overlayfs/copy_up.c
-@@ -371,13 +371,13 @@ int ovl_set_attr(struct ovl_fs *ofs, str
-       return err;
- }
--struct ovl_fh *ovl_encode_real_fh(struct ovl_fs *ofs, struct inode *realinode,
-+struct ovl_fh *ovl_encode_real_fh(struct ovl_fs *ofs, struct dentry *real,
-                                 bool is_upper)
- {
-       struct ovl_fh *fh;
-       int fh_type, dwords;
-       int buflen = MAX_HANDLE_SZ;
--      uuid_t *uuid = &realinode->i_sb->s_uuid;
-+      uuid_t *uuid = &real->d_sb->s_uuid;
-       int err;
-       /* Make sure the real fid stays 32bit aligned */
-@@ -394,8 +394,7 @@ struct ovl_fh *ovl_encode_real_fh(struct
-        * the price or reconnecting the dentry.
-        */
-       dwords = buflen >> 2;
--      fh_type = exportfs_encode_inode_fh(realinode, (void *)fh->fb.fid,
--                                         &dwords, NULL, 0);
-+      fh_type = exportfs_encode_fh(real, (void *)fh->fb.fid, &dwords, 0);
-       buflen = (dwords << 2);
-       err = -EIO;
-@@ -437,7 +436,7 @@ struct ovl_fh *ovl_get_origin_fh(struct
-       if (!ovl_can_decode_fh(origin->d_sb))
-               return NULL;
--      return ovl_encode_real_fh(ofs, d_inode(origin), false);
-+      return ovl_encode_real_fh(ofs, origin, false);
- }
- int ovl_set_origin_fh(struct ovl_fs *ofs, const struct ovl_fh *fh,
-@@ -462,7 +461,7 @@ static int ovl_set_upper_fh(struct ovl_f
-       const struct ovl_fh *fh;
-       int err;
--      fh = ovl_encode_real_fh(ofs, d_inode(upper), true);
-+      fh = ovl_encode_real_fh(ofs, upper, true);
-       if (IS_ERR(fh))
-               return PTR_ERR(fh);
---- a/fs/overlayfs/export.c
-+++ b/fs/overlayfs/export.c
-@@ -228,7 +228,6 @@ static int ovl_check_encode_origin(struc
- static int ovl_dentry_to_fid(struct ovl_fs *ofs, struct dentry *dentry,
-                            u32 *fid, int buflen)
- {
--      struct inode *inode = d_inode(dentry);
-       struct ovl_fh *fh = NULL;
-       int err, enc_lower;
-       int len;
-@@ -242,8 +241,8 @@ static int ovl_dentry_to_fid(struct ovl_
-               goto fail;
-       /* Encode an upper or lower file handle */
--      fh = ovl_encode_real_fh(ofs, enc_lower ? ovl_inode_lower(inode) :
--                              ovl_inode_upper(inode), !enc_lower);
-+      fh = ovl_encode_real_fh(ofs, enc_lower ? ovl_dentry_lower(dentry) :
-+                              ovl_dentry_upper(dentry), !enc_lower);
-       if (IS_ERR(fh))
-               return PTR_ERR(fh);
---- a/fs/overlayfs/namei.c
-+++ b/fs/overlayfs/namei.c
-@@ -536,7 +536,7 @@ int ovl_verify_origin_xattr(struct ovl_f
-       struct ovl_fh *fh;
-       int err;
--      fh = ovl_encode_real_fh(ofs, d_inode(real), is_upper);
-+      fh = ovl_encode_real_fh(ofs, real, is_upper);
-       err = PTR_ERR(fh);
-       if (IS_ERR(fh)) {
-               fh = NULL;
-@@ -732,7 +732,7 @@ int ovl_get_index_name(struct ovl_fs *of
-       struct ovl_fh *fh;
-       int err;
--      fh = ovl_encode_real_fh(ofs, d_inode(origin), false);
-+      fh = ovl_encode_real_fh(ofs, origin, false);
-       if (IS_ERR(fh))
-               return PTR_ERR(fh);
---- a/fs/overlayfs/overlayfs.h
-+++ b/fs/overlayfs/overlayfs.h
-@@ -832,7 +832,7 @@ int ovl_copy_up_with_data(struct dentry
- int ovl_maybe_copy_up(struct dentry *dentry, int flags);
- int ovl_copy_xattr(struct super_block *sb, const struct path *path, struct dentry *new);
- int ovl_set_attr(struct ovl_fs *ofs, struct dentry *upper, struct kstat *stat);
--struct ovl_fh *ovl_encode_real_fh(struct ovl_fs *ofs, struct inode *realinode,
-+struct ovl_fh *ovl_encode_real_fh(struct ovl_fs *ofs, struct dentry *real,
-                                 bool is_upper);
- struct ovl_fh *ovl_get_origin_fh(struct ovl_fs *ofs, struct dentry *origin);
- int ovl_set_origin_fh(struct ovl_fs *ofs, const struct ovl_fh *fh,
diff --git a/temp-6.6/revert-ovl-support-encoding-fid-from-inode-with-no-alias.patch b/temp-6.6/revert-ovl-support-encoding-fid-from-inode-with-no-alias.patch
deleted file mode 100644 (file)
index 77be4f4..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-From 586a642bcd12b8dd5a00d4aa896e2d2d2f8198fc Mon Sep 17 00:00:00 2001
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Date: Tue, 21 Jan 2025 09:13:23 +0100
-Subject: Revert "ovl: support encoding fid from inode with no alias"
-
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-This reverts commit a1a541fbfa7e97c1100144db34b57553d7164ce5 which is
-commit c45beebfde34aa71afbc48b2c54cdda623515037 upstream.
-
-It is reported to part of a series that causes problems in the 6.6.y
-tree, so revert it at this point in time and it can come back later if
-still needed.
-
-Reported-by: Ignat Korchagin <ignat@cloudflare.com>
-Link: https://lore.kernel.org/r/ACD4D6CC-C4D5-4657-A805-03C34559046E@cloudflare.com
-Cc: Dmitry Safonov <dima@arista.com>
-Cc: Amir Goldstein <amir73il@gmail.com>
-Cc: Christian Brauner <brauner@kernel.org>
-Cc: Sasha Levin <sashal@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- fs/overlayfs/export.c |   46 +++++++++++++++++++++-------------------------
- 1 file changed, 21 insertions(+), 25 deletions(-)
-
---- a/fs/overlayfs/export.c
-+++ b/fs/overlayfs/export.c
-@@ -181,37 +181,35 @@ static int ovl_connect_layer(struct dent
-  *
-  * Return 0 for upper file handle, > 0 for lower file handle or < 0 on error.
-  */
--static int ovl_check_encode_origin(struct inode *inode)
-+static int ovl_check_encode_origin(struct dentry *dentry)
- {
--      struct ovl_fs *ofs = OVL_FS(inode->i_sb);
-+      struct ovl_fs *ofs = OVL_FS(dentry->d_sb);
-       bool decodable = ofs->config.nfs_export;
--      struct dentry *dentry;
--      int err;
-       /* No upper layer? */
-       if (!ovl_upper_mnt(ofs))
-               return 1;
-       /* Lower file handle for non-upper non-decodable */
--      if (!ovl_inode_upper(inode) && !decodable)
-+      if (!ovl_dentry_upper(dentry) && !decodable)
-               return 1;
-       /* Upper file handle for pure upper */
--      if (!ovl_inode_lower(inode))
-+      if (!ovl_dentry_lower(dentry))
-               return 0;
-       /*
-        * Root is never indexed, so if there's an upper layer, encode upper for
-        * root.
-        */
--      if (inode == d_inode(inode->i_sb->s_root))
-+      if (dentry == dentry->d_sb->s_root)
-               return 0;
-       /*
-        * Upper decodable file handle for non-indexed upper.
-        */
--      if (ovl_inode_upper(inode) && decodable &&
--          !ovl_test_flag(OVL_INDEX, inode))
-+      if (ovl_dentry_upper(dentry) && decodable &&
-+          !ovl_test_flag(OVL_INDEX, d_inode(dentry)))
-               return 0;
-       /*
-@@ -220,25 +218,17 @@ static int ovl_check_encode_origin(struc
-        * ovl_connect_layer() will try to make origin's layer "connected" by
-        * copying up a "connectable" ancestor.
-        */
--      if (!decodable || !S_ISDIR(inode->i_mode))
--              return 1;
--
--      dentry = d_find_any_alias(inode);
--      if (!dentry)
--              return -ENOENT;
--
--      err = ovl_connect_layer(dentry);
--      dput(dentry);
--      if (err < 0)
--              return err;
-+      if (d_is_dir(dentry) && decodable)
-+              return ovl_connect_layer(dentry);
-       /* Lower file handle for indexed and non-upper dir/non-dir */
-       return 1;
- }
--static int ovl_dentry_to_fid(struct ovl_fs *ofs, struct inode *inode,
-+static int ovl_dentry_to_fid(struct ovl_fs *ofs, struct dentry *dentry,
-                            u32 *fid, int buflen)
- {
-+      struct inode *inode = d_inode(dentry);
-       struct ovl_fh *fh = NULL;
-       int err, enc_lower;
-       int len;
-@@ -247,7 +237,7 @@ static int ovl_dentry_to_fid(struct ovl_
-        * Check if we should encode a lower or upper file handle and maybe
-        * copy up an ancestor to make lower file handle connectable.
-        */
--      err = enc_lower = ovl_check_encode_origin(inode);
-+      err = enc_lower = ovl_check_encode_origin(dentry);
-       if (enc_lower < 0)
-               goto fail;
-@@ -267,8 +257,8 @@ out:
-       return err;
- fail:
--      pr_warn_ratelimited("failed to encode file handle (ino=%lu, err=%i)\n",
--                          inode->i_ino, err);
-+      pr_warn_ratelimited("failed to encode file handle (%pd2, err=%i)\n",
-+                          dentry, err);
-       goto out;
- }
-@@ -276,13 +266,19 @@ static int ovl_encode_fh(struct inode *i
-                        struct inode *parent)
- {
-       struct ovl_fs *ofs = OVL_FS(inode->i_sb);
-+      struct dentry *dentry;
-       int bytes, buflen = *max_len << 2;
-       /* TODO: encode connectable file handles */
-       if (parent)
-               return FILEID_INVALID;
--      bytes = ovl_dentry_to_fid(ofs, inode, fid, buflen);
-+      dentry = d_find_any_alias(inode);
-+      if (!dentry)
-+              return FILEID_INVALID;
-+
-+      bytes = ovl_dentry_to_fid(ofs, dentry, fid, buflen);
-+      dput(dentry);
-       if (bytes <= 0)
-               return FILEID_INVALID;