LCOV - code coverage report
Current view: top level - fs/xfs/libxfs - xfs_ialloc.h (source / functions) Hit Total Coverage
Test: fstests of 6.5.0-rc4-xfsx @ Mon Jul 31 20:08:34 PDT 2023 Lines: 2 2 100.0 %
Date: 2023-07-31 20:08:34 Functions: 1 1 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_IALLOC_H__
       7             : #define __XFS_IALLOC_H__
       8             : 
       9             : struct xfs_buf;
      10             : struct xfs_dinode;
      11             : struct xfs_imap;
      12             : struct xfs_mount;
      13             : struct xfs_trans;
      14             : struct xfs_btree_cur;
      15             : struct xfs_perag;
      16             : 
      17             : /* Move inodes in clusters of this size */
      18             : #define XFS_INODE_BIG_CLUSTER_SIZE      8192
      19             : 
      20             : struct xfs_icluster {
      21             :         bool            deleted;        /* record is deleted */
      22             :         xfs_ino_t       first_ino;      /* first inode number */
      23             :         uint64_t        alloc;          /* inode phys. allocation bitmap for
      24             :                                          * sparse chunks */
      25             : };
      26             : 
      27             : /*
      28             :  * Make an inode pointer out of the buffer/offset.
      29             :  */
      30             : static inline struct xfs_dinode *
      31    71847665 : xfs_make_iptr(struct xfs_mount *mp, struct xfs_buf *b, int o)
      32             : {
      33    71847665 :         return xfs_buf_offset(b, o << (mp)->m_sb.sb_inodelog);
      34             : }
      35             : 
      36             : /*
      37             :  * Allocate an inode on disk.  Mode is used to tell whether the new inode will
      38             :  * need space, and whether it is a directory.
      39             :  */
      40             : int xfs_dialloc(struct xfs_trans **tpp, struct xfs_inode *dp, umode_t mode,
      41             :                 xfs_ino_t *new_ino);
      42             : 
      43             : int xfs_difree(struct xfs_trans *tp, struct xfs_perag *pag,
      44             :                 xfs_ino_t ino, struct xfs_icluster *ifree);
      45             : 
      46             : /*
      47             :  * Return the location of the inode in imap, for mapping it into a buffer.
      48             :  */
      49             : int
      50             : xfs_imap(
      51             :         struct xfs_perag *pag,
      52             :         struct xfs_trans *tp,           /* transaction pointer */
      53             :         xfs_ino_t       ino,            /* inode to locate */
      54             :         struct xfs_imap *imap,          /* location map structure */
      55             :         uint            flags);         /* flags for inode btree lookup */
      56             : 
      57             : /*
      58             :  * Log specified fields for the ag hdr (inode section)
      59             :  */
      60             : void
      61             : xfs_ialloc_log_agi(
      62             :         struct xfs_trans *tp,           /* transaction pointer */
      63             :         struct xfs_buf  *bp,            /* allocation group header buffer */
      64             :         uint32_t        fields);        /* bitmask of fields to log */
      65             : 
      66             : int xfs_read_agi(struct xfs_perag *pag, struct xfs_trans *tp,
      67             :                 struct xfs_buf **agibpp);
      68             : int xfs_ialloc_read_agi(struct xfs_perag *pag, struct xfs_trans *tp,
      69             :                 struct xfs_buf **agibpp);
      70             : 
      71             : /*
      72             :  * Lookup a record by ino in the btree given by cur.
      73             :  */
      74             : int xfs_inobt_lookup(struct xfs_btree_cur *cur, xfs_agino_t ino,
      75             :                 xfs_lookup_t dir, int *stat);
      76             : 
      77             : /*
      78             :  * Get the data from the pointed-to record.
      79             :  */
      80             : int xfs_inobt_get_rec(struct xfs_btree_cur *cur,
      81             :                 xfs_inobt_rec_incore_t *rec, int *stat);
      82             : uint8_t xfs_inobt_rec_freecount(const struct xfs_inobt_rec_incore *irec);
      83             : 
      84             : /*
      85             :  * Inode chunk initialisation routine
      86             :  */
      87             : int xfs_ialloc_inode_init(struct xfs_mount *mp, struct xfs_trans *tp,
      88             :                           struct list_head *buffer_list, int icount,
      89             :                           xfs_agnumber_t agno, xfs_agblock_t agbno,
      90             :                           xfs_agblock_t length, unsigned int gen);
      91             : 
      92             : 
      93             : union xfs_btree_rec;
      94             : void xfs_inobt_btrec_to_irec(struct xfs_mount *mp,
      95             :                 const union xfs_btree_rec *rec,
      96             :                 struct xfs_inobt_rec_incore *irec);
      97             : xfs_failaddr_t xfs_inobt_check_perag_irec(struct xfs_perag *pag,
      98             :                 const struct xfs_inobt_rec_incore *irec);
      99             : xfs_failaddr_t xfs_inobt_check_irec(struct xfs_btree_cur *cur,
     100             :                 const struct xfs_inobt_rec_incore *irec);
     101             : int xfs_ialloc_has_inodes_at_extent(struct xfs_btree_cur *cur,
     102             :                 xfs_agblock_t bno, xfs_extlen_t len,
     103             :                 enum xbtree_recpacking *outcome);
     104             : int xfs_ialloc_count_inodes(struct xfs_btree_cur *cur, xfs_agino_t *count,
     105             :                 xfs_agino_t *freecount);
     106             : int xfs_inobt_insert_rec(struct xfs_btree_cur *cur, uint16_t holemask,
     107             :                 uint8_t count, int32_t freecount, xfs_inofree_t free,
     108             :                 int *stat);
     109             : 
     110             : int xfs_ialloc_cluster_alignment(struct xfs_mount *mp);
     111             : void xfs_ialloc_setup_geometry(struct xfs_mount *mp);
     112             : xfs_ino_t xfs_ialloc_calc_rootino(struct xfs_mount *mp, int sunit);
     113             : 
     114             : int xfs_ialloc_check_shrink(struct xfs_perag *pag, struct xfs_trans *tp,
     115             :                 struct xfs_buf *agibp, xfs_agblock_t new_length);
     116             : 
     117             : #endif  /* __XFS_IALLOC_H__ */

Generated by: LCOV version 1.14