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

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

 



On Fri, Nov 15, 2019 at 03:20:55PM +0100, Carlos Maiolino wrote:
> On Thu, Nov 14, 2019 at 01:00:00PM -0800, Darrick J. Wong wrote:
> > 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? ;)
> 
> /me Doesn't understand the reference but thinks Darrick is talking about
> Coccinelle fancy brand :P
> 
> /me is adept to conference-wear :D

http://coccinelle.lip6.fr/

The semantic patch thing, because understanding the weird spatch
language is slightly less infuriating than making tons of minor code
changes by hand. :P

> > 
> > > 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?
> 
> I honestly didn't see a big difference between both. Although, I didn't test
> much, other than some perf measurements while exercising some paths like for
> example xfs_dir_lookup().
> 
> I can't really say we will have any benefits in segmenting it by using kvfree()
> only where kmem_alloc_{large, io} is used, so I just relied on the comments
> above kvfree(), and well, we have an extra function call and a few extra
> instructions using kvfree(). So, even though it might be 'slightly' faster, this
> might build up on hot paths when handling millions of kfree().
> 
> But, at the end, I'd be lying if I say I spotted any significant difference.

<nod> Though the way I see it, kfree vs. kvfree is another bookkeepping
detail that xfs developers will have to keep straight.  But maybe that's
fine for the dozen or so specialized users of _io and _large?  What do
others think?

> Btw, Dave mentioned in a not so far future, kmalloc() requests will be
> guaranteed to be aligned, so, I wonder if we will be able to replace both
> kmem_alloc_large() and kmem_alloc_io() by simple calls to kvmalloc() which does
> the job of falling back to vmalloc() if kmalloc() fails?!

Sure, but I'll believe that when I see it.  And given that Christoph
Lameter seems totally opposed to the idea, I think we should keep our
silly wrapper for a while to see if they don't accidentally revert it or
something.

--D

> Not related to this patch itself, but to the whole talks about these helpers, I
> just thought worth to mention.
> 
> > 
> > --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
> > > 
> > 
> 
> -- 
> Carlos
> 




[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