From d7faa18a17389ad06b5c9fee3b194a18c6570c73 Mon Sep 17 00:00:00 2001 From: Carlos Maiolino Date: Tue, 15 Sep 2020 15:59:36 -0400 Subject: [PATCH] xfs: Remove kmem_zone_alloc() usage Source kernel commit: 3050bd0bfe706381c36e4b48bf4de465b0ab94f7 Use kmem_cache_alloc() directly. All kmem_zone_alloc() users pass 0 as flags, which are translated into: GFP_KERNEL | __GFP_NOWARN, and kmem_zone_alloc() loops forever until the allocation succeeds. We can use __GFP_NOFAIL to tell the allocator to loop forever rather than doing it ourself, and because the allocation will never fail, we do not need to use __GFP_NOWARN anymore. Hence, all callers can be converted to use GFP_KERNEL | __GFP_NOFAIL Signed-off-by: Carlos Maiolino Reviewed-by: Darrick J. Wong [darrick: add a comment back in about nofail] Signed-off-by: Darrick J. Wong Reviewed-by: Christoph Hellwig Reviewed-by: Dave Chinner Signed-off-by: Eric Sandeen --- include/kmem.h | 7 ++++++- libxfs/kmem.c | 6 +++--- libxfs/xfs_alloc.c | 3 ++- libxfs/xfs_bmap.c | 3 ++- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/include/kmem.h b/include/kmem.h index 498728601..9eb49d172 100644 --- a/include/kmem.h +++ b/include/kmem.h @@ -17,8 +17,13 @@ typedef struct kmem_zone { int allocated; /* debug: How many currently allocated */ } kmem_zone_t; +typedef unsigned int __bitwise gfp_t; + +#define GFP_KERNEL ((__force gfp_t)0) +#define __GFP_NOFAIL ((__force gfp_t)0) + extern kmem_zone_t *kmem_zone_init(int, char *); -extern void *kmem_zone_alloc(kmem_zone_t *, int); +extern void *kmem_cache_alloc(kmem_zone_t *, gfp_t); extern void *kmem_zone_zalloc(kmem_zone_t *, int); extern int kmem_zone_destroy(kmem_zone_t *); diff --git a/libxfs/kmem.c b/libxfs/kmem.c index 8827b858c..76234ba13 100644 --- a/libxfs/kmem.c +++ b/libxfs/kmem.c @@ -39,7 +39,7 @@ kmem_zone_destroy(kmem_zone_t *zone) } void * -kmem_zone_alloc(kmem_zone_t *zone, int flags) +kmem_cache_alloc(kmem_zone_t *zone, gfp_t flags) { void *ptr = malloc(zone->zone_unitsize); @@ -52,16 +52,16 @@ kmem_zone_alloc(kmem_zone_t *zone, int flags) zone->allocated++; return ptr; } + void * kmem_zone_zalloc(kmem_zone_t *zone, int flags) { - void *ptr = kmem_zone_alloc(zone, flags); + void *ptr = kmem_cache_alloc(zone, flags); memset(ptr, 0, zone->zone_unitsize); return ptr; } - void * kmem_alloc(size_t size, int flags) { diff --git a/libxfs/xfs_alloc.c b/libxfs/xfs_alloc.c index d8f317e5f..93043d592 100644 --- a/libxfs/xfs_alloc.c +++ b/libxfs/xfs_alloc.c @@ -2458,7 +2458,8 @@ xfs_defer_agfl_block( ASSERT(xfs_bmap_free_item_zone != NULL); ASSERT(oinfo != NULL); - new = kmem_zone_alloc(xfs_bmap_free_item_zone, 0); + new = kmem_cache_alloc(xfs_bmap_free_item_zone, + GFP_KERNEL | __GFP_NOFAIL); new->xefi_startblock = XFS_AGB_TO_FSB(mp, agno, agbno); new->xefi_blockcount = 1; new->xefi_oinfo = *oinfo; diff --git a/libxfs/xfs_bmap.c b/libxfs/xfs_bmap.c index f4706b64f..08c30bd2e 100644 --- a/libxfs/xfs_bmap.c +++ b/libxfs/xfs_bmap.c @@ -546,7 +546,8 @@ __xfs_bmap_add_free( #endif ASSERT(xfs_bmap_free_item_zone != NULL); - new = kmem_zone_alloc(xfs_bmap_free_item_zone, 0); + new = kmem_cache_alloc(xfs_bmap_free_item_zone, + GFP_KERNEL | __GFP_NOFAIL); new->xefi_startblock = bno; new->xefi_blockcount = (xfs_extlen_t)len; if (oinfo) -- 2.47.2