]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: Remove kmem_zone_alloc() usage
authorCarlos Maiolino <cmaiolino@redhat.com>
Tue, 15 Sep 2020 19:59:36 +0000 (15:59 -0400)
committerEric Sandeen <sandeen@sandeen.net>
Tue, 15 Sep 2020 19:59:36 +0000 (15:59 -0400)
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 <cmaiolino@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
[darrick: add a comment back in about nofail]
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
include/kmem.h
libxfs/kmem.c
libxfs/xfs_alloc.c
libxfs/xfs_bmap.c

index 498728601869680566243e4cf668425d3bf3d95d..9eb49d172c8d0c38c62df5ba4585a8084ce35dba 100644 (file)
@@ -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 *);
 
index 8827b858cb6f9823a861e556b49609ed299d7d28..76234ba138f5823de2d109ae9750d312b284b1e4 100644 (file)
@@ -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)
 {
index d8f317e5f0fda49b7f7e183717df8db101a68be8..93043d5927a37a325ea63988c91ad18bf6e9144a 100644 (file)
@@ -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;
index f4706b64f5fe3cc2c74c467e1b3acf94a8785633..08c30bd2e4073294a6c739a9da8bba2c4634bee6 100644 (file)
@@ -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)