]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blob - libxfs/xfs_ialloc.h
xfs: get rid of xfs_dir_ialloc()
[thirdparty/xfsprogs-dev.git] / libxfs / xfs_ialloc.h
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
16 /* Move inodes in clusters of this size */
17 #define XFS_INODE_BIG_CLUSTER_SIZE 8192
18
19 struct xfs_icluster {
20 bool deleted; /* record is deleted */
21 xfs_ino_t first_ino; /* first inode number */
22 uint64_t alloc; /* inode phys. allocation bitmap for
23 * sparse chunks */
24 };
25
26 /*
27 * Make an inode pointer out of the buffer/offset.
28 */
29 static inline struct xfs_dinode *
30 xfs_make_iptr(struct xfs_mount *mp, struct xfs_buf *b, int o)
31 {
32 return xfs_buf_offset(b, o << (mp)->m_sb.sb_inodelog);
33 }
34
35 /*
36 * Allocate an inode on disk. Mode is used to tell whether the new inode will
37 * need space, and whether it is a directory.
38 */
39 int xfs_dialloc(struct xfs_trans **tpp, xfs_ino_t parent, umode_t mode,
40 xfs_ino_t *new_ino);
41
42 /*
43 * Free disk inode. Carefully avoids touching the incore inode, all
44 * manipulations incore are the caller's responsibility.
45 * The on-disk inode is not changed by this operation, only the
46 * btree (free inode mask) is changed.
47 */
48 int /* error */
49 xfs_difree(
50 struct xfs_trans *tp, /* transaction pointer */
51 xfs_ino_t inode, /* inode to be freed */
52 struct xfs_icluster *ifree); /* cluster info if deleted */
53
54 /*
55 * Return the location of the inode in imap, for mapping it into a buffer.
56 */
57 int
58 xfs_imap(
59 struct xfs_mount *mp, /* file system mount structure */
60 struct xfs_trans *tp, /* transaction pointer */
61 xfs_ino_t ino, /* inode to locate */
62 struct xfs_imap *imap, /* location map structure */
63 uint flags); /* flags for inode btree lookup */
64
65 /*
66 * Log specified fields for the ag hdr (inode section)
67 */
68 void
69 xfs_ialloc_log_agi(
70 struct xfs_trans *tp, /* transaction pointer */
71 struct xfs_buf *bp, /* allocation group header buffer */
72 int fields); /* bitmask of fields to log */
73
74 /*
75 * Read in the allocation group header (inode allocation section)
76 */
77 int /* error */
78 xfs_ialloc_read_agi(
79 struct xfs_mount *mp, /* file system mount structure */
80 struct xfs_trans *tp, /* transaction pointer */
81 xfs_agnumber_t agno, /* allocation group number */
82 struct xfs_buf **bpp); /* allocation group hdr buf */
83
84 /*
85 * Read in the allocation group header to initialise the per-ag data
86 * in the mount structure
87 */
88 int
89 xfs_ialloc_pagi_init(
90 struct xfs_mount *mp, /* file system mount structure */
91 struct xfs_trans *tp, /* transaction pointer */
92 xfs_agnumber_t agno); /* allocation group number */
93
94 /*
95 * Lookup a record by ino in the btree given by cur.
96 */
97 int xfs_inobt_lookup(struct xfs_btree_cur *cur, xfs_agino_t ino,
98 xfs_lookup_t dir, int *stat);
99
100 /*
101 * Get the data from the pointed-to record.
102 */
103 int xfs_inobt_get_rec(struct xfs_btree_cur *cur,
104 xfs_inobt_rec_incore_t *rec, int *stat);
105
106 /*
107 * Inode chunk initialisation routine
108 */
109 int xfs_ialloc_inode_init(struct xfs_mount *mp, struct xfs_trans *tp,
110 struct list_head *buffer_list, int icount,
111 xfs_agnumber_t agno, xfs_agblock_t agbno,
112 xfs_agblock_t length, unsigned int gen);
113
114 int xfs_read_agi(struct xfs_mount *mp, struct xfs_trans *tp,
115 xfs_agnumber_t agno, struct xfs_buf **bpp);
116
117 union xfs_btree_rec;
118 void xfs_inobt_btrec_to_irec(struct xfs_mount *mp, union xfs_btree_rec *rec,
119 struct xfs_inobt_rec_incore *irec);
120 int xfs_ialloc_has_inodes_at_extent(struct xfs_btree_cur *cur,
121 xfs_agblock_t bno, xfs_extlen_t len, bool *exists);
122 int xfs_ialloc_has_inode_record(struct xfs_btree_cur *cur, xfs_agino_t low,
123 xfs_agino_t high, bool *exists);
124 int xfs_ialloc_count_inodes(struct xfs_btree_cur *cur, xfs_agino_t *count,
125 xfs_agino_t *freecount);
126 int xfs_inobt_insert_rec(struct xfs_btree_cur *cur, uint16_t holemask,
127 uint8_t count, int32_t freecount, xfs_inofree_t free,
128 int *stat);
129
130 int xfs_ialloc_cluster_alignment(struct xfs_mount *mp);
131 void xfs_ialloc_setup_geometry(struct xfs_mount *mp);
132 xfs_ino_t xfs_ialloc_calc_rootino(struct xfs_mount *mp, int sunit);
133
134 #endif /* __XFS_IALLOC_H__ */