LCOV - code coverage report
Current view: top level - fs/xfs - xfs_linux.h (source / functions) Hit Total Coverage
Test: fstests of 6.5.0-rc3-djwx @ Mon Jul 31 20:08:22 PDT 2023 Lines: 15 15 100.0 %
Date: 2023-07-31 20:08:22 Functions: 3 3 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             : 
      67             : #include <asm/page.h>
      68             : #include <asm/div64.h>
      69             : #include <asm/param.h>
      70             : #include <linux/uaccess.h>
      71             : #include <asm/byteorder.h>
      72             : #include <asm/unaligned.h>
      73             : 
      74             : #include "xfs_fs.h"
      75             : #include "xfs_stats.h"
      76             : #include "xfs_sysctl.h"
      77             : #include "xfs_iops.h"
      78             : #include "xfs_aops.h"
      79             : #include "xfs_super.h"
      80             : #include "xfs_cksum.h"
      81             : #include "xfs_buf.h"
      82             : #include "xfs_message.h"
      83             : #include "xfs_drain.h"
      84             : 
      85             : #ifdef __BIG_ENDIAN
      86             : #define XFS_NATIVE_HOST 1
      87             : #else
      88             : #undef XFS_NATIVE_HOST
      89             : #endif
      90             : 
      91             : #define irix_sgid_inherit       xfs_params.sgid_inherit.val
      92             : #define irix_symlink_mode       xfs_params.symlink_mode.val
      93             : #define xfs_panic_mask          xfs_params.panic_mask.val
      94             : #define xfs_error_level         xfs_params.error_level.val
      95             : #define xfs_syncd_centisecs     xfs_params.syncd_timer.val
      96             : #define xfs_stats_clear         xfs_params.stats_clear.val
      97             : #define xfs_inherit_sync        xfs_params.inherit_sync.val
      98             : #define xfs_inherit_nodump      xfs_params.inherit_nodump.val
      99             : #define xfs_inherit_noatime     xfs_params.inherit_noatim.val
     100             : #define xfs_inherit_nosymlinks  xfs_params.inherit_nosym.val
     101             : #define xfs_rotorstep           xfs_params.rotorstep.val
     102             : #define xfs_inherit_nodefrag    xfs_params.inherit_nodfrg.val
     103             : #define xfs_fstrm_centisecs     xfs_params.fstrm_timer.val
     104             : #define xfs_blockgc_secs        xfs_params.blockgc_timer.val
     105             : 
     106             : #define current_cpu()           (raw_smp_processor_id())
     107             : #define current_set_flags_nested(sp, f)         \
     108             :                 (*(sp) = current->flags, current->flags |= (f))
     109             : #define current_restore_flags_nested(sp, f)     \
     110             :                 (current->flags = ((current->flags & ~(f)) | (*(sp) & (f))))
     111             : 
     112             : #define NBBY            8               /* number of bits per byte */
     113             : 
     114             : /*
     115             :  * Size of block device i/o is parameterized here.
     116             :  * Currently the system supports page-sized i/o.
     117             :  */
     118             : #define BLKDEV_IOSHIFT          PAGE_SHIFT
     119             : #define BLKDEV_IOSIZE           (1<<BLKDEV_IOSHIFT)
     120             : /* number of BB's per block device block */
     121             : #define BLKDEV_BB               BTOBB(BLKDEV_IOSIZE)
     122             : 
     123             : #define ENOATTR         ENODATA         /* Attribute not found */
     124             : #define EWRONGFS        EINVAL          /* Mount with wrong filesystem type */
     125             : #define EFSCORRUPTED    EUCLEAN         /* Filesystem is corrupted */
     126             : #define EFSBADCRC       EBADMSG         /* Bad CRC detected */
     127             : 
     128             : #define __return_address __builtin_return_address(0)
     129             : 
     130             : /*
     131             :  * Return the address of a label.  Use barrier() so that the optimizer
     132             :  * won't reorder code to refactor the error jumpouts into a single
     133             :  * return, which throws off the reported address.
     134             :  */
     135             : #define __this_address  ({ __label__ __here; __here: barrier(); &&__here; })
     136             : 
     137             : #define XFS_PROJID_DEFAULT      0
     138             : 
     139             : #define howmany(x, y)   (((x)+((y)-1))/(y))
     140             : 
     141             : static inline void delay(long ticks)
     142             : {
     143     2759562 :         schedule_timeout_uninterruptible(ticks);
     144        8918 : }
     145             : 
     146             : /*
     147             :  * XFS wrapper structure for sysfs support. It depends on external data
     148             :  * structures and is embedded in various internal data structures to implement
     149             :  * the XFS sysfs object heirarchy. Define it here for broad access throughout
     150             :  * the codebase.
     151             :  */
     152             : struct xfs_kobj {
     153             :         struct kobject          kobject;
     154             :         struct completion       complete;
     155             : };
     156             : 
     157             : struct xstats {
     158             :         struct xfsstats __percpu        *xs_stats;
     159             :         struct xfs_kobj                 xs_kobj;
     160             : };
     161             : 
     162             : extern struct xstats xfsstats;
     163             : 
     164             : static inline dev_t xfs_to_linux_dev_t(xfs_dev_t dev)
     165             : {
     166   131276379 :         return MKDEV(sysv_major(dev) & 0x1ff, sysv_minor(dev));
     167             : }
     168             : 
     169             : static inline xfs_dev_t linux_to_xfs_dev_t(dev_t dev)
     170             : {
     171     6883891 :         return sysv_encode_dev(dev);
     172             : }
     173             : 
     174             : /*
     175             :  * Various platform dependent calls that don't fit anywhere else
     176             :  */
     177             : #define xfs_sort(a,n,s,fn)      sort(a,n,s,fn,NULL)
     178             : #define xfs_stack_trace()       dump_stack()
     179             : 
     180     1441045 : static inline uint64_t rounddown_64(uint64_t x, uint32_t y)
     181             : {
     182     1441045 :         do_div(x, y);
     183     1441045 :         return x * y;
     184             : }
     185             : 
     186    61488620 : static inline uint64_t roundup_64(uint64_t x, uint32_t y)
     187             : {
     188    61488620 :         x += y - 1;
     189    61488620 :         do_div(x, y);
     190    61488620 :         return x * y;
     191             : }
     192             : 
     193    44672807 : static inline uint64_t howmany_64(uint64_t x, uint32_t y)
     194             : {
     195    44672894 :         x += y - 1;
     196    44672894 :         do_div(x, y);
     197    44672894 :         return x;
     198             : }
     199             : 
     200             : int xfs_rw_bdev(struct block_device *bdev, sector_t sector, unsigned int count,
     201             :                 char *data, enum req_op op);
     202             : 
     203             : #define ASSERT_ALWAYS(expr)     \
     204             :         (likely(expr) ? (void)0 : assfail(NULL, #expr, __FILE__, __LINE__))
     205             : 
     206             : #ifdef DEBUG
     207             : #define ASSERT(expr)    \
     208             :         (likely(expr) ? (void)0 : assfail(NULL, #expr, __FILE__, __LINE__))
     209             : 
     210             : #else   /* !DEBUG */
     211             : 
     212             : #ifdef XFS_WARN
     213             : 
     214             : #define ASSERT(expr)    \
     215             :         (likely(expr) ? (void)0 : asswarn(NULL, #expr, __FILE__, __LINE__))
     216             : 
     217             : #else   /* !DEBUG && !XFS_WARN */
     218             : 
     219             : #define ASSERT(expr)            ((void)0)
     220             : 
     221             : #endif /* XFS_WARN */
     222             : #endif /* DEBUG */
     223             : 
     224             : #define XFS_IS_CORRUPT(mp, expr)        \
     225             :         (unlikely(expr) ? xfs_corruption_error(#expr, XFS_ERRLEVEL_LOW, (mp), \
     226             :                                                NULL, 0, __FILE__, __LINE__, \
     227             :                                                __this_address), \
     228             :                           true : false)
     229             : 
     230             : #define STATIC static noinline
     231             : 
     232             : #ifdef CONFIG_XFS_RT
     233             : 
     234             : /*
     235             :  * make sure we ignore the inode flag if the filesystem doesn't have a
     236             :  * configured realtime device.
     237             :  */
     238             : #define XFS_IS_REALTIME_INODE(ip)                       \
     239             :         (((ip)->i_diflags & XFS_DIFLAG_REALTIME) &&      \
     240             :          (ip)->i_mount->m_rtdev_targp)
     241             : #define XFS_IS_REALTIME_MOUNT(mp) ((mp)->m_rtdev_targp ? 1 : 0)
     242             : #else
     243             : #define XFS_IS_REALTIME_INODE(ip) (0)
     244             : #define XFS_IS_REALTIME_MOUNT(mp) (0)
     245             : #endif
     246             : 
     247             : /*
     248             :  * Starting in Linux 4.15, the %p (raw pointer value) printk modifier
     249             :  * prints a hashed version of the pointer to avoid leaking kernel
     250             :  * pointers into dmesg.  If we're trying to debug the kernel we want the
     251             :  * raw values, so override this behavior as best we can.
     252             :  */
     253             : #ifdef DEBUG
     254             : # define PTR_FMT "%px"
     255             : #else
     256             : # define PTR_FMT "%p"
     257             : #endif
     258             : 
     259             : #endif /* __XFS_LINUX__ */

Generated by: LCOV version 1.14