]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: convert kmem_alloc() to kmalloc()
authorDave Chinner <dchinner@redhat.com>
Mon, 22 Apr 2024 17:00:50 +0000 (10:00 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Mon, 3 Jun 2024 18:37:35 +0000 (11:37 -0700)
Source kernel commit: f078d4ea827607867d42fb3b2ef907caf86ce49d

kmem_alloc() is just a thin wrapper around kmalloc() these days.
Convert everything to use kmalloc() so we can get rid of the
wrapper.

Note: the transaction region allocation in xlog_add_to_transaction()
can be a high order allocation. Converting it to use
kmalloc(__GFP_NOFAIL) results in warnings in the page allocation
code being triggered because the mm subsystem does not want us to
use __GFP_NOFAIL with high order allocations like we've been doing
with the kmem_alloc() wrapper for a couple of decades. Hence this
specific case gets converted to xlog_kvmalloc() rather than
kmalloc() to avoid this issue.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
libxfs/xfs_attr_leaf.c
libxfs/xfs_btree_staging.c
libxfs/xfs_da_btree.c
libxfs/xfs_dir2.c
libxfs/xfs_dir2_block.c
libxfs/xfs_dir2_sf.c
libxfs/xfs_inode_fork.c

index 8a0a7c21932c741c65e1f399fd33f83499aa44cb..0d7dc789ce481a5d43ea49ebd89cdf24e0971ed7 100644 (file)
@@ -876,8 +876,7 @@ xfs_attr_shortform_to_leaf(
 
        trace_xfs_attr_sf_to_leaf(args);
 
-       tmpbuffer = kmem_alloc(size, 0);
-       ASSERT(tmpbuffer != NULL);
+       tmpbuffer = kmalloc(size, GFP_KERNEL | __GFP_NOFAIL);
        memcpy(tmpbuffer, ifp->if_data, size);
        sf = (struct xfs_attr_sf_hdr *)tmpbuffer;
 
@@ -1056,7 +1055,7 @@ xfs_attr3_leaf_to_shortform(
 
        trace_xfs_attr_leaf_to_sf(args);
 
-       tmpbuffer = kmem_alloc(args->geo->blksize, 0);
+       tmpbuffer = kmalloc(args->geo->blksize, GFP_KERNEL | __GFP_NOFAIL);
        if (!tmpbuffer)
                return -ENOMEM;
 
@@ -1530,7 +1529,7 @@ xfs_attr3_leaf_compact(
 
        trace_xfs_attr_leaf_compact(args);
 
-       tmpbuffer = kmem_alloc(args->geo->blksize, 0);
+       tmpbuffer = kmalloc(args->geo->blksize, GFP_KERNEL | __GFP_NOFAIL);
        memcpy(tmpbuffer, bp->b_addr, args->geo->blksize);
        memset(bp->b_addr, 0, args->geo->blksize);
        leaf_src = (xfs_attr_leafblock_t *)tmpbuffer;
index 45b793559b069087009acc572e1e48473a5323be..da6e9fa8e8aa2bf0d496aaf9128f364b2a88a4f2 100644 (file)
@@ -139,7 +139,7 @@ xfs_btree_stage_afakeroot(
        ASSERT(!(cur->bc_flags & XFS_BTREE_ROOT_IN_INODE));
        ASSERT(cur->bc_tp == NULL);
 
-       nops = kmem_alloc(sizeof(struct xfs_btree_ops), KM_NOFS);
+       nops = kmalloc(sizeof(struct xfs_btree_ops), GFP_NOFS | __GFP_NOFAIL);
        memcpy(nops, cur->bc_ops, sizeof(struct xfs_btree_ops));
        nops->alloc_block = xfs_btree_fakeroot_alloc_block;
        nops->free_block = xfs_btree_fakeroot_free_block;
@@ -220,7 +220,7 @@ xfs_btree_stage_ifakeroot(
        ASSERT(cur->bc_flags & XFS_BTREE_ROOT_IN_INODE);
        ASSERT(cur->bc_tp == NULL);
 
-       nops = kmem_alloc(sizeof(struct xfs_btree_ops), KM_NOFS);
+       nops = kmalloc(sizeof(struct xfs_btree_ops), GFP_NOFS | __GFP_NOFAIL);
        memcpy(nops, cur->bc_ops, sizeof(struct xfs_btree_ops));
        nops->alloc_block = xfs_btree_fakeroot_alloc_block;
        nops->free_block = xfs_btree_fakeroot_free_block;
index 0864cb5ed74eb3370c7813a38796f66ded311726..33ac8d13c0c5127932c2d18ea02e07d232a4b8da 100644 (file)
@@ -2178,7 +2178,8 @@ xfs_da_grow_inode_int(
                 * If we didn't get it and the block might work if fragmented,
                 * try without the CONTIG flag.  Loop until we get it all.
                 */
-               mapp = kmem_alloc(sizeof(*mapp) * count, 0);
+               mapp = kmalloc(sizeof(*mapp) * count,
+                               GFP_KERNEL | __GFP_NOFAIL);
                for (b = *bno, mapi = 0; b < *bno + count; ) {
                        c = (int)(*bno + count - b);
                        nmap = min(XFS_BMAP_MAX_NMAP, c);
index cb299a6ed500b417b2c6f130dd45762d9fbd40f7..52f0461ef07f73231803f21fa3f4cc7198064c16 100644 (file)
@@ -332,7 +332,7 @@ xfs_dir_cilookup_result(
                                        !(args->op_flags & XFS_DA_OP_CILOOKUP))
                return -EEXIST;
 
-       args->value = kmem_alloc(len, KM_NOFS | KM_MAYFAIL);
+       args->value = kmalloc(len, GFP_NOFS | __GFP_RETRY_MAYFAIL);
        if (!args->value)
                return -ENOMEM;
 
index bf950c7001f8ab39450cfc2fa6ac2e75acbab107..b694e62198b5ee8e7fdeb88553f505e73c48aa35 100644 (file)
@@ -1105,7 +1105,7 @@ xfs_dir2_sf_to_block(
         * Copy the directory into a temporary buffer.
         * Then pitch the incore inode data so we can make extents.
         */
-       sfp = kmem_alloc(ifp->if_bytes, 0);
+       sfp = kmalloc(ifp->if_bytes, GFP_KERNEL | __GFP_NOFAIL);
        memcpy(sfp, oldsfp, ifp->if_bytes);
 
        xfs_idata_realloc(dp, -ifp->if_bytes, XFS_DATA_FORK);
index 37c7e1d5cc8a3736d6a8da3efe80aa0c28b2201d..9e0c15f9993e478d1396aea2109c38c6280cbb88 100644 (file)
@@ -276,7 +276,7 @@ xfs_dir2_block_to_sf(
         * format the data into.  Once we have formatted the data, we can free
         * the block and copy the formatted data into the inode literal area.
         */
-       sfp = kmem_alloc(mp->m_sb.sb_inodesize, 0);
+       sfp = kmalloc(mp->m_sb.sb_inodesize, GFP_KERNEL | __GFP_NOFAIL);
        memcpy(sfp, sfhp, xfs_dir2_sf_hdr_size(sfhp->i8count));
 
        /*
@@ -524,7 +524,7 @@ xfs_dir2_sf_addname_hard(
         * Copy the old directory to the stack buffer.
         */
        old_isize = (int)dp->i_disk_size;
-       buf = kmem_alloc(old_isize, 0);
+       buf = kmalloc(old_isize, GFP_KERNEL | __GFP_NOFAIL);
        oldsfp = (xfs_dir2_sf_hdr_t *)buf;
        memcpy(oldsfp, dp->i_df.if_data, old_isize);
        /*
@@ -1151,7 +1151,7 @@ xfs_dir2_sf_toino4(
         * Don't want xfs_idata_realloc copying the data here.
         */
        oldsize = dp->i_df.if_bytes;
-       buf = kmem_alloc(oldsize, 0);
+       buf = kmalloc(oldsize, GFP_KERNEL | __GFP_NOFAIL);
        ASSERT(oldsfp->i8count == 1);
        memcpy(buf, oldsfp, oldsize);
        /*
@@ -1223,7 +1223,7 @@ xfs_dir2_sf_toino8(
         * Don't want xfs_idata_realloc copying the data here.
         */
        oldsize = dp->i_df.if_bytes;
-       buf = kmem_alloc(oldsize, 0);
+       buf = kmalloc(oldsize, GFP_KERNEL | __GFP_NOFAIL);
        ASSERT(oldsfp->i8count == 0);
        memcpy(buf, oldsfp, oldsize);
        /*
index 208b283ba3384a9b378a97e16f3344d1cf3ee9cf..7de346e87c108c2c73f06cd02f4c5a586cb8e193 100644 (file)
@@ -48,7 +48,7 @@ xfs_init_local_fork(
                mem_size++;
 
        if (size) {
-               char *new_data = kmem_alloc(mem_size, KM_NOFS);
+               char *new_data = kmalloc(mem_size, GFP_NOFS | __GFP_NOFAIL);
 
                memcpy(new_data, data, size);
                if (zero_terminate)
@@ -75,7 +75,7 @@ xfs_iformat_local(
        /*
         * If the size is unreasonable, then something
         * is wrong and we just bail out rather than crash in
-        * kmem_alloc() or memcpy() below.
+        * kmalloc() or memcpy() below.
         */
        if (unlikely(size > XFS_DFORK_SIZE(dip, ip->i_mount, whichfork))) {
                xfs_warn(ip->i_mount,
@@ -114,7 +114,7 @@ xfs_iformat_extents(
 
        /*
         * If the number of extents is unreasonable, then something is wrong and
-        * we just bail out rather than crash in kmem_alloc() or memcpy() below.
+        * we just bail out rather than crash in kmalloc() or memcpy() below.
         */
        if (unlikely(size < 0 || size > XFS_DFORK_SIZE(dip, mp, whichfork))) {
                xfs_warn(ip->i_mount, "corrupt inode %llu ((a)extents = %llu).",
@@ -203,7 +203,7 @@ xfs_iformat_btree(
        }
 
        ifp->if_broot_bytes = size;
-       ifp->if_broot = kmem_alloc(size, KM_NOFS);
+       ifp->if_broot = kmalloc(size, GFP_NOFS | __GFP_NOFAIL);
        ASSERT(ifp->if_broot != NULL);
        /*
         * Copy and convert from the on-disk structure
@@ -397,7 +397,8 @@ xfs_iroot_realloc(
                 */
                if (ifp->if_broot_bytes == 0) {
                        new_size = XFS_BMAP_BROOT_SPACE_CALC(mp, rec_diff);
-                       ifp->if_broot = kmem_alloc(new_size, KM_NOFS);
+                       ifp->if_broot = kmalloc(new_size,
+                                               GFP_NOFS | __GFP_NOFAIL);
                        ifp->if_broot_bytes = (int)new_size;
                        return;
                }
@@ -438,7 +439,7 @@ xfs_iroot_realloc(
        else
                new_size = 0;
        if (new_size > 0) {
-               new_broot = kmem_alloc(new_size, KM_NOFS);
+               new_broot = kmalloc(new_size, GFP_NOFS | __GFP_NOFAIL);
                /*
                 * First copy over the btree block header.
                 */
@@ -486,7 +487,7 @@ xfs_iroot_realloc(
  *
  * If the amount of space needed has decreased below the size of the
  * inline buffer, then switch to using the inline buffer.  Otherwise,
- * use kmem_realloc() or kmem_alloc() to adjust the size of the buffer
+ * use krealloc() or kmalloc() to adjust the size of the buffer
  * to what is needed.
  *
  * ip -- the inode whose if_data area is changing