Looks good, I personally prefer not changing ovl_stack_put -> __ovl_stack_put and not adding unified ovl_stacks_put to be closer to existing code, but that is not a big thing.

Reviewed-by: Pavel Tikhomirov <ptikhomi...@virtuozzo.com>

On 7/20/24 06:07, Konstantin Khorenko wrote:
RedHat in RHEL9.4 has backported overlayfs data-only lower layers
feature (ms commit 37ebf056d6cf ("ovl: introduce data-only lower
layers")), so we have to adjust our dynamic path resolving feature.

Additionally store number of lowerpaths as it now differs from saved
number of lowerstacks due to data-only lower layers presence.

Fixes: 5f2c7b5e4d33 ("overlayfs: add dynamic path resolving in mount
options")
https://virtuozzo.atlassian.net/browse/PSBM-157244

Signed-off-by: Konstantin Khorenko <khore...@virtuozzo.com>


diff --git a/fs/overlayfs/util.c b/fs/overlayfs/util.c
index 3676eaa83f7d..21acc780ebfc 100644
--- a/fs/overlayfs/util.c
+++ b/fs/overlayfs/util.c
@@ -100,7 +100,7 @@ void ovl_stack_cpy(struct ovl_path *dst, struct ovl_path 
*src, unsigned int n)
                dget(src[i].dentry);
  }
-void ovl_stack_put(struct ovl_path *stack, unsigned int n)
+void __ovl_stack_put(struct ovl_path *stack, unsigned int n)

Do we really need this change?

  {
        unsigned int i;
@@ -110,10 +110,24 @@ void ovl_stack_put(struct ovl_path *stack, unsigned int n) void ovl_stack_free(struct ovl_path *stack, unsigned int n)
  {
-       ovl_stack_put(stack, n);
+       __ovl_stack_put(stack, n);
        kfree(stack);
  }
+void __ovl_lowerpaths_put(struct path *lowerpaths, unsigned int n)
+{
+       unsigned int i;
+
+       for (i = 0; i < n; i++)
+               path_put(&lowerpaths[i]);
+}
+
+void ovl_stacks_put(struct ovl_entry *oe)
+{
+       __ovl_stack_put(ovl_lowerstack(oe), ovl_numlower(oe));
+       __ovl_lowerpaths_put(ovl_lowerpaths(oe), ovl_numlowerpaths(oe));
+}

Do we really need to put those together in separate function? Maybe just add:

ovl_lowerpaths_put(ovl_lowerpaths(oe), ovl_numlowerpaths(oe));
kfree(ovl_lowerpaths(oe));

where needed, without changing preexisting functions?

+
  struct ovl_entry *ovl_alloc_entry(unsigned int numlower)
  {
        size_t size = offsetof(struct ovl_entry, __lowerstack[numlower]);
@@ -127,7 +141,8 @@ struct ovl_entry *ovl_alloc_entry(unsigned int numlower)
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to