LCOV - code coverage report
Current view: top level - fs/xfs - kmem.h (source / functions) Hit Total Coverage
Test: fstests of 6.5.0-rc4-xfsa @ Mon Jul 31 20:08:27 PDT 2023 Lines: 18 19 94.7 %
Date: 2023-07-31 20:08:27 Functions: 2 2 100.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : /*
       3             :  * Copyright (c) 2000-2005 Silicon Graphics, Inc.
       4             :  * All Rights Reserved.
       5             :  */
       6             : #ifndef __XFS_SUPPORT_KMEM_H__
       7             : #define __XFS_SUPPORT_KMEM_H__
       8             : 
       9             : #include <linux/slab.h>
      10             : #include <linux/sched.h>
      11             : #include <linux/mm.h>
      12             : #include <linux/vmalloc.h>
      13             : 
      14             : /*
      15             :  * General memory allocation interfaces
      16             :  */
      17             : 
      18             : typedef unsigned __bitwise xfs_km_flags_t;
      19             : #define KM_NOFS         ((__force xfs_km_flags_t)0x0004u)
      20             : #define KM_MAYFAIL      ((__force xfs_km_flags_t)0x0008u)
      21             : #define KM_ZERO         ((__force xfs_km_flags_t)0x0010u)
      22             : #define KM_NOLOCKDEP    ((__force xfs_km_flags_t)0x0020u)
      23             : 
      24             : /*
      25             :  * We use a special process flag to avoid recursive callbacks into
      26             :  * the filesystem during transactions.  We will also issue our own
      27             :  * warnings, so we explicitly skip any generic ones (silly of us).
      28             :  */
      29             : static inline gfp_t
      30  2553466812 : kmem_flags_convert(xfs_km_flags_t flags)
      31             : {
      32  2553466812 :         gfp_t   lflags;
      33             : 
      34  2553466812 :         BUG_ON(flags & ~(KM_NOFS | KM_MAYFAIL | KM_ZERO | KM_NOLOCKDEP));
      35             : 
      36  2553466812 :         lflags = GFP_KERNEL | __GFP_NOWARN;
      37  2553466812 :         if (flags & KM_NOFS)
      38  1339324671 :                 lflags &= ~__GFP_FS;
      39             : 
      40             :         /*
      41             :          * Default page/slab allocator behavior is to retry for ever
      42             :          * for small allocations. We can override this behavior by using
      43             :          * __GFP_RETRY_MAYFAIL which will tell the allocator to retry as long
      44             :          * as it is feasible but rather fail than retry forever for all
      45             :          * request sizes.
      46             :          */
      47  2553466812 :         if (flags & KM_MAYFAIL)
      48   914425593 :                 lflags |= __GFP_RETRY_MAYFAIL;
      49             : 
      50  2553466812 :         if (flags & KM_ZERO)
      51  1330041176 :                 lflags |= __GFP_ZERO;
      52             : 
      53  2553466812 :         if (flags & KM_NOLOCKDEP)
      54             :                 lflags |= __GFP_NOLOCKDEP;
      55             : 
      56  2553466812 :         return lflags;
      57             : }
      58             : 
      59             : extern void *kmem_alloc(size_t, xfs_km_flags_t);
      60             : static inline void  kmem_free(const void *ptr)
      61             : {
      62 17734410889 :         kvfree(ptr);
      63  1125765413 : }
      64             : 
      65             : 
      66             : static inline void *
      67             : kmem_zalloc(size_t size, xfs_km_flags_t flags)
      68             : {
      69  1288369592 :         return kmem_alloc(size, flags | KM_ZERO);
      70             : }
      71             : 
      72             : /*
      73             :  * Zone interfaces
      74             :  */
      75             : static inline struct page *
      76   128781775 : kmem_to_page(void *addr)
      77             : {
      78   128781775 :         if (is_vmalloc_addr(addr))
      79           0 :                 return vmalloc_to_page(addr);
      80   128783133 :         return virt_to_page(addr);
      81             : }
      82             : 
      83             : #endif /* __XFS_SUPPORT_KMEM_H__ */

Generated by: LCOV version 1.14