LCOV - code coverage report
Current view: top level - fs/xfs - xfs_linux.h (source / functions) Hit Total Coverage
Test: fstests of 6.5.0-rc4-xfsx @ Mon Jul 31 20:08:34 PDT 2023 Lines: 20 20 100.0 %
Date: 2023-07-31 20:08:34 Functions: 5 5 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_LINUX__
       7             : #define __XFS_LINUX__
       8             : 
       9             : #include <linux/types.h>
      10             : #include <linux/uuid.h>
      11             : 
      12             : /*
      13             :  * Kernel specific type declarations for XFS
      14             :  */
      15             : 
      16             : typedef __s64                   xfs_off_t;      /* <file offset> type */
      17             : typedef unsigned long long      xfs_ino_t;      /* <inode> type */
      18             : typedef __s64                   xfs_daddr_t;    /* <disk address> type */
      19             : typedef __u32                   xfs_dev_t;
      20             : typedef __u32                   xfs_nlink_t;
      21             : 
      22             : #include "xfs_types.h"
      23             : 
      24             : #include "kmem.h"
      25             : #include "mrlock.h"
      26             : 
      27             : #include <linux/semaphore.h>
      28             : #include <linux/mm.h>
      29             : #include <linux/sched/mm.h>
      30             : #include <linux/kernel.h>
      31             : #include <linux/blkdev.h>
      32             : #include <linux/slab.h>
      33             : #include <linux/crc32c.h>
      34             : #include <linux/module.h>
      35             : #include <linux/mutex.h>
      36             : #include <linux/file.h>
      37             : #include <linux/filelock.h>
      38             : #include <linux/swap.h>
      39             : #include <linux/errno.h>
      40             : #include <linux/sched/signal.h>
      41             : #include <linux/bitops.h>
      42             : #include <linux/major.h>
      43             : #include <linux/pagemap.h>
      44             : #include <linux/vfs.h>
      45             : #include <linux/seq_file.h>
      46             : #include <linux/init.h>
      47             : #include <linux/list.h>
      48             : #include <linux/proc_fs.h>
      49             : #include <linux/sort.h>
      50             : #include <linux/cpu.h>
      51             : #include <linux/notifier.h>
      52             : #include <linux/delay.h>
      53             : #include <linux/log2.h>
      54             : #include <linux/spinlock.h>
      55             : #include <linux/random.h>
      56             : #include <linux/ctype.h>
      57             : #include <linux/writeback.h>
      58             : #include <linux/capability.h>
      59             : #include <linux/kthread.h>
      60             : #include <linux/freezer.h>
      61             : #include <linux/list_sort.h>
      62             : #include <linux/ratelimit.h>
      63             : #include <linux/rhashtable.h>
      64             : #include <linux/xattr.h>
      65             : #include <linux/mnt_idmapping.h>
      66             : #include <linux/debugfs.h>
      67             : 
      68             : #include <asm/page.h>
      69             : #include <asm/div64.h>
      70             : #include <asm/param.h>
      71             : #include <linux/uaccess.h>
      72             : #include <asm/byteorder.h>
      73             : #include <asm/unaligned.h>
      74             : 
      75             : #include "xfs_fs.h"
      76             : #include "xfs_fs_staging.h"
      77             : #include "xfs_stats.h"
      78             : #include "xfs_sysctl.h"
      79             : #include "xfs_iops.h"
      80             : #include "xfs_aops.h"
      81             : #include "xfs_super.h"
      82             : #include "xfs_cksum.h"
      83             : #include "xfs_buf.h"
      84             : #include "xfs_message.h"
      85             : #include "xfs_drain.h"
      86             : #include "xfs_hooks.h"
      87             : 
      88             : #ifdef __BIG_ENDIAN
      89             : #define XFS_NATIVE_HOST 1
      90             : #else
      91             : #undef XFS_NATIVE_HOST
      92             : #endif
      93             : 
      94             : #define irix_sgid_inherit       xfs_params.sgid_inherit.val
      95             : #define irix_symlink_mode       xfs_params.symlink_mode.val
      96             : #define xfs_panic_mask          xfs_params.panic_mask.val
      97             : #define xfs_error_level         xfs_params.error_level.val
      98             : #define xfs_syncd_centisecs     xfs_params.syncd_timer.val
      99             : #define xfs_stats_clear         xfs_params.stats_clear.val
     100             : #define xfs_inherit_sync        xfs_params.inherit_sync.val
     101             : #define xfs_inherit_nodump      xfs_params.inherit_nodump.val
     102             : #define xfs_inherit_noatime     xfs_params.inherit_noatim.val
     103             : #define xfs_inherit_nosymlinks  xfs_params.inherit_nosym.val
     104             : #define xfs_rotorstep           xfs_params.rotorstep.val
     105             : #define xfs_inherit_nodefrag    xfs_params.inherit_nodfrg.val
     106             : #define xfs_fstrm_centisecs     xfs_params.fstrm_timer.val
     107             : #define xfs_blockgc_secs        xfs_params.blockgc_timer.val
     108             : 
     109             : #define current_cpu()           (raw_smp_processor_id())
     110             : #define current_set_flags_nested(sp, f)         \
     111             :                 (*(sp) = current->flags, current->flags |= (f))
     112             : #define current_restore_flags_nested(sp, f)     \
     113             :                 (current->flags = ((current->flags & ~(f)) | (*(sp) & (f))))
     114             : 
     115             : #define NBBY            8               /* number of bits per byte */
     116             : 
     117             : /*
     118             :  * Size of block device i/o is parameterized here.
     119             :  * Currently the system supports page-sized i/o.
     120             :  */
     121             : #define BLKDEV_IOSHIFT          PAGE_SHIFT
     122             : #define BLKDEV_IOSIZE           (1<<BLKDEV_IOSHIFT)
     123             : /* number of BB's per block device block */
     124             : #define BLKDEV_BB               BTOBB(BLKDEV_IOSIZE)
     125             : 
     126             : #define ENOATTR         ENODATA         /* Attribute not found */
     127             : #define EWRONGFS        EINVAL          /* Mount with wrong filesystem type */
     128             : #define EFSCORRUPTED    EUCLEAN         /* Filesystem is corrupted */
     129             : #define EFSBADCRC       EBADMSG         /* Bad CRC detected */
     130             : 
     131             : #define __return_address __builtin_return_address(0)
     132             : 
     133             : /*
     134             :  * Return the address of a label.  Use barrier() so that the optimizer
     135             :  * won't reorder code to refactor the error jumpouts into a single
     136             :  * return, which throws off the reported address.
     137             :  */
     138             : #define __this_address  ({ __label__ __here; __here: barrier(); &&__here; })
     139             : 
     140             : #define howmany(x, y)   (((x)+((y)-1))/(y))
     141             : 
     142             : static inline void delay(long ticks)
     143             : {
     144     2437783 :         schedule_timeout_uninterruptible(ticks);
     145       13120 : }
     146             : 
     147             : /*
     148             :  * XFS wrapper structure for sysfs support. It depends on external data
     149             :  * structures and is embedded in various internal data structures to implement
     150             :  * the XFS sysfs object heirarchy. Define it here for broad access throughout
     151             :  * the codebase.
     152             :  */
     153             : struct xfs_kobj {
     154             :         struct kobject          kobject;
     155             :         struct completion       complete;
     156             : };
     157             : 
     158             : struct xstats {
     159             :         struct xfsstats __percpu        *xs_stats;
     160             :         struct xfs_kobj                 xs_kobj;
     161             : };
     162             : 
     163             : extern struct xstats xfsstats;
     164             : 
     165             : static inline dev_t xfs_to_linux_dev_t(xfs_dev_t dev)
     166             : {
     167   124993801 :         return MKDEV(sysv_major(dev) & 0x1ff, sysv_minor(dev));
     168             : }
     169             : 
     170             : static inline xfs_dev_t linux_to_xfs_dev_t(dev_t dev)
     171             : {
     172    14314522 :         return sysv_encode_dev(dev);
     173             : }
     174             : 
     175             : /*
     176             :  * Various platform dependent calls that don't fit anywhere else
     177             :  */
     178             : #define xfs_sort(a,n,s,fn)      sort(a,n,s,fn,NULL)
     179             : #define xfs_stack_trace()       dump_stack()
     180             : 
     181   424457503 : static inline uint64_t rounddown_64(uint64_t x, uint32_t y)
     182             : {
     183   424457503 :         do_div(x, y);
     184   424457503 :         return x * y;
     185             : }
     186             : 
     187   162781986 : static inline uint64_t roundup_64(uint64_t x, uint32_t y)
     188             : {
     189   162781986 :         x += y - 1;
     190   162781986 :         do_div(x, y);
     191   162781986 :         return x * y;
     192             : }
     193             : 
     194    66103893 : static inline uint64_t howmany_64(uint64_t x, uint32_t y)
     195             : {
     196  2940245824 :         x += y - 1;
     197  2940245824 :         do_div(x, y);
     198  2940245824 :         return x;
     199             : }
     200             : 
     201    43449745 : static inline bool isaligned_64(uint64_t x, uint32_t y)
     202             : {
     203    43449745 :         return do_div(x, y) == 0;
     204             : }
     205             : 
     206             : /* If @b is a power of 2, return log2(b).  Else return -1. */
     207      133966 : static inline int8_t log2_if_power2(unsigned long b)
     208             : {
     209      267932 :         return is_power_of_2(b) ? ilog2(b) : -1;
     210             : }
     211             : 
     212             : /* If @b is a power of 2, return a mask of the lower bits, else return zero. */
     213             : static inline unsigned long long mask64_if_power2(unsigned long b)
     214             : {
     215      200950 :         return is_power_of_2(b) ? b - 1 : 0;
     216             : }
     217             : 
     218             : int xfs_rw_bdev(struct block_device *bdev, sector_t sector, unsigned int count,
     219             :                 char *data, enum req_op op);
     220             : 
     221             : #define ASSERT_ALWAYS(expr)     \
     222             :         (likely(expr) ? (void)0 : assfail(NULL, #expr, __FILE__, __LINE__))
     223             : 
     224             : #ifdef DEBUG
     225             : #define ASSERT(expr)    \
     226             :         (likely(expr) ? (void)0 : assfail(NULL, #expr, __FILE__, __LINE__))
     227             : 
     228             : #else   /* !DEBUG */
     229             : 
     230             : #ifdef XFS_WARN
     231             : 
     232             : #define ASSERT(expr)    \
     233             :         (likely(expr) ? (void)0 : asswarn(NULL, #expr, __FILE__, __LINE__))
     234             : 
     235             : #else   /* !DEBUG && !XFS_WARN */
     236             : 
     237             : #define ASSERT(expr)            ((void)0)
     238             : 
     239             : #endif /* XFS_WARN */
     240             : #endif /* DEBUG */
     241             : 
     242             : #define XFS_IS_CORRUPT(mp, expr)        \
     243             :         (unlikely(expr) ? xfs_corruption_error(#expr, XFS_ERRLEVEL_LOW, (mp), \
     244             :                                                NULL, 0, __FILE__, __LINE__, \
     245             :                                                __this_address), \
     246             :                           true : false)
     247             : 
     248             : #define STATIC static noinline
     249             : 
     250             : #ifdef CONFIG_XFS_RT
     251             : 
     252             : /*
     253             :  * make sure we ignore the inode flag if the filesystem doesn't have a
     254             :  * configured realtime device.
     255             :  */
     256             : #define XFS_IS_REALTIME_INODE(ip)                       \
     257             :         (((ip)->i_diflags & XFS_DIFLAG_REALTIME) &&      \
     258             :          (ip)->i_mount->m_rtdev_targp)
     259             : #define XFS_IS_REALTIME_MOUNT(mp) ((mp)->m_rtdev_targp ? 1 : 0)
     260             : #else
     261             : #define XFS_IS_REALTIME_INODE(ip) (0)
     262             : #define XFS_IS_REALTIME_MOUNT(mp) (0)
     263             : #endif
     264             : 
     265             : /*
     266             :  * Starting in Linux 4.15, the %p (raw pointer value) printk modifier
     267             :  * prints a hashed version of the pointer to avoid leaking kernel
     268             :  * pointers into dmesg.  If we're trying to debug the kernel we want the
     269             :  * raw values, so override this behavior as best we can.
     270             :  */
     271             : #ifdef DEBUG
     272             : # define PTR_FMT "%px"
     273             : #else
     274             : # define PTR_FMT "%p"
     275             : #endif
     276             : 
     277             : #endif /* __XFS_LINUX__ */

Generated by: LCOV version 1.14