Re: [PATCH 4/4] xfs: Remove kmem_free()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Nov 14, 2019 at 09:09:55PM +0100, Carlos Maiolino wrote:
> This can be replaced by direct calls to kfree() or kvfree() (whenever
> allocation is done via kmem_alloc_io() or kmem_alloc_large().
> 
> This patch has been partially scripted. I used the following sed to
> replace all kmem_free() calls by kfree()
> 
>  # find fs/xfs/ -type f -name '*.c' -o -name '*.h' | xargs sed -i \
>    's/kmem_free/kfree/g'

Coccinelle? ;)

> And manually inspected kmem_alloc_io() and kmem_alloc_large() uses to
> use kvfree() instead.

Why not just use kvfree everywhere?  Is there a significant performance
penalty for the is_vmalloc_addr() check in kvfree vs. having to keep
track of kfree vs. kvfree?

--D

> Signed-off-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx>
> ---
>  fs/xfs/kmem.h                  |  5 ----
>  fs/xfs/libxfs/xfs_attr.c       |  2 +-
>  fs/xfs/libxfs/xfs_attr_leaf.c  |  8 +++---
>  fs/xfs/libxfs/xfs_da_btree.c   | 10 +++----
>  fs/xfs/libxfs/xfs_defer.c      |  4 +--
>  fs/xfs/libxfs/xfs_dir2.c       | 18 ++++++------
>  fs/xfs/libxfs/xfs_dir2_block.c |  4 +--
>  fs/xfs/libxfs/xfs_dir2_sf.c    |  8 +++---
>  fs/xfs/libxfs/xfs_iext_tree.c  |  8 +++---
>  fs/xfs/libxfs/xfs_inode_fork.c |  8 +++---
>  fs/xfs/libxfs/xfs_refcount.c   |  4 +--
>  fs/xfs/scrub/agheader.c        |  2 +-
>  fs/xfs/scrub/agheader_repair.c |  2 +-
>  fs/xfs/scrub/attr.c            |  2 +-
>  fs/xfs/scrub/bitmap.c          |  4 +--
>  fs/xfs/scrub/btree.c           |  2 +-
>  fs/xfs/scrub/refcount.c        |  8 +++---
>  fs/xfs/scrub/scrub.c           |  2 +-
>  fs/xfs/xfs_acl.c               |  4 +--
>  fs/xfs/xfs_attr_inactive.c     |  2 +-
>  fs/xfs/xfs_attr_list.c         |  4 +--
>  fs/xfs/xfs_bmap_item.c         |  4 +--
>  fs/xfs/xfs_buf.c               | 12 ++++----
>  fs/xfs/xfs_buf_item.c          |  4 +--
>  fs/xfs/xfs_dquot.c             |  2 +-
>  fs/xfs/xfs_dquot_item.c        |  8 +++---
>  fs/xfs/xfs_error.c             |  2 +-
>  fs/xfs/xfs_extent_busy.c       |  2 +-
>  fs/xfs/xfs_extfree_item.c      | 14 +++++-----
>  fs/xfs/xfs_filestream.c        |  4 +--
>  fs/xfs/xfs_inode.c             | 12 ++++----
>  fs/xfs/xfs_inode_item.c        |  2 +-
>  fs/xfs/xfs_ioctl.c             |  6 ++--
>  fs/xfs/xfs_ioctl32.c           |  2 +-
>  fs/xfs/xfs_iops.c              |  2 +-
>  fs/xfs/xfs_itable.c            |  4 +--
>  fs/xfs/xfs_iwalk.c             |  4 +--
>  fs/xfs/xfs_log.c               | 12 ++++----
>  fs/xfs/xfs_log_cil.c           | 16 +++++------
>  fs/xfs/xfs_log_recover.c       | 50 +++++++++++++++++-----------------
>  fs/xfs/xfs_mount.c             |  8 +++---
>  fs/xfs/xfs_mru_cache.c         |  8 +++---
>  fs/xfs/xfs_qm.c                |  6 ++--
>  fs/xfs/xfs_refcount_item.c     |  6 ++--
>  fs/xfs/xfs_rmap_item.c         |  6 ++--
>  fs/xfs/xfs_rtalloc.c           |  8 +++---
>  fs/xfs/xfs_super.c             |  2 +-
>  fs/xfs/xfs_trans_ail.c         |  4 +--
>  48 files changed, 158 insertions(+), 163 deletions(-)
> 
> diff --git a/fs/xfs/kmem.h b/fs/xfs/kmem.h
> index 6143117770e9..ccdc72519339 100644
> --- a/fs/xfs/kmem.h
> +++ b/fs/xfs/kmem.h
> @@ -56,11 +56,6 @@ extern void *kmem_alloc(size_t, xfs_km_flags_t);
>  extern void *kmem_alloc_io(size_t size, int align_mask, xfs_km_flags_t flags);
>  extern void *kmem_alloc_large(size_t size, xfs_km_flags_t);
>  extern void *kmem_realloc(const void *, size_t, xfs_km_flags_t);
> -static inline void  kmem_free(const void *ptr)
> -{
> -	kvfree(ptr);
> -}
> -
>  
>  static inline void *
>  kmem_zalloc(size_t size, xfs_km_flags_t flags)
> diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c
> index 510ca6974604..bc8ca09e71d0 100644
> --- a/fs/xfs/libxfs/xfs_attr.c
> +++ b/fs/xfs/libxfs/xfs_attr.c
> @@ -174,7 +174,7 @@ xfs_attr_get(
>  	/* on error, we have to clean up allocated value buffers */
>  	if (error) {
>  		if (flags & ATTR_ALLOC) {
> -			kmem_free(args.value);
> +			kvfree(args.value);
>  			*value = NULL;
>  		}
>  		return error;
> diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c
> index 85ec5945d29f..795b9b21b64d 100644
> --- a/fs/xfs/libxfs/xfs_attr_leaf.c
> +++ b/fs/xfs/libxfs/xfs_attr_leaf.c
> @@ -931,7 +931,7 @@ xfs_attr_shortform_to_leaf(
>  	error = 0;
>  	*leaf_bp = bp;
>  out:
> -	kmem_free(tmpbuffer);
> +	kfree(tmpbuffer);
>  	return error;
>  }
>  
> @@ -1131,7 +1131,7 @@ xfs_attr3_leaf_to_shortform(
>  	error = 0;
>  
>  out:
> -	kmem_free(tmpbuffer);
> +	kfree(tmpbuffer);
>  	return error;
>  }
>  
> @@ -1572,7 +1572,7 @@ xfs_attr3_leaf_compact(
>  	 */
>  	xfs_trans_log_buf(trans, bp, 0, args->geo->blksize - 1);
>  
> -	kmem_free(tmpbuffer);
> +	kfree(tmpbuffer);
>  }
>  
>  /*
> @@ -2293,7 +2293,7 @@ xfs_attr3_leaf_unbalance(
>  		}
>  		memcpy(save_leaf, tmp_leaf, state->args->geo->blksize);
>  		savehdr = tmphdr; /* struct copy */
> -		kmem_free(tmp_leaf);
> +		kfree(tmp_leaf);
>  	}
>  
>  	xfs_attr3_leaf_hdr_to_disk(state->args->geo, save_leaf, &savehdr);
> diff --git a/fs/xfs/libxfs/xfs_da_btree.c b/fs/xfs/libxfs/xfs_da_btree.c
> index c5c0b73febae..7ae82d91f776 100644
> --- a/fs/xfs/libxfs/xfs_da_btree.c
> +++ b/fs/xfs/libxfs/xfs_da_btree.c
> @@ -2189,7 +2189,7 @@ xfs_da_grow_inode_int(
>  
>  out_free_map:
>  	if (mapp != &map)
> -		kmem_free(mapp);
> +		kfree(mapp);
>  	return error;
>  }
>  
> @@ -2639,7 +2639,7 @@ xfs_dabuf_map(
>  	error = xfs_buf_map_from_irec(mp, map, nmaps, irecs, nirecs);
>  out:
>  	if (irecs != &irec)
> -		kmem_free(irecs);
> +		kfree(irecs);
>  	return error;
>  }
>  
> @@ -2686,7 +2686,7 @@ xfs_da_get_buf(
>  
>  out_free:
>  	if (mapp != &map)
> -		kmem_free(mapp);
> +		kfree(mapp);
>  
>  	return error;
>  }
> @@ -2735,7 +2735,7 @@ xfs_da_read_buf(
>  	*bpp = bp;
>  out_free:
>  	if (mapp != &map)
> -		kmem_free(mapp);
> +		kfree(mapp);
>  
>  	return error;
>  }
> @@ -2772,7 +2772,7 @@ xfs_da_reada_buf(
>  
>  out_free:
>  	if (mapp != &map)
> -		kmem_free(mapp);
> +		kfree(mapp);
>  
>  	return error;
>  }
> diff --git a/fs/xfs/libxfs/xfs_defer.c b/fs/xfs/libxfs/xfs_defer.c
> index 22557527cfdb..27c3d150068a 100644
> --- a/fs/xfs/libxfs/xfs_defer.c
> +++ b/fs/xfs/libxfs/xfs_defer.c
> @@ -341,7 +341,7 @@ xfs_defer_cancel_list(
>  			ops->cancel_item(pwi);
>  		}
>  		ASSERT(dfp->dfp_count == 0);
> -		kmem_free(dfp);
> +		kfree(dfp);
>  	}
>  }
>  
> @@ -433,7 +433,7 @@ xfs_defer_finish_noroll(
>  		} else {
>  			/* Done with the dfp, free it. */
>  			list_del(&dfp->dfp_list);
> -			kmem_free(dfp);
> +			kfree(dfp);
>  		}
>  
>  		if (ops->finish_cleanup)
> diff --git a/fs/xfs/libxfs/xfs_dir2.c b/fs/xfs/libxfs/xfs_dir2.c
> index 624c05e77ab4..efd7cec65259 100644
> --- a/fs/xfs/libxfs/xfs_dir2.c
> +++ b/fs/xfs/libxfs/xfs_dir2.c
> @@ -109,8 +109,8 @@ xfs_da_mount(
>  	mp->m_attr_geo = kmem_zalloc(sizeof(struct xfs_da_geometry),
>  				     KM_MAYFAIL);
>  	if (!mp->m_dir_geo || !mp->m_attr_geo) {
> -		kmem_free(mp->m_dir_geo);
> -		kmem_free(mp->m_attr_geo);
> +		kfree(mp->m_dir_geo);
> +		kfree(mp->m_attr_geo);
>  		return -ENOMEM;
>  	}
>  
> @@ -176,8 +176,8 @@ void
>  xfs_da_unmount(
>  	struct xfs_mount	*mp)
>  {
> -	kmem_free(mp->m_dir_geo);
> -	kmem_free(mp->m_attr_geo);
> +	kfree(mp->m_dir_geo);
> +	kfree(mp->m_attr_geo);
>  }
>  
>  /*
> @@ -242,7 +242,7 @@ xfs_dir_init(
>  	args->dp = dp;
>  	args->trans = tp;
>  	error = xfs_dir2_sf_create(args, pdp->i_ino);
> -	kmem_free(args);
> +	kfree(args);
>  	return error;
>  }
>  
> @@ -311,7 +311,7 @@ xfs_dir_createname(
>  		rval = xfs_dir2_node_addname(args);
>  
>  out_free:
> -	kmem_free(args);
> +	kfree(args);
>  	return rval;
>  }
>  
> @@ -417,7 +417,7 @@ xfs_dir_lookup(
>  	}
>  out_free:
>  	xfs_iunlock(dp, lock_mode);
> -	kmem_free(args);
> +	kfree(args);
>  	return rval;
>  }
>  
> @@ -475,7 +475,7 @@ xfs_dir_removename(
>  	else
>  		rval = xfs_dir2_node_removename(args);
>  out_free:
> -	kmem_free(args);
> +	kfree(args);
>  	return rval;
>  }
>  
> @@ -536,7 +536,7 @@ xfs_dir_replace(
>  	else
>  		rval = xfs_dir2_node_replace(args);
>  out_free:
> -	kmem_free(args);
> +	kfree(args);
>  	return rval;
>  }
>  
> diff --git a/fs/xfs/libxfs/xfs_dir2_block.c b/fs/xfs/libxfs/xfs_dir2_block.c
> index 358151ddfa75..766f282b706a 100644
> --- a/fs/xfs/libxfs/xfs_dir2_block.c
> +++ b/fs/xfs/libxfs/xfs_dir2_block.c
> @@ -1229,7 +1229,7 @@ xfs_dir2_sf_to_block(
>  			sfep = xfs_dir2_sf_nextentry(mp, sfp, sfep);
>  	}
>  	/* Done with the temporary buffer */
> -	kmem_free(sfp);
> +	kfree(sfp);
>  	/*
>  	 * Sort the leaf entries by hash value.
>  	 */
> @@ -1244,6 +1244,6 @@ xfs_dir2_sf_to_block(
>  	xfs_dir3_data_check(dp, bp);
>  	return 0;
>  out_free:
> -	kmem_free(sfp);
> +	kfree(sfp);
>  	return error;
>  }
> diff --git a/fs/xfs/libxfs/xfs_dir2_sf.c b/fs/xfs/libxfs/xfs_dir2_sf.c
> index db1a82972d9e..f4de4e7b10ef 100644
> --- a/fs/xfs/libxfs/xfs_dir2_sf.c
> +++ b/fs/xfs/libxfs/xfs_dir2_sf.c
> @@ -350,7 +350,7 @@ xfs_dir2_block_to_sf(
>  	xfs_dir2_sf_check(args);
>  out:
>  	xfs_trans_log_inode(args->trans, dp, logflags);
> -	kmem_free(sfp);
> +	kfree(sfp);
>  	return error;
>  }
>  
> @@ -585,7 +585,7 @@ xfs_dir2_sf_addname_hard(
>  		sfep = xfs_dir2_sf_nextentry(mp, sfp, sfep);
>  		memcpy(sfep, oldsfep, old_isize - nbytes);
>  	}
> -	kmem_free(buf);
> +	kfree(buf);
>  	dp->i_d.di_size = new_isize;
>  	xfs_dir2_sf_check(args);
>  }
> @@ -1202,7 +1202,7 @@ xfs_dir2_sf_toino4(
>  	/*
>  	 * Clean up the inode.
>  	 */
> -	kmem_free(buf);
> +	kfree(buf);
>  	dp->i_d.di_size = newsize;
>  	xfs_trans_log_inode(args->trans, dp, XFS_ILOG_CORE | XFS_ILOG_DDATA);
>  }
> @@ -1275,7 +1275,7 @@ xfs_dir2_sf_toino8(
>  	/*
>  	 * Clean up the inode.
>  	 */
> -	kmem_free(buf);
> +	kfree(buf);
>  	dp->i_d.di_size = newsize;
>  	xfs_trans_log_inode(args->trans, dp, XFS_ILOG_CORE | XFS_ILOG_DDATA);
>  }
> diff --git a/fs/xfs/libxfs/xfs_iext_tree.c b/fs/xfs/libxfs/xfs_iext_tree.c
> index 52451809c478..a7ba30cd81da 100644
> --- a/fs/xfs/libxfs/xfs_iext_tree.c
> +++ b/fs/xfs/libxfs/xfs_iext_tree.c
> @@ -734,7 +734,7 @@ xfs_iext_remove_node(
>  again:
>  	ASSERT(node->ptrs[pos]);
>  	ASSERT(node->ptrs[pos] == victim);
> -	kmem_free(victim);
> +	kfree(victim);
>  
>  	nr_entries = xfs_iext_node_nr_entries(node, pos) - 1;
>  	offset = node->keys[0];
> @@ -780,7 +780,7 @@ xfs_iext_remove_node(
>  		ASSERT(node == ifp->if_u1.if_root);
>  		ifp->if_u1.if_root = node->ptrs[0];
>  		ifp->if_height--;
> -		kmem_free(node);
> +		kfree(node);
>  	}
>  }
>  
> @@ -854,7 +854,7 @@ xfs_iext_free_last_leaf(
>  	struct xfs_ifork	*ifp)
>  {
>  	ifp->if_height--;
> -	kmem_free(ifp->if_u1.if_root);
> +	kfree(ifp->if_u1.if_root);
>  	ifp->if_u1.if_root = NULL;
>  }
>  
> @@ -1035,7 +1035,7 @@ xfs_iext_destroy_node(
>  		}
>  	}
>  
> -	kmem_free(node);
> +	kfree(node);
>  }
>  
>  void
> diff --git a/fs/xfs/libxfs/xfs_inode_fork.c b/fs/xfs/libxfs/xfs_inode_fork.c
> index ad2b9c313fd2..296677958212 100644
> --- a/fs/xfs/libxfs/xfs_inode_fork.c
> +++ b/fs/xfs/libxfs/xfs_inode_fork.c
> @@ -445,7 +445,7 @@ xfs_iroot_realloc(
>  						     (int)new_size);
>  		memcpy(np, op, new_max * (uint)sizeof(xfs_fsblock_t));
>  	}
> -	kmem_free(ifp->if_broot);
> +	kfree(ifp->if_broot);
>  	ifp->if_broot = new_broot;
>  	ifp->if_broot_bytes = (int)new_size;
>  	if (ifp->if_broot)
> @@ -486,7 +486,7 @@ xfs_idata_realloc(
>  		return;
>  
>  	if (new_size == 0) {
> -		kmem_free(ifp->if_u1.if_data);
> +		kfree(ifp->if_u1.if_data);
>  		ifp->if_u1.if_data = NULL;
>  		ifp->if_bytes = 0;
>  		return;
> @@ -511,7 +511,7 @@ xfs_idestroy_fork(
>  
>  	ifp = XFS_IFORK_PTR(ip, whichfork);
>  	if (ifp->if_broot != NULL) {
> -		kmem_free(ifp->if_broot);
> +		kfree(ifp->if_broot);
>  		ifp->if_broot = NULL;
>  	}
>  
> @@ -523,7 +523,7 @@ xfs_idestroy_fork(
>  	 */
>  	if (XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_LOCAL) {
>  		if (ifp->if_u1.if_data != NULL) {
> -			kmem_free(ifp->if_u1.if_data);
> +			kfree(ifp->if_u1.if_data);
>  			ifp->if_u1.if_data = NULL;
>  		}
>  	} else if ((ifp->if_flags & XFS_IFEXTENTS) && ifp->if_height) {
> diff --git a/fs/xfs/libxfs/xfs_refcount.c b/fs/xfs/libxfs/xfs_refcount.c
> index 78236bd6c64f..07894c53e753 100644
> --- a/fs/xfs/libxfs/xfs_refcount.c
> +++ b/fs/xfs/libxfs/xfs_refcount.c
> @@ -1684,7 +1684,7 @@ xfs_refcount_recover_cow_leftovers(
>  			goto out_free;
>  
>  		list_del(&rr->rr_list);
> -		kmem_free(rr);
> +		kfree(rr);
>  	}
>  
>  	return error;
> @@ -1694,7 +1694,7 @@ xfs_refcount_recover_cow_leftovers(
>  	/* Free the leftover list */
>  	list_for_each_entry_safe(rr, n, &debris, rr_list) {
>  		list_del(&rr->rr_list);
> -		kmem_free(rr);
> +		kfree(rr);
>  	}
>  	return error;
>  }
> diff --git a/fs/xfs/scrub/agheader.c b/fs/xfs/scrub/agheader.c
> index ba0f747c82e8..6f7126f6d25c 100644
> --- a/fs/xfs/scrub/agheader.c
> +++ b/fs/xfs/scrub/agheader.c
> @@ -753,7 +753,7 @@ xchk_agfl(
>  	}
>  
>  out_free:
> -	kmem_free(sai.entries);
> +	kfree(sai.entries);
>  out:
>  	return error;
>  }
> diff --git a/fs/xfs/scrub/agheader_repair.c b/fs/xfs/scrub/agheader_repair.c
> index 7a1a38b636a9..15fabf020d1b 100644
> --- a/fs/xfs/scrub/agheader_repair.c
> +++ b/fs/xfs/scrub/agheader_repair.c
> @@ -624,7 +624,7 @@ xrep_agfl_init_header(
>  		if (br->len)
>  			break;
>  		list_del(&br->list);
> -		kmem_free(br);
> +		kfree(br);
>  	}
>  
>  	/* Write new AGFL to disk. */
> diff --git a/fs/xfs/scrub/attr.c b/fs/xfs/scrub/attr.c
> index d9f0dd444b80..7a2a240febc1 100644
> --- a/fs/xfs/scrub/attr.c
> +++ b/fs/xfs/scrub/attr.c
> @@ -49,7 +49,7 @@ xchk_setup_xattr_buf(
>  	if (ab) {
>  		if (sz <= ab->sz)
>  			return 0;
> -		kmem_free(ab);
> +		kvfree(ab);
>  		sc->buf = NULL;
>  	}
>  
> diff --git a/fs/xfs/scrub/bitmap.c b/fs/xfs/scrub/bitmap.c
> index 18a684e18a69..cabde1c4c235 100644
> --- a/fs/xfs/scrub/bitmap.c
> +++ b/fs/xfs/scrub/bitmap.c
> @@ -47,7 +47,7 @@ xfs_bitmap_destroy(
>  
>  	for_each_xfs_bitmap_extent(bmr, n, bitmap) {
>  		list_del(&bmr->list);
> -		kmem_free(bmr);
> +		kfree(bmr);
>  	}
>  }
>  
> @@ -174,7 +174,7 @@ xfs_bitmap_disunion(
>  			/* Total overlap, just delete ex. */
>  			lp = lp->next;
>  			list_del(&br->list);
> -			kmem_free(br);
> +			kfree(br);
>  			break;
>  		case 0:
>  			/*
> diff --git a/fs/xfs/scrub/btree.c b/fs/xfs/scrub/btree.c
> index f52a7b8256f9..bed40b605076 100644
> --- a/fs/xfs/scrub/btree.c
> +++ b/fs/xfs/scrub/btree.c
> @@ -698,7 +698,7 @@ xchk_btree(
>  			error = xchk_btree_check_block_owner(&bs,
>  					co->level, co->daddr);
>  		list_del(&co->list);
> -		kmem_free(co);
> +		kfree(co);
>  	}
>  
>  	return error;
> diff --git a/fs/xfs/scrub/refcount.c b/fs/xfs/scrub/refcount.c
> index 0cab11a5d390..985724e81ebf 100644
> --- a/fs/xfs/scrub/refcount.c
> +++ b/fs/xfs/scrub/refcount.c
> @@ -215,7 +215,7 @@ xchk_refcountbt_process_rmap_fragments(
>  				continue;
>  			}
>  			list_del(&frag->list);
> -			kmem_free(frag);
> +			kfree(frag);
>  			nr++;
>  		}
>  
> @@ -257,11 +257,11 @@ xchk_refcountbt_process_rmap_fragments(
>  	/* Delete fragments and work list. */
>  	list_for_each_entry_safe(frag, n, &worklist, list) {
>  		list_del(&frag->list);
> -		kmem_free(frag);
> +		kfree(frag);
>  	}
>  	list_for_each_entry_safe(frag, n, &refchk->fragments, list) {
>  		list_del(&frag->list);
> -		kmem_free(frag);
> +		kfree(frag);
>  	}
>  }
>  
> @@ -308,7 +308,7 @@ xchk_refcountbt_xref_rmap(
>  out_free:
>  	list_for_each_entry_safe(frag, n, &refchk.fragments, list) {
>  		list_del(&frag->list);
> -		kmem_free(frag);
> +		kfree(frag);
>  	}
>  }
>  
> diff --git a/fs/xfs/scrub/scrub.c b/fs/xfs/scrub/scrub.c
> index f1775bb19313..7c63cdf13946 100644
> --- a/fs/xfs/scrub/scrub.c
> +++ b/fs/xfs/scrub/scrub.c
> @@ -175,7 +175,7 @@ xchk_teardown(
>  		sc->flags &= ~XCHK_HAS_QUOTAOFFLOCK;
>  	}
>  	if (sc->buf) {
> -		kmem_free(sc->buf);
> +		kvfree(sc->buf);
>  		sc->buf = NULL;
>  	}
>  	return error;
> diff --git a/fs/xfs/xfs_acl.c b/fs/xfs/xfs_acl.c
> index 91693fce34a8..81b2c989242e 100644
> --- a/fs/xfs/xfs_acl.c
> +++ b/fs/xfs/xfs_acl.c
> @@ -157,7 +157,7 @@ xfs_get_acl(struct inode *inode, int type)
>  	} else  {
>  		acl = xfs_acl_from_disk(ip->i_mount, xfs_acl, len,
>  					XFS_ACL_MAX_ENTRIES(ip->i_mount));
> -		kmem_free(xfs_acl);
> +		kvfree(xfs_acl);
>  	}
>  	return acl;
>  }
> @@ -199,7 +199,7 @@ __xfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
>  		error = xfs_attr_set(ip, ea_name, (unsigned char *)xfs_acl,
>  				len, ATTR_ROOT);
>  
> -		kmem_free(xfs_acl);
> +		kvfree(xfs_acl);
>  	} else {
>  		/*
>  		 * A NULL ACL argument means we want to remove the ACL.
> diff --git a/fs/xfs/xfs_attr_inactive.c b/fs/xfs/xfs_attr_inactive.c
> index a78c501f6fb1..8351b3b611ac 100644
> --- a/fs/xfs/xfs_attr_inactive.c
> +++ b/fs/xfs/xfs_attr_inactive.c
> @@ -181,7 +181,7 @@ xfs_attr3_leaf_inactive(
>  			error = tmp;	/* save only the 1st errno */
>  	}
>  
> -	kmem_free(list);
> +	kfree(list);
>  	return error;
>  }
>  
> diff --git a/fs/xfs/xfs_attr_list.c b/fs/xfs/xfs_attr_list.c
> index 0ec6606149a2..e1d1c4eb9e69 100644
> --- a/fs/xfs/xfs_attr_list.c
> +++ b/fs/xfs/xfs_attr_list.c
> @@ -131,7 +131,7 @@ xfs_attr_shortform_list(
>  					     XFS_ERRLEVEL_LOW,
>  					     context->dp->i_mount, sfe,
>  					     sizeof(*sfe));
> -			kmem_free(sbuf);
> +			kfree(sbuf);
>  			return -EFSCORRUPTED;
>  		}
>  
> @@ -195,7 +195,7 @@ xfs_attr_shortform_list(
>  		cursor->offset++;
>  	}
>  out:
> -	kmem_free(sbuf);
> +	kfree(sbuf);
>  	return error;
>  }
>  
> diff --git a/fs/xfs/xfs_bmap_item.c b/fs/xfs/xfs_bmap_item.c
> index ee6f4229cebc..a89e10519f05 100644
> --- a/fs/xfs/xfs_bmap_item.c
> +++ b/fs/xfs/xfs_bmap_item.c
> @@ -391,7 +391,7 @@ xfs_bmap_update_finish_item(
>  		bmap->bi_bmap.br_blockcount = count;
>  		return -EAGAIN;
>  	}
> -	kmem_free(bmap);
> +	kfree(bmap);
>  	return error;
>  }
>  
> @@ -411,7 +411,7 @@ xfs_bmap_update_cancel_item(
>  	struct xfs_bmap_intent		*bmap;
>  
>  	bmap = container_of(item, struct xfs_bmap_intent, bi_list);
> -	kmem_free(bmap);
> +	kfree(bmap);
>  }
>  
>  const struct xfs_defer_op_type xfs_bmap_update_defer_type = {
> diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
> index a0229c368e78..80ef2fc8bb77 100644
> --- a/fs/xfs/xfs_buf.c
> +++ b/fs/xfs/xfs_buf.c
> @@ -193,7 +193,7 @@ xfs_buf_free_maps(
>  	struct xfs_buf	*bp)
>  {
>  	if (bp->b_maps != &bp->__b_map) {
> -		kmem_free(bp->b_maps);
> +		kfree(bp->b_maps);
>  		bp->b_maps = NULL;
>  	}
>  }
> @@ -292,7 +292,7 @@ _xfs_buf_free_pages(
>  	xfs_buf_t	*bp)
>  {
>  	if (bp->b_pages != bp->b_page_array) {
> -		kmem_free(bp->b_pages);
> +		kfree(bp->b_pages);
>  		bp->b_pages = NULL;
>  	}
>  }
> @@ -325,7 +325,7 @@ xfs_buf_free(
>  			__free_page(page);
>  		}
>  	} else if (bp->b_flags & _XBF_KMEM)
> -		kmem_free(bp->b_addr);
> +		kvfree(bp->b_addr);
>  	_xfs_buf_free_pages(bp);
>  	xfs_buf_free_maps(bp);
>  	kmem_cache_free(xfs_buf_zone, bp);
> @@ -373,7 +373,7 @@ xfs_buf_allocate_memory(
>  		if (((unsigned long)(bp->b_addr + size - 1) & PAGE_MASK) !=
>  		    ((unsigned long)bp->b_addr & PAGE_MASK)) {
>  			/* b_addr spans two pages - use alloc_page instead */
> -			kmem_free(bp->b_addr);
> +			kvfree(bp->b_addr);
>  			bp->b_addr = NULL;
>  			goto use_alloc_page;
>  		}
> @@ -1702,7 +1702,7 @@ xfs_free_buftarg(
>  
>  	xfs_blkdev_issue_flush(btp);
>  
> -	kmem_free(btp);
> +	kfree(btp);
>  }
>  
>  int
> @@ -1778,7 +1778,7 @@ xfs_alloc_buftarg(
>  error_lru:
>  	list_lru_destroy(&btp->bt_lru);
>  error_free:
> -	kmem_free(btp);
> +	kfree(btp);
>  	return NULL;
>  }
>  
> diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c
> index 3458a1264a3f..8dc3330f1797 100644
> --- a/fs/xfs/xfs_buf_item.c
> +++ b/fs/xfs/xfs_buf_item.c
> @@ -713,7 +713,7 @@ xfs_buf_item_free_format(
>  	struct xfs_buf_log_item	*bip)
>  {
>  	if (bip->bli_formats != &bip->__bli_format) {
> -		kmem_free(bip->bli_formats);
> +		kfree(bip->bli_formats);
>  		bip->bli_formats = NULL;
>  	}
>  }
> @@ -938,7 +938,7 @@ xfs_buf_item_free(
>  	struct xfs_buf_log_item	*bip)
>  {
>  	xfs_buf_item_free_format(bip);
> -	kmem_free(bip->bli_item.li_lv_shadow);
> +	kfree(bip->bli_item.li_lv_shadow);
>  	kmem_cache_free(xfs_buf_item_zone, bip);
>  }
>  
> diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c
> index 153815bf18fc..a073281c3bd7 100644
> --- a/fs/xfs/xfs_dquot.c
> +++ b/fs/xfs/xfs_dquot.c
> @@ -52,7 +52,7 @@ xfs_qm_dqdestroy(
>  {
>  	ASSERT(list_empty(&dqp->q_lru));
>  
> -	kmem_free(dqp->q_logitem.qli_item.li_lv_shadow);
> +	kfree(dqp->q_logitem.qli_item.li_lv_shadow);
>  	mutex_destroy(&dqp->q_qlock);
>  
>  	XFS_STATS_DEC(dqp->q_mount, xs_qm_dquot);
> diff --git a/fs/xfs/xfs_dquot_item.c b/fs/xfs/xfs_dquot_item.c
> index d60647d7197b..1b5e68ccef60 100644
> --- a/fs/xfs/xfs_dquot_item.c
> +++ b/fs/xfs/xfs_dquot_item.c
> @@ -316,10 +316,10 @@ xfs_qm_qoffend_logitem_committed(
>  	spin_lock(&ailp->ail_lock);
>  	xfs_trans_ail_delete(ailp, &qfs->qql_item, SHUTDOWN_LOG_IO_ERROR);
>  
> -	kmem_free(qfs->qql_item.li_lv_shadow);
> -	kmem_free(lip->li_lv_shadow);
> -	kmem_free(qfs);
> -	kmem_free(qfe);
> +	kfree(qfs->qql_item.li_lv_shadow);
> +	kfree(lip->li_lv_shadow);
> +	kfree(qfs);
> +	kfree(qfe);
>  	return (xfs_lsn_t)-1;
>  }
>  
> diff --git a/fs/xfs/xfs_error.c b/fs/xfs/xfs_error.c
> index 51dd1f43d12f..4c0883380d7c 100644
> --- a/fs/xfs/xfs_error.c
> +++ b/fs/xfs/xfs_error.c
> @@ -226,7 +226,7 @@ xfs_errortag_del(
>  	struct xfs_mount	*mp)
>  {
>  	xfs_sysfs_del(&mp->m_errortag_kobj);
> -	kmem_free(mp->m_errortag);
> +	kfree(mp->m_errortag);
>  }
>  
>  bool
> diff --git a/fs/xfs/xfs_extent_busy.c b/fs/xfs/xfs_extent_busy.c
> index 3991e59cfd18..9f0b99c7b34a 100644
> --- a/fs/xfs/xfs_extent_busy.c
> +++ b/fs/xfs/xfs_extent_busy.c
> @@ -532,7 +532,7 @@ xfs_extent_busy_clear_one(
>  	}
>  
>  	list_del_init(&busyp->list);
> -	kmem_free(busyp);
> +	kfree(busyp);
>  }
>  
>  static void
> diff --git a/fs/xfs/xfs_extfree_item.c b/fs/xfs/xfs_extfree_item.c
> index 6ea847f6e298..29b3a90aee91 100644
> --- a/fs/xfs/xfs_extfree_item.c
> +++ b/fs/xfs/xfs_extfree_item.c
> @@ -35,9 +35,9 @@ void
>  xfs_efi_item_free(
>  	struct xfs_efi_log_item	*efip)
>  {
> -	kmem_free(efip->efi_item.li_lv_shadow);
> +	kfree(efip->efi_item.li_lv_shadow);
>  	if (efip->efi_format.efi_nextents > XFS_EFI_MAX_FAST_EXTENTS)
> -		kmem_free(efip);
> +		kfree(efip);
>  	else
>  		kmem_cache_free(xfs_efi_zone, efip);
>  }
> @@ -240,9 +240,9 @@ static inline struct xfs_efd_log_item *EFD_ITEM(struct xfs_log_item *lip)
>  STATIC void
>  xfs_efd_item_free(struct xfs_efd_log_item *efdp)
>  {
> -	kmem_free(efdp->efd_item.li_lv_shadow);
> +	kfree(efdp->efd_item.li_lv_shadow);
>  	if (efdp->efd_format.efd_nextents > XFS_EFD_MAX_FAST_EXTENTS)
> -		kmem_free(efdp);
> +		kfree(efdp);
>  	else
>  		kmem_cache_free(xfs_efd_zone, efdp);
>  }
> @@ -488,7 +488,7 @@ xfs_extent_free_finish_item(
>  			free->xefi_startblock,
>  			free->xefi_blockcount,
>  			&free->xefi_oinfo, free->xefi_skip_discard);
> -	kmem_free(free);
> +	kfree(free);
>  	return error;
>  }
>  
> @@ -508,7 +508,7 @@ xfs_extent_free_cancel_item(
>  	struct xfs_extent_free_item	*free;
>  
>  	free = container_of(item, struct xfs_extent_free_item, xefi_list);
> -	kmem_free(free);
> +	kfree(free);
>  }
>  
>  const struct xfs_defer_op_type xfs_extent_free_defer_type = {
> @@ -572,7 +572,7 @@ xfs_agfl_free_finish_item(
>  	extp->ext_len = free->xefi_blockcount;
>  	efdp->efd_next_extent++;
>  
> -	kmem_free(free);
> +	kfree(free);
>  	return error;
>  }
>  
> diff --git a/fs/xfs/xfs_filestream.c b/fs/xfs/xfs_filestream.c
> index 2ae356775f63..9778e4e69e07 100644
> --- a/fs/xfs/xfs_filestream.c
> +++ b/fs/xfs/xfs_filestream.c
> @@ -118,7 +118,7 @@ xfs_fstrm_free_func(
>  	xfs_filestream_put_ag(mp, item->ag);
>  	trace_xfs_filestream_free(mp, mru->key, item->ag);
>  
> -	kmem_free(item);
> +	kfree(item);
>  }
>  
>  /*
> @@ -263,7 +263,7 @@ xfs_filestream_pick_ag(
>  	return 0;
>  
>  out_free_item:
> -	kmem_free(item);
> +	kfree(item);
>  out_put_ag:
>  	xfs_filestream_put_ag(mp, *agp);
>  	return err;
> diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
> index a92d4521748d..e1121ed7cbb5 100644
> --- a/fs/xfs/xfs_inode.c
> +++ b/fs/xfs/xfs_inode.c
> @@ -708,7 +708,7 @@ xfs_lookup(
>  
>  out_free_name:
>  	if (ci_name)
> -		kmem_free(ci_name->name);
> +		kfree(ci_name->name);
>  out_unlock:
>  	*ipp = NULL;
>  	return error;
> @@ -2001,7 +2001,7 @@ xfs_iunlink_insert_backref(
>  	 */
>  	if (error) {
>  		WARN(error != -ENOMEM, "iunlink cache insert error %d", error);
> -		kmem_free(iu);
> +		kfree(iu);
>  	}
>  	/*
>  	 * Absorb any runtime errors that aren't a result of corruption because
> @@ -2066,7 +2066,7 @@ xfs_iunlink_change_backref(
>  
>  	/* If there is no new next entry just free our item and return. */
>  	if (next_unlinked == NULLAGINO) {
> -		kmem_free(iu);
> +		kfree(iu);
>  		return 0;
>  	}
>  
> @@ -2094,7 +2094,7 @@ xfs_iunlink_free_item(
>  	bool			*freed_anything = arg;
>  
>  	*freed_anything = true;
> -	kmem_free(iu);
> +	kfree(iu);
>  }
>  
>  void
> @@ -3598,7 +3598,7 @@ xfs_iflush_cluster(
>  
>  out_free:
>  	rcu_read_unlock();
> -	kmem_free(cilist);
> +	kfree(cilist);
>  out_put:
>  	xfs_perag_put(pag);
>  	return 0;
> @@ -3629,7 +3629,7 @@ xfs_iflush_cluster(
>  
>  	/* abort the corrupt inode, as it was not attached to the buffer */
>  	xfs_iflush_abort(cip, false);
> -	kmem_free(cilist);
> +	kfree(cilist);
>  	xfs_perag_put(pag);
>  	return -EFSCORRUPTED;
>  }
> diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c
> index 3a62976291a1..c8461a5515f1 100644
> --- a/fs/xfs/xfs_inode_item.c
> +++ b/fs/xfs/xfs_inode_item.c
> @@ -666,7 +666,7 @@ void
>  xfs_inode_item_destroy(
>  	xfs_inode_t	*ip)
>  {
> -	kmem_free(ip->i_itemp->ili_item.li_lv_shadow);
> +	kfree(ip->i_itemp->ili_item.li_lv_shadow);
>  	kmem_cache_free(xfs_ili_zone, ip->i_itemp);
>  }
>  
> diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
> index 364961c23cd0..f86dde7c9ea6 100644
> --- a/fs/xfs/xfs_ioctl.c
> +++ b/fs/xfs/xfs_ioctl.c
> @@ -417,7 +417,7 @@ xfs_attrlist_by_handle(
>  		error = -EFAULT;
>  
>  out_kfree:
> -	kmem_free(kbuf);
> +	kvfree(kbuf);
>  out_dput:
>  	dput(dentry);
>  	return error;
> @@ -448,7 +448,7 @@ xfs_attrmulti_attr_get(
>  		error = -EFAULT;
>  
>  out_kfree:
> -	kmem_free(kbuf);
> +	kvfree(kbuf);
>  	return error;
>  }
>  
> @@ -1777,7 +1777,7 @@ xfs_ioc_getbmap(
>  
>  	error = 0;
>  out_free_buf:
> -	kmem_free(buf);
> +	kvfree(buf);
>  	return error;
>  }
>  
> diff --git a/fs/xfs/xfs_ioctl32.c b/fs/xfs/xfs_ioctl32.c
> index 3c0d518e1039..de472fcd2f67 100644
> --- a/fs/xfs/xfs_ioctl32.c
> +++ b/fs/xfs/xfs_ioctl32.c
> @@ -400,7 +400,7 @@ xfs_compat_attrlist_by_handle(
>  		error = -EFAULT;
>  
>  out_kfree:
> -	kmem_free(kbuf);
> +	kvfree(kbuf);
>  out_dput:
>  	dput(dentry);
>  	return error;
> diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c
> index 57e6e44123a9..e532db27d0dc 100644
> --- a/fs/xfs/xfs_iops.c
> +++ b/fs/xfs/xfs_iops.c
> @@ -303,7 +303,7 @@ xfs_vn_ci_lookup(
>  	dname.name = ci_name.name;
>  	dname.len = ci_name.len;
>  	dentry = d_add_ci(dentry, VFS_I(ip), &dname);
> -	kmem_free(ci_name.name);
> +	kfree(ci_name.name);
>  	return dentry;
>  }
>  
> diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c
> index 884950adbd16..36bf47f11117 100644
> --- a/fs/xfs/xfs_itable.c
> +++ b/fs/xfs/xfs_itable.c
> @@ -175,7 +175,7 @@ xfs_bulkstat_one(
>  
>  	error = xfs_bulkstat_one_int(breq->mp, NULL, breq->startino, &bc);
>  
> -	kmem_free(bc.buf);
> +	kfree(bc.buf);
>  
>  	/*
>  	 * If we reported one inode to userspace then we abort because we hit
> @@ -250,7 +250,7 @@ xfs_bulkstat(
>  	error = xfs_iwalk(breq->mp, NULL, breq->startino, breq->flags,
>  			xfs_bulkstat_iwalk, breq->icount, &bc);
>  
> -	kmem_free(bc.buf);
> +	kfree(bc.buf);
>  
>  	/*
>  	 * We found some inodes, so clear the error status and return them.
> diff --git a/fs/xfs/xfs_iwalk.c b/fs/xfs/xfs_iwalk.c
> index aa375cf53021..67e98f9023d2 100644
> --- a/fs/xfs/xfs_iwalk.c
> +++ b/fs/xfs/xfs_iwalk.c
> @@ -164,7 +164,7 @@ STATIC void
>  xfs_iwalk_free(
>  	struct xfs_iwalk_ag	*iwag)
>  {
> -	kmem_free(iwag->recs);
> +	kfree(iwag->recs);
>  	iwag->recs = NULL;
>  }
>  
> @@ -578,7 +578,7 @@ xfs_iwalk_ag_work(
>  	error = xfs_iwalk_ag(iwag);
>  	xfs_iwalk_free(iwag);
>  out:
> -	kmem_free(iwag);
> +	kfree(iwag);
>  	return error;
>  }
>  
> diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c
> index 6a147c63a8a6..e8349b0d7c51 100644
> --- a/fs/xfs/xfs_log.c
> +++ b/fs/xfs/xfs_log.c
> @@ -1540,11 +1540,11 @@ xlog_alloc_log(
>  out_free_iclog:
>  	for (iclog = log->l_iclog; iclog; iclog = prev_iclog) {
>  		prev_iclog = iclog->ic_next;
> -		kmem_free(iclog->ic_data);
> -		kmem_free(iclog);
> +		kvfree(iclog->ic_data);
> +		kfree(iclog);
>  	}
>  out_free_log:
> -	kmem_free(log);
> +	kfree(log);
>  out:
>  	return ERR_PTR(error);
>  }	/* xlog_alloc_log */
> @@ -2001,14 +2001,14 @@ xlog_dealloc_log(
>  	iclog = log->l_iclog;
>  	for (i = 0; i < log->l_iclog_bufs; i++) {
>  		next_iclog = iclog->ic_next;
> -		kmem_free(iclog->ic_data);
> -		kmem_free(iclog);
> +		kvfree(iclog->ic_data);
> +		kfree(iclog);
>  		iclog = next_iclog;
>  	}
>  
>  	log->l_mp->m_log = NULL;
>  	destroy_workqueue(log->l_ioend_workqueue);
> -	kmem_free(log);
> +	kfree(log);
>  }	/* xlog_dealloc_log */
>  
>  /*
> diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c
> index 48435cf2aa16..23d70836a2b7 100644
> --- a/fs/xfs/xfs_log_cil.c
> +++ b/fs/xfs/xfs_log_cil.c
> @@ -184,7 +184,7 @@ xlog_cil_alloc_shadow_bufs(
>  			 * the buffer, only the log vector header and the iovec
>  			 * storage.
>  			 */
> -			kmem_free(lip->li_lv_shadow);
> +			kfree(lip->li_lv_shadow);
>  
>  			lv = kmem_alloc_large(buf_size, KM_NOFS);
>  			memset(lv, 0, xlog_cil_iovec_space(niovecs));
> @@ -492,7 +492,7 @@ xlog_cil_free_logvec(
>  
>  	for (lv = log_vector; lv; ) {
>  		struct xfs_log_vec *next = lv->lv_next;
> -		kmem_free(lv);
> +		kvfree(lv);
>  		lv = next;
>  	}
>  }
> @@ -506,7 +506,7 @@ xlog_discard_endio_work(
>  	struct xfs_mount	*mp = ctx->cil->xc_log->l_mp;
>  
>  	xfs_extent_busy_clear(mp, &ctx->busy_extents, false);
> -	kmem_free(ctx);
> +	kfree(ctx);
>  }
>  
>  /*
> @@ -608,7 +608,7 @@ xlog_cil_committed(
>  	if (!list_empty(&ctx->busy_extents))
>  		xlog_discard_busy_extents(mp, ctx);
>  	else
> -		kmem_free(ctx);
> +		kfree(ctx);
>  }
>  
>  void
> @@ -872,7 +872,7 @@ xlog_cil_push(
>  out_skip:
>  	up_write(&cil->xc_ctx_lock);
>  	xfs_log_ticket_put(new_ctx->ticket);
> -	kmem_free(new_ctx);
> +	kfree(new_ctx);
>  	return 0;
>  
>  out_abort_free_ticket:
> @@ -1185,7 +1185,7 @@ xlog_cil_init(
>  
>  	ctx = kmem_zalloc(sizeof(*ctx), KM_MAYFAIL);
>  	if (!ctx) {
> -		kmem_free(cil);
> +		kfree(cil);
>  		return -ENOMEM;
>  	}
>  
> @@ -1216,10 +1216,10 @@ xlog_cil_destroy(
>  	if (log->l_cilp->xc_ctx) {
>  		if (log->l_cilp->xc_ctx->ticket)
>  			xfs_log_ticket_put(log->l_cilp->xc_ctx->ticket);
> -		kmem_free(log->l_cilp->xc_ctx);
> +		kfree(log->l_cilp->xc_ctx);
>  	}
>  
>  	ASSERT(list_empty(&log->l_cilp->xc_cil));
> -	kmem_free(log->l_cilp);
> +	kfree(log->l_cilp);
>  }
>  
> diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
> index 02f2147952b3..4167e1326f62 100644
> --- a/fs/xfs/xfs_log_recover.c
> +++ b/fs/xfs/xfs_log_recover.c
> @@ -418,7 +418,7 @@ xlog_find_verify_cycle(
>  	*new_blk = -1;
>  
>  out:
> -	kmem_free(buffer);
> +	kvfree(buffer);
>  	return error;
>  }
>  
> @@ -529,7 +529,7 @@ xlog_find_verify_log_record(
>  		*last_blk = i;
>  
>  out:
> -	kmem_free(buffer);
> +	kvfree(buffer);
>  	return error;
>  }
>  
> @@ -783,7 +783,7 @@ xlog_find_head(
>  			goto out_free_buffer;
>  	}
>  
> -	kmem_free(buffer);
> +	kvfree(buffer);
>  	if (head_blk == log_bbnum)
>  		*return_head_blk = 0;
>  	else
> @@ -797,7 +797,7 @@ xlog_find_head(
>  	return 0;
>  
>  out_free_buffer:
> -	kmem_free(buffer);
> +	kvfree(buffer);
>  	if (error)
>  		xfs_warn(log->l_mp, "failed to find log head");
>  	return error;
> @@ -1051,7 +1051,7 @@ xlog_verify_tail(
>  		"Tail block (0x%llx) overwrite detected. Updated to 0x%llx",
>  			 orig_tail, *tail_blk);
>  out:
> -	kmem_free(buffer);
> +	kvfree(buffer);
>  	return error;
>  }
>  
> @@ -1098,7 +1098,7 @@ xlog_verify_head(
>  	error = xlog_rseek_logrec_hdr(log, *head_blk, *tail_blk,
>  				      XLOG_MAX_ICLOGS, tmp_buffer,
>  				      &tmp_rhead_blk, &tmp_rhead, &tmp_wrapped);
> -	kmem_free(tmp_buffer);
> +	kvfree(tmp_buffer);
>  	if (error < 0)
>  		return error;
>  
> @@ -1431,7 +1431,7 @@ xlog_find_tail(
>  		error = xlog_clear_stale_blocks(log, tail_lsn);
>  
>  done:
> -	kmem_free(buffer);
> +	kvfree(buffer);
>  
>  	if (error)
>  		xfs_warn(log->l_mp, "failed to locate log tail");
> @@ -1479,7 +1479,7 @@ xlog_find_zeroed(
>  	first_cycle = xlog_get_cycle(offset);
>  	if (first_cycle == 0) {		/* completely zeroed log */
>  		*blk_no = 0;
> -		kmem_free(buffer);
> +		kvfree(buffer);
>  		return 1;
>  	}
>  
> @@ -1490,7 +1490,7 @@ xlog_find_zeroed(
>  
>  	last_cycle = xlog_get_cycle(offset);
>  	if (last_cycle != 0) {		/* log completely written to */
> -		kmem_free(buffer);
> +		kvfree(buffer);
>  		return 0;
>  	}
>  
> @@ -1537,7 +1537,7 @@ xlog_find_zeroed(
>  
>  	*blk_no = last_blk;
>  out_free_buffer:
> -	kmem_free(buffer);
> +	kvfree(buffer);
>  	if (error)
>  		return error;
>  	return 1;
> @@ -1649,7 +1649,7 @@ xlog_write_log_records(
>  	}
>  
>  out_free_buffer:
> -	kmem_free(buffer);
> +	kvfree(buffer);
>  	return error;
>  }
>  
> @@ -2039,7 +2039,7 @@ xlog_check_buffer_cancelled(
>  	if (flags & XFS_BLF_CANCEL) {
>  		if (--bcp->bc_refcount == 0) {
>  			list_del(&bcp->bc_list);
> -			kmem_free(bcp);
> +			kfree(bcp);
>  		}
>  	}
>  	return 1;
> @@ -3188,7 +3188,7 @@ xlog_recover_inode_pass2(
>  	xfs_buf_relse(bp);
>  error:
>  	if (need_free)
> -		kmem_free(in_f);
> +		kfree(in_f);
>  	return error;
>  }
>  
> @@ -4292,7 +4292,7 @@ xlog_recover_add_to_trans(
>  		"bad number of regions (%d) in inode log format",
>  				  in_f->ilf_size);
>  			ASSERT(0);
> -			kmem_free(ptr);
> +			kfree(ptr);
>  			return -EFSCORRUPTED;
>  		}
>  
> @@ -4307,7 +4307,7 @@ xlog_recover_add_to_trans(
>  	"log item region count (%d) overflowed size (%d)",
>  				item->ri_cnt, item->ri_total);
>  		ASSERT(0);
> -		kmem_free(ptr);
> +		kfree(ptr);
>  		return -EFSCORRUPTED;
>  	}
>  
> @@ -4337,13 +4337,13 @@ xlog_recover_free_trans(
>  		/* Free the regions in the item. */
>  		list_del(&item->ri_list);
>  		for (i = 0; i < item->ri_cnt; i++)
> -			kmem_free(item->ri_buf[i].i_addr);
> +			kfree(item->ri_buf[i].i_addr);
>  		/* Free the item itself */
> -		kmem_free(item->ri_buf);
> -		kmem_free(item);
> +		kfree(item->ri_buf);
> +		kfree(item);
>  	}
>  	/* Free the transaction recover structure */
> -	kmem_free(trans);
> +	kfree(trans);
>  }
>  
>  /*
> @@ -5327,7 +5327,7 @@ xlog_do_recovery_pass(
>  			hblks = h_size / XLOG_HEADER_CYCLE_SIZE;
>  			if (h_size % XLOG_HEADER_CYCLE_SIZE)
>  				hblks++;
> -			kmem_free(hbp);
> +			kvfree(hbp);
>  			hbp = xlog_alloc_buffer(log, hblks);
>  		} else {
>  			hblks = 1;
> @@ -5343,7 +5343,7 @@ xlog_do_recovery_pass(
>  		return -ENOMEM;
>  	dbp = xlog_alloc_buffer(log, BTOBB(h_size));
>  	if (!dbp) {
> -		kmem_free(hbp);
> +		kvfree(hbp);
>  		return -ENOMEM;
>  	}
>  
> @@ -5504,9 +5504,9 @@ xlog_do_recovery_pass(
>  	}
>  
>   bread_err2:
> -	kmem_free(dbp);
> +	kvfree(dbp);
>   bread_err1:
> -	kmem_free(hbp);
> +	kvfree(hbp);
>  
>  	/*
>  	 * Submit buffers that have been added from the last record processed,
> @@ -5570,7 +5570,7 @@ xlog_do_log_recovery(
>  	error = xlog_do_recovery_pass(log, head_blk, tail_blk,
>  				      XLOG_RECOVER_PASS1, NULL);
>  	if (error != 0) {
> -		kmem_free(log->l_buf_cancel_table);
> +		kfree(log->l_buf_cancel_table);
>  		log->l_buf_cancel_table = NULL;
>  		return error;
>  	}
> @@ -5589,7 +5589,7 @@ xlog_do_log_recovery(
>  	}
>  #endif	/* DEBUG */
>  
> -	kmem_free(log->l_buf_cancel_table);
> +	kfree(log->l_buf_cancel_table);
>  	log->l_buf_cancel_table = NULL;
>  
>  	return error;
> diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
> index 5ea95247a37f..53ddb058b11a 100644
> --- a/fs/xfs/xfs_mount.c
> +++ b/fs/xfs/xfs_mount.c
> @@ -42,7 +42,7 @@ xfs_uuid_table_free(void)
>  {
>  	if (xfs_uuid_table_size == 0)
>  		return;
> -	kmem_free(xfs_uuid_table);
> +	kfree(xfs_uuid_table);
>  	xfs_uuid_table = NULL;
>  	xfs_uuid_table_size = 0;
>  }
> @@ -127,7 +127,7 @@ __xfs_free_perag(
>  	struct xfs_perag *pag = container_of(head, struct xfs_perag, rcu_head);
>  
>  	ASSERT(atomic_read(&pag->pag_ref) == 0);
> -	kmem_free(pag);
> +	kfree(pag);
>  }
>  
>  /*
> @@ -243,7 +243,7 @@ xfs_initialize_perag(
>  	xfs_buf_hash_destroy(pag);
>  out_free_pag:
>  	mutex_destroy(&pag->pag_ici_reclaim_lock);
> -	kmem_free(pag);
> +	kfree(pag);
>  out_unwind_new_pags:
>  	/* unwind any prior newly initialized pags */
>  	for (index = first_initialised; index < agcount; index++) {
> @@ -253,7 +253,7 @@ xfs_initialize_perag(
>  		xfs_buf_hash_destroy(pag);
>  		xfs_iunlink_destroy(pag);
>  		mutex_destroy(&pag->pag_ici_reclaim_lock);
> -		kmem_free(pag);
> +		kfree(pag);
>  	}
>  	return error;
>  }
> diff --git a/fs/xfs/xfs_mru_cache.c b/fs/xfs/xfs_mru_cache.c
> index a06661dac5be..6ef0a71d7681 100644
> --- a/fs/xfs/xfs_mru_cache.c
> +++ b/fs/xfs/xfs_mru_cache.c
> @@ -364,9 +364,9 @@ xfs_mru_cache_create(
>  
>  exit:
>  	if (err && mru && mru->lists)
> -		kmem_free(mru->lists);
> +		kfree(mru->lists);
>  	if (err && mru)
> -		kmem_free(mru);
> +		kfree(mru);
>  
>  	return err;
>  }
> @@ -406,8 +406,8 @@ xfs_mru_cache_destroy(
>  
>  	xfs_mru_cache_flush(mru);
>  
> -	kmem_free(mru->lists);
> -	kmem_free(mru);
> +	kfree(mru->lists);
> +	kfree(mru);
>  }
>  
>  /*
> diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c
> index 66ea8e4fca86..06c92dc61a03 100644
> --- a/fs/xfs/xfs_qm.c
> +++ b/fs/xfs/xfs_qm.c
> @@ -698,7 +698,7 @@ xfs_qm_init_quotainfo(
>  out_free_lru:
>  	list_lru_destroy(&qinf->qi_lru);
>  out_free_qinf:
> -	kmem_free(qinf);
> +	kfree(qinf);
>  	mp->m_quotainfo = NULL;
>  	return error;
>  }
> @@ -722,7 +722,7 @@ xfs_qm_destroy_quotainfo(
>  	xfs_qm_destroy_quotainos(qi);
>  	mutex_destroy(&qi->qi_tree_lock);
>  	mutex_destroy(&qi->qi_quotaofflock);
> -	kmem_free(qi);
> +	kfree(qi);
>  	mp->m_quotainfo = NULL;
>  }
>  
> @@ -1049,7 +1049,7 @@ xfs_qm_reset_dqcounts_buf(
>  	} while (nmaps > 0);
>  
>  out:
> -	kmem_free(map);
> +	kfree(map);
>  	return error;
>  }
>  
> diff --git a/fs/xfs/xfs_refcount_item.c b/fs/xfs/xfs_refcount_item.c
> index 8eeed73928cd..0ac598f55339 100644
> --- a/fs/xfs/xfs_refcount_item.c
> +++ b/fs/xfs/xfs_refcount_item.c
> @@ -32,7 +32,7 @@ xfs_cui_item_free(
>  	struct xfs_cui_log_item	*cuip)
>  {
>  	if (cuip->cui_format.cui_nextents > XFS_CUI_MAX_FAST_EXTENTS)
> -		kmem_free(cuip);
> +		kfree(cuip);
>  	else
>  		kmem_cache_free(xfs_cui_zone, cuip);
>  }
> @@ -392,7 +392,7 @@ xfs_refcount_update_finish_item(
>  		refc->ri_blockcount = new_aglen;
>  		return -EAGAIN;
>  	}
> -	kmem_free(refc);
> +	kfree(refc);
>  	return error;
>  }
>  
> @@ -424,7 +424,7 @@ xfs_refcount_update_cancel_item(
>  	struct xfs_refcount_intent	*refc;
>  
>  	refc = container_of(item, struct xfs_refcount_intent, ri_list);
> -	kmem_free(refc);
> +	kfree(refc);
>  }
>  
>  const struct xfs_defer_op_type xfs_refcount_update_defer_type = {
> diff --git a/fs/xfs/xfs_rmap_item.c b/fs/xfs/xfs_rmap_item.c
> index 4911b68f95dd..a0a02d862ddd 100644
> --- a/fs/xfs/xfs_rmap_item.c
> +++ b/fs/xfs/xfs_rmap_item.c
> @@ -32,7 +32,7 @@ xfs_rui_item_free(
>  	struct xfs_rui_log_item	*ruip)
>  {
>  	if (ruip->rui_format.rui_nextents > XFS_RUI_MAX_FAST_EXTENTS)
> -		kmem_free(ruip);
> +		kfree(ruip);
>  	else
>  		kmem_cache_free(xfs_rui_zone, ruip);
>  }
> @@ -436,7 +436,7 @@ xfs_rmap_update_finish_item(
>  			rmap->ri_bmap.br_blockcount,
>  			rmap->ri_bmap.br_state,
>  			(struct xfs_btree_cur **)state);
> -	kmem_free(rmap);
> +	kfree(rmap);
>  	return error;
>  }
>  
> @@ -468,7 +468,7 @@ xfs_rmap_update_cancel_item(
>  	struct xfs_rmap_intent		*rmap;
>  
>  	rmap = container_of(item, struct xfs_rmap_intent, ri_list);
> -	kmem_free(rmap);
> +	kfree(rmap);
>  }
>  
>  const struct xfs_defer_op_type xfs_rmap_update_defer_type = {
> diff --git a/fs/xfs/xfs_rtalloc.c b/fs/xfs/xfs_rtalloc.c
> index d42b5a2047e0..7f03b4ab3452 100644
> --- a/fs/xfs/xfs_rtalloc.c
> +++ b/fs/xfs/xfs_rtalloc.c
> @@ -1082,7 +1082,7 @@ xfs_growfs_rt(
>  	/*
>  	 * Free the fake mp structure.
>  	 */
> -	kmem_free(nmp);
> +	kfree(nmp);
>  
>  	/*
>  	 * If we had to allocate a new rsum_cache, we either need to free the
> @@ -1091,10 +1091,10 @@ xfs_growfs_rt(
>  	 */
>  	if (rsum_cache != mp->m_rsum_cache) {
>  		if (error) {
> -			kmem_free(mp->m_rsum_cache);
> +			kvfree(mp->m_rsum_cache);
>  			mp->m_rsum_cache = rsum_cache;
>  		} else {
> -			kmem_free(rsum_cache);
> +			kvfree(rsum_cache);
>  		}
>  	}
>  
> @@ -1253,7 +1253,7 @@ void
>  xfs_rtunmount_inodes(
>  	struct xfs_mount	*mp)
>  {
> -	kmem_free(mp->m_rsum_cache);
> +	kvfree(mp->m_rsum_cache);
>  	if (mp->m_rbmip)
>  		xfs_irele(mp->m_rbmip);
>  	if (mp->m_rsumip)
> diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
> index d9ae27ddf253..cc1933dc652f 100644
> --- a/fs/xfs/xfs_super.c
> +++ b/fs/xfs/xfs_super.c
> @@ -725,7 +725,7 @@ xfs_mount_free(
>  {
>  	kfree(mp->m_rtname);
>  	kfree(mp->m_logname);
> -	kmem_free(mp);
> +	kfree(mp);
>  }
>  
>  STATIC int
> diff --git a/fs/xfs/xfs_trans_ail.c b/fs/xfs/xfs_trans_ail.c
> index 00cc5b8734be..589918d11041 100644
> --- a/fs/xfs/xfs_trans_ail.c
> +++ b/fs/xfs/xfs_trans_ail.c
> @@ -844,7 +844,7 @@ xfs_trans_ail_init(
>  	return 0;
>  
>  out_free_ailp:
> -	kmem_free(ailp);
> +	kfree(ailp);
>  	return -ENOMEM;
>  }
>  
> @@ -855,5 +855,5 @@ xfs_trans_ail_destroy(
>  	struct xfs_ail	*ailp = mp->m_ail;
>  
>  	kthread_stop(ailp->ail_task);
> -	kmem_free(ailp);
> +	kfree(ailp);
>  }
> -- 
> 2.23.0
> 



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux