]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
xfs: scrub: use kstrdup_const() for metapath scan setups
authorDmitry Antipov <dmantipov@yandex.ru>
Thu, 18 Sep 2025 11:14:03 +0000 (14:14 +0300)
committerCarlos Maiolino <cem@kernel.org>
Mon, 22 Sep 2025 10:57:34 +0000 (12:57 +0200)
Except 'xchk_setup_metapath_rtginode()' case, 'path' argument of
'xchk_setup_metapath_scan()' is a compile-time constant. So it may
be reasonable to use 'kstrdup_const()' / 'kree_const()' to manage
'path' field of 'struct xchk_metapath' in attempt to reuse .rodata
instance rather than making a copy. Compile tested only.

Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
fs/xfs/scrub/metapath.c

index 14939d7de34966c84e7ce54ad90a705d5453026f..378ec7c8d38eeb1450f880de3969d1e3612afd9e 100644 (file)
@@ -79,7 +79,7 @@ xchk_metapath_cleanup(
 
        if (mpath->dp_ilock_flags)
                xfs_iunlock(mpath->dp, mpath->dp_ilock_flags);
-       kfree(mpath->path);
+       kfree_const(mpath->path);
 }
 
 /* Set up a metadir path scan.  @path must be dynamically allocated. */
@@ -98,13 +98,13 @@ xchk_setup_metapath_scan(
 
        error = xchk_install_live_inode(sc, ip);
        if (error) {
-               kfree(path);
+               kfree_const(path);
                return error;
        }
 
        mpath = kzalloc(sizeof(struct xchk_metapath), XCHK_GFP_FLAGS);
        if (!mpath) {
-               kfree(path);
+               kfree_const(path);
                return -ENOMEM;
        }
 
@@ -132,7 +132,7 @@ xchk_setup_metapath_rtdir(
                return -ENOENT;
 
        return xchk_setup_metapath_scan(sc, sc->mp->m_metadirip,
-                       kasprintf(GFP_KERNEL, "rtgroups"), sc->mp->m_rtdirip);
+                       kstrdup_const("rtgroups", GFP_KERNEL), sc->mp->m_rtdirip);
 }
 
 /* Scan a rtgroup inode under the /rtgroups directory. */
@@ -179,7 +179,7 @@ xchk_setup_metapath_quotadir(
                return -ENOENT;
 
        return xchk_setup_metapath_scan(sc, sc->mp->m_metadirip,
-                       kstrdup("quota", GFP_KERNEL), qi->qi_dirip);
+                       kstrdup_const("quota", GFP_KERNEL), qi->qi_dirip);
 }
 
 /* Scan a quota inode under the /quota directory. */
@@ -212,7 +212,7 @@ xchk_setup_metapath_dqinode(
                return -ENOENT;
 
        return xchk_setup_metapath_scan(sc, qi->qi_dirip,
-                       kstrdup(xfs_dqinode_path(type), GFP_KERNEL), ip);
+                       kstrdup_const(xfs_dqinode_path(type), GFP_KERNEL), ip);
 }
 #else
 # define xchk_setup_metapath_quotadir(...)     (-ENOENT)