This source file includes following definitions.
- xfs_preferred_iosize
- xfs_daddr_to_agno
- xfs_daddr_to_agbno
- xfs_perag_resv
1
2
3
4
5
6 #ifndef __XFS_MOUNT_H__
7 #define __XFS_MOUNT_H__
8
9 struct xlog;
10 struct xfs_inode;
11 struct xfs_mru_cache;
12 struct xfs_nameops;
13 struct xfs_ail;
14 struct xfs_quotainfo;
15 struct xfs_dir_ops;
16 struct xfs_da_geometry;
17
18
19 enum {
20 XFS_LOWSP_1_PCNT = 0,
21 XFS_LOWSP_2_PCNT,
22 XFS_LOWSP_3_PCNT,
23 XFS_LOWSP_4_PCNT,
24 XFS_LOWSP_5_PCNT,
25 XFS_LOWSP_MAX,
26 };
27
28
29
30
31
32
33
34 enum {
35 XFS_ERR_METADATA,
36 XFS_ERR_CLASS_MAX,
37 };
38 enum {
39 XFS_ERR_DEFAULT,
40 XFS_ERR_EIO,
41 XFS_ERR_ENOSPC,
42 XFS_ERR_ENODEV,
43 XFS_ERR_ERRNO_MAX,
44 };
45
46 #define XFS_ERR_RETRY_FOREVER -1
47
48
49
50
51
52
53
54 struct xfs_error_cfg {
55 struct xfs_kobj kobj;
56 int max_retries;
57 long retry_timeout;
58 };
59
60 typedef struct xfs_mount {
61 struct super_block *m_super;
62 xfs_tid_t m_tid;
63
64
65
66
67
68 uint8_t m_fs_checked;
69 uint8_t m_fs_sick;
70
71
72
73
74 uint8_t m_rt_checked;
75 uint8_t m_rt_sick;
76
77 struct xfs_ail *m_ail;
78
79 struct xfs_sb m_sb;
80 spinlock_t m_sb_lock;
81 struct percpu_counter m_icount;
82 struct percpu_counter m_ifree;
83 struct percpu_counter m_fdblocks;
84
85
86
87
88
89 struct percpu_counter m_delalloc_blks;
90
91 struct xfs_buf *m_sb_bp;
92 char *m_fsname;
93 int m_fsname_len;
94 char *m_rtname;
95 char *m_logname;
96 int m_bsize;
97 xfs_agnumber_t m_agfrotor;
98 xfs_agnumber_t m_agirotor;
99 spinlock_t m_agirotor_lock;
100 xfs_agnumber_t m_maxagi;
101 uint m_readio_log;
102 uint m_readio_blocks;
103 uint m_writeio_log;
104 uint m_writeio_blocks;
105 struct xfs_da_geometry *m_dir_geo;
106 struct xfs_da_geometry *m_attr_geo;
107 struct xlog *m_log;
108 struct xfs_ino_geometry m_ino_geo;
109 int m_logbufs;
110 int m_logbsize;
111 uint m_rsumlevels;
112 uint m_rsumsize;
113
114
115
116
117
118
119 uint8_t *m_rsum_cache;
120 struct xfs_inode *m_rbmip;
121 struct xfs_inode *m_rsumip;
122 struct xfs_inode *m_rootip;
123 struct xfs_quotainfo *m_quotainfo;
124 xfs_buftarg_t *m_ddev_targp;
125 xfs_buftarg_t *m_logdev_targp;
126 xfs_buftarg_t *m_rtdev_targp;
127 uint8_t m_blkbit_log;
128 uint8_t m_blkbb_log;
129 uint8_t m_agno_log;
130 uint m_blockmask;
131 uint m_blockwsize;
132 uint m_blockwmask;
133 uint m_alloc_mxr[2];
134 uint m_alloc_mnr[2];
135 uint m_bmap_dmxr[2];
136 uint m_bmap_dmnr[2];
137 uint m_rmap_mxr[2];
138 uint m_rmap_mnr[2];
139 uint m_refc_mxr[2];
140 uint m_refc_mnr[2];
141 uint m_ag_maxlevels;
142 uint m_bm_maxlevels[2];
143 uint m_rmap_maxlevels;
144 uint m_refc_maxlevels;
145 xfs_extlen_t m_ag_prealloc_blocks;
146 uint m_alloc_set_aside;
147 uint m_ag_max_usable;
148 struct radix_tree_root m_perag_tree;
149 spinlock_t m_perag_lock;
150 struct mutex m_growlock;
151 int m_fixedfsid[2];
152 uint64_t m_flags;
153 bool m_finobt_nores;
154 uint m_qflags;
155 struct xfs_trans_resv m_resv;
156 uint64_t m_resblks;
157 uint64_t m_resblks_avail;
158 uint64_t m_resblks_save;
159 int m_dalign;
160 int m_swidth;
161 uint8_t m_sectbb_log;
162 const struct xfs_nameops *m_dirnameops;
163 const struct xfs_dir_ops *m_dir_inode_ops;
164 const struct xfs_dir_ops *m_nondir_inode_ops;
165 uint m_chsize;
166 atomic_t m_active_trans;
167 struct xfs_mru_cache *m_filestream;
168 struct delayed_work m_reclaim_work;
169 struct delayed_work m_eofblocks_work;
170
171 struct delayed_work m_cowblocks_work;
172
173 bool m_update_sb;
174 int64_t m_low_space[XFS_LOWSP_MAX];
175
176 struct xfs_kobj m_kobj;
177 struct xfs_kobj m_error_kobj;
178 struct xfs_kobj m_error_meta_kobj;
179 struct xfs_error_cfg m_error_cfg[XFS_ERR_CLASS_MAX][XFS_ERR_ERRNO_MAX];
180 struct xstats m_stats;
181
182 struct workqueue_struct *m_buf_workqueue;
183 struct workqueue_struct *m_unwritten_workqueue;
184 struct workqueue_struct *m_cil_workqueue;
185 struct workqueue_struct *m_reclaim_workqueue;
186 struct workqueue_struct *m_eofblocks_workqueue;
187 struct workqueue_struct *m_sync_workqueue;
188
189
190
191
192
193
194
195
196
197
198 uint32_t m_generation;
199
200 bool m_always_cow;
201 bool m_fail_unmount;
202 #ifdef DEBUG
203
204
205
206
207
208 unsigned int *m_errortag;
209 struct xfs_kobj m_errortag_kobj;
210 #endif
211 } xfs_mount_t;
212
213 #define M_IGEO(mp) (&(mp)->m_ino_geo)
214
215
216
217
218 #define XFS_MOUNT_WSYNC (1ULL << 0)
219
220
221 #define XFS_MOUNT_UNMOUNTING (1ULL << 1)
222 #define XFS_MOUNT_WAS_CLEAN (1ULL << 3)
223 #define XFS_MOUNT_FS_SHUTDOWN (1ULL << 4)
224
225
226 #define XFS_MOUNT_DISCARD (1ULL << 5)
227 #define XFS_MOUNT_NOALIGN (1ULL << 7)
228
229 #define XFS_MOUNT_ATTR2 (1ULL << 8)
230 #define XFS_MOUNT_GRPID (1ULL << 9)
231 #define XFS_MOUNT_NORECOVERY (1ULL << 10)
232 #define XFS_MOUNT_DFLT_IOSIZE (1ULL << 12)
233 #define XFS_MOUNT_SMALL_INUMS (1ULL << 14)
234 #define XFS_MOUNT_32BITINODES (1ULL << 15)
235 #define XFS_MOUNT_NOUUID (1ULL << 16)
236 #define XFS_MOUNT_IKEEP (1ULL << 18)
237 #define XFS_MOUNT_SWALLOC (1ULL << 19)
238
239 #define XFS_MOUNT_RDONLY (1ULL << 20)
240 #define XFS_MOUNT_DIRSYNC (1ULL << 21)
241 #define XFS_MOUNT_COMPAT_IOSIZE (1ULL << 22)
242
243 #define XFS_MOUNT_FILESTREAMS (1ULL << 24)
244
245 #define XFS_MOUNT_NOATTR2 (1ULL << 25)
246
247 #define XFS_MOUNT_DAX (1ULL << 62)
248
249
250
251
252
253 #define XFS_READIO_LOG_LARGE 16
254 #define XFS_WRITEIO_LOG_LARGE 16
255
256
257
258
259
260 #define XFS_MAX_IO_LOG 30
261 #define XFS_MIN_IO_LOG PAGE_SHIFT
262
263
264
265
266
267 #define XFS_WSYNC_READIO_LOG 15
268 #define XFS_WSYNC_WRITEIO_LOG 14
269
270
271
272
273
274
275
276
277
278
279
280
281
282 static inline unsigned long
283 xfs_preferred_iosize(xfs_mount_t *mp)
284 {
285 if (mp->m_flags & XFS_MOUNT_COMPAT_IOSIZE)
286 return PAGE_SIZE;
287 return (mp->m_swidth ?
288 (mp->m_swidth << mp->m_sb.sb_blocklog) :
289 ((mp->m_flags & XFS_MOUNT_DFLT_IOSIZE) ?
290 (1 << (int)max(mp->m_readio_log, mp->m_writeio_log)) :
291 PAGE_SIZE));
292 }
293
294 #define XFS_LAST_UNMOUNT_WAS_CLEAN(mp) \
295 ((mp)->m_flags & XFS_MOUNT_WAS_CLEAN)
296 #define XFS_FORCED_SHUTDOWN(mp) ((mp)->m_flags & XFS_MOUNT_FS_SHUTDOWN)
297 void xfs_do_force_shutdown(struct xfs_mount *mp, int flags, char *fname,
298 int lnnum);
299 #define xfs_force_shutdown(m,f) \
300 xfs_do_force_shutdown(m, f, __FILE__, __LINE__)
301
302 #define SHUTDOWN_META_IO_ERROR 0x0001
303 #define SHUTDOWN_LOG_IO_ERROR 0x0002
304 #define SHUTDOWN_FORCE_UMOUNT 0x0004
305 #define SHUTDOWN_CORRUPT_INCORE 0x0008
306 #define SHUTDOWN_REMOTE_REQ 0x0010
307 #define SHUTDOWN_DEVICE_REQ 0x0020
308
309
310
311
312 #define XFS_MFSI_QUIET 0x40
313
314 static inline xfs_agnumber_t
315 xfs_daddr_to_agno(struct xfs_mount *mp, xfs_daddr_t d)
316 {
317 xfs_rfsblock_t ld = XFS_BB_TO_FSBT(mp, d);
318 do_div(ld, mp->m_sb.sb_agblocks);
319 return (xfs_agnumber_t) ld;
320 }
321
322 static inline xfs_agblock_t
323 xfs_daddr_to_agbno(struct xfs_mount *mp, xfs_daddr_t d)
324 {
325 xfs_rfsblock_t ld = XFS_BB_TO_FSBT(mp, d);
326 return (xfs_agblock_t) do_div(ld, mp->m_sb.sb_agblocks);
327 }
328
329
330 struct xfs_ag_resv {
331
332 xfs_extlen_t ar_orig_reserved;
333
334 xfs_extlen_t ar_reserved;
335
336 xfs_extlen_t ar_asked;
337 };
338
339
340
341
342
343 typedef struct xfs_perag {
344 struct xfs_mount *pag_mount;
345 xfs_agnumber_t pag_agno;
346 atomic_t pag_ref;
347 char pagf_init;
348 char pagi_init;
349 char pagf_metadata;
350 char pagi_inodeok;
351 uint8_t pagf_levels[XFS_BTNUM_AGF];
352
353 bool pagf_agflreset;
354 uint32_t pagf_flcount;
355 xfs_extlen_t pagf_freeblks;
356 xfs_extlen_t pagf_longest;
357 uint32_t pagf_btreeblks;
358 xfs_agino_t pagi_freecount;
359 xfs_agino_t pagi_count;
360
361
362
363
364
365
366 xfs_agino_t pagl_pagino;
367 xfs_agino_t pagl_leftrec;
368 xfs_agino_t pagl_rightrec;
369
370
371
372
373
374 uint16_t pag_checked;
375 uint16_t pag_sick;
376 spinlock_t pag_state_lock;
377
378 spinlock_t pagb_lock;
379 struct rb_root pagb_tree;
380 unsigned int pagb_gen;
381 wait_queue_head_t pagb_wait;
382
383 atomic_t pagf_fstrms;
384
385 spinlock_t pag_ici_lock;
386 struct radix_tree_root pag_ici_root;
387 int pag_ici_reclaimable;
388 struct mutex pag_ici_reclaim_lock;
389 unsigned long pag_ici_reclaim_cursor;
390
391
392 spinlock_t pag_buf_lock;
393 struct rhashtable pag_buf_hash;
394
395
396 struct rcu_head rcu_head;
397 int pagb_count;
398
399
400 struct xfs_ag_resv pag_meta_resv;
401
402 struct xfs_ag_resv pag_rmapbt_resv;
403
404
405 uint8_t pagf_refcount_level;
406
407
408
409
410
411
412 struct rhashtable pagi_unlinked_hash;
413 } xfs_perag_t;
414
415 static inline struct xfs_ag_resv *
416 xfs_perag_resv(
417 struct xfs_perag *pag,
418 enum xfs_ag_resv_type type)
419 {
420 switch (type) {
421 case XFS_AG_RESV_METADATA:
422 return &pag->pag_meta_resv;
423 case XFS_AG_RESV_RMAPBT:
424 return &pag->pag_rmapbt_resv;
425 default:
426 return NULL;
427 }
428 }
429
430 int xfs_buf_hash_init(xfs_perag_t *pag);
431 void xfs_buf_hash_destroy(xfs_perag_t *pag);
432
433 extern void xfs_uuid_table_free(void);
434 extern int xfs_log_sbcount(xfs_mount_t *);
435 extern uint64_t xfs_default_resblks(xfs_mount_t *mp);
436 extern int xfs_mountfs(xfs_mount_t *mp);
437 extern int xfs_initialize_perag(xfs_mount_t *mp, xfs_agnumber_t agcount,
438 xfs_agnumber_t *maxagi);
439 extern void xfs_unmountfs(xfs_mount_t *);
440
441 extern int xfs_mod_icount(struct xfs_mount *mp, int64_t delta);
442 extern int xfs_mod_ifree(struct xfs_mount *mp, int64_t delta);
443 extern int xfs_mod_fdblocks(struct xfs_mount *mp, int64_t delta,
444 bool reserved);
445 extern int xfs_mod_frextents(struct xfs_mount *mp, int64_t delta);
446
447 extern struct xfs_buf *xfs_getsb(xfs_mount_t *);
448 extern int xfs_readsb(xfs_mount_t *, int);
449 extern void xfs_freesb(xfs_mount_t *);
450 extern bool xfs_fs_writable(struct xfs_mount *mp, int level);
451 extern int xfs_sb_validate_fsb_count(struct xfs_sb *, uint64_t);
452
453 extern int xfs_dev_is_read_only(struct xfs_mount *, char *);
454
455 extern void xfs_set_low_space_thresholds(struct xfs_mount *);
456
457 int xfs_zero_extent(struct xfs_inode *ip, xfs_fsblock_t start_fsb,
458 xfs_off_t count_fsb);
459
460 struct xfs_error_cfg * xfs_error_get_cfg(struct xfs_mount *mp,
461 int error_class, int error);
462 void xfs_force_summary_recalc(struct xfs_mount *mp);
463 void xfs_mod_delalloc(struct xfs_mount *mp, int64_t delta);
464
465 #endif