1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#ifndef __XFS_RTALLOC_H__
19#define __XFS_RTALLOC_H__
20
21
22
23struct xfs_mount;
24struct xfs_trans;
25
26struct xfs_rtalloc_rec {
27 xfs_rtblock_t ar_startblock;
28 xfs_rtblock_t ar_blockcount;
29};
30
31typedef int (*xfs_rtalloc_query_range_fn)(
32 struct xfs_trans *tp,
33 struct xfs_rtalloc_rec *rec,
34 void *priv);
35
36#ifdef CONFIG_XFS_RT
37
38
39
40
41
42
43
44
45
46int
47xfs_rtallocate_extent(
48 struct xfs_trans *tp,
49 xfs_rtblock_t bno,
50 xfs_extlen_t minlen,
51 xfs_extlen_t maxlen,
52 xfs_extlen_t *len,
53 int wasdel,
54 xfs_extlen_t prod,
55 xfs_rtblock_t *rtblock);
56
57
58
59
60
61int
62xfs_rtfree_extent(
63 struct xfs_trans *tp,
64 xfs_rtblock_t bno,
65 xfs_extlen_t len);
66
67
68
69
70int
71xfs_rtmount_init(
72 struct xfs_mount *mp);
73void
74xfs_rtunmount_inodes(
75 struct xfs_mount *mp);
76
77
78
79
80
81int
82xfs_rtmount_inodes(
83 struct xfs_mount *mp);
84
85
86
87
88
89
90
91
92int
93xfs_rtpick_extent(
94 struct xfs_mount *mp,
95 struct xfs_trans *tp,
96 xfs_extlen_t len,
97 xfs_rtblock_t *pick);
98
99
100
101
102int
103xfs_growfs_rt(
104 struct xfs_mount *mp,
105 xfs_growfs_rt_t *in);
106
107
108
109
110int xfs_rtbuf_get(struct xfs_mount *mp, struct xfs_trans *tp,
111 xfs_rtblock_t block, int issum, struct xfs_buf **bpp);
112int xfs_rtcheck_range(struct xfs_mount *mp, struct xfs_trans *tp,
113 xfs_rtblock_t start, xfs_extlen_t len, int val,
114 xfs_rtblock_t *new, int *stat);
115int xfs_rtfind_back(struct xfs_mount *mp, struct xfs_trans *tp,
116 xfs_rtblock_t start, xfs_rtblock_t limit,
117 xfs_rtblock_t *rtblock);
118int xfs_rtfind_forw(struct xfs_mount *mp, struct xfs_trans *tp,
119 xfs_rtblock_t start, xfs_rtblock_t limit,
120 xfs_rtblock_t *rtblock);
121int xfs_rtmodify_range(struct xfs_mount *mp, struct xfs_trans *tp,
122 xfs_rtblock_t start, xfs_extlen_t len, int val);
123int xfs_rtmodify_summary_int(struct xfs_mount *mp, struct xfs_trans *tp,
124 int log, xfs_rtblock_t bbno, int delta,
125 xfs_buf_t **rbpp, xfs_fsblock_t *rsb,
126 xfs_suminfo_t *sum);
127int xfs_rtmodify_summary(struct xfs_mount *mp, struct xfs_trans *tp, int log,
128 xfs_rtblock_t bbno, int delta, xfs_buf_t **rbpp,
129 xfs_fsblock_t *rsb);
130int xfs_rtfree_range(struct xfs_mount *mp, struct xfs_trans *tp,
131 xfs_rtblock_t start, xfs_extlen_t len,
132 struct xfs_buf **rbpp, xfs_fsblock_t *rsb);
133int xfs_rtalloc_query_range(struct xfs_trans *tp,
134 struct xfs_rtalloc_rec *low_rec,
135 struct xfs_rtalloc_rec *high_rec,
136 xfs_rtalloc_query_range_fn fn,
137 void *priv);
138int xfs_rtalloc_query_all(struct xfs_trans *tp,
139 xfs_rtalloc_query_range_fn fn,
140 void *priv);
141#else
142# define xfs_rtallocate_extent(t,b,min,max,l,f,p,rb) (ENOSYS)
143# define xfs_rtfree_extent(t,b,l) (ENOSYS)
144# define xfs_rtpick_extent(m,t,l,rb) (ENOSYS)
145# define xfs_growfs_rt(mp,in) (ENOSYS)
146# define xfs_rtalloc_query_range(t,l,h,f,p) (ENOSYS)
147# define xfs_rtalloc_query_all(t,f,p) (ENOSYS)
148# define xfs_rtbuf_get(m,t,b,i,p) (ENOSYS)
149static inline int
150xfs_rtmount_init(
151 xfs_mount_t *mp)
152{
153 if (mp->m_sb.sb_rblocks == 0)
154 return 0;
155
156 xfs_warn(mp, "Not built with CONFIG_XFS_RT");
157 return -ENOSYS;
158}
159# define xfs_rtmount_inodes(m) (((mp)->m_sb.sb_rblocks == 0)? 0 : (ENOSYS))
160# define xfs_rtunmount_inodes(m)
161#endif
162
163#endif
164