1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2000-2005 Silicon Graphics, Inc.
6 #ifndef __XFS_MOUNT_H__
7 #define __XFS_MOUNT_H__
14 struct xfs_da_geometry;
17 /* dynamic preallocation free space thresholds, 5% down to 1% */
30 * Error classes define the subsystem the configuration belongs to.
31 * Error numbers define the errors that are configurable.
45 #define XFS_ERR_RETRY_FOREVER -1
48 * Although retry_timeout is in jiffies which is normally an unsigned long,
49 * we limit the retry timeout to 86400 seconds, or one day. So even a
50 * signed 32-bit long is sufficient for a HZ value up to 24855. Making it
51 * signed lets us store the special "-1" value, meaning retry forever.
53 struct xfs_error_cfg {
56 long retry_timeout; /* in jiffies, -1 = infinite */
60 * The struct xfsmount layout is optimised to separate read-mostly variables
61 * from variables that are frequently modified. We put the read-mostly variables
62 * first, then place all the other variables at the end.
64 * Typically, read-mostly variables are those that are set at mount time and
65 * never changed again, or only change rarely as a result of things like sysfs
66 * knobs being tweaked.
68 typedef struct xfs_mount {
69 struct xfs_sb m_sb; /* copy of fs superblock */
70 struct super_block *m_super;
71 struct xfs_ail *m_ail; /* fs active log item list */
72 struct xfs_buf *m_sb_bp; /* buffer for superblock */
73 char *m_rtname; /* realtime device name */
74 char *m_logname; /* external log device name */
75 struct xfs_da_geometry *m_dir_geo; /* directory block geometry */
76 struct xfs_da_geometry *m_attr_geo; /* attribute block geometry */
77 struct xlog *m_log; /* log specific stuff */
78 struct xfs_inode *m_rbmip; /* pointer to bitmap inode */
79 struct xfs_inode *m_rsumip; /* pointer to summary inode */
80 struct xfs_inode *m_rootip; /* pointer to root directory */
81 struct xfs_quotainfo *m_quotainfo; /* disk quota information */
82 xfs_buftarg_t *m_ddev_targp; /* saves taking the address */
83 xfs_buftarg_t *m_logdev_targp;/* ptr to log device */
84 xfs_buftarg_t *m_rtdev_targp; /* ptr to rt device */
86 * Optional cache of rt summary level per bitmap block with the
87 * invariant that m_rsum_cache[bbno] <= the minimum i for which
88 * rsum[i][bbno] != 0. Reads and writes are serialized by the rsumip
91 uint8_t *m_rsum_cache;
92 struct xfs_mru_cache *m_filestream; /* per-mount filestream data */
93 struct workqueue_struct *m_buf_workqueue;
94 struct workqueue_struct *m_unwritten_workqueue;
95 struct workqueue_struct *m_cil_workqueue;
96 struct workqueue_struct *m_reclaim_workqueue;
97 struct workqueue_struct *m_gc_workqueue;
98 struct workqueue_struct *m_sync_workqueue;
100 int m_bsize; /* fs logical block size */
101 uint8_t m_blkbit_log; /* blocklog + NBBY */
102 uint8_t m_blkbb_log; /* blocklog - BBSHIFT */
103 uint8_t m_agno_log; /* log #ag's */
104 uint8_t m_sectbb_log; /* sectlog - BBSHIFT */
105 uint m_blockmask; /* sb_blocksize-1 */
106 uint m_blockwsize; /* sb_blocksize in words */
107 uint m_blockwmask; /* blockwsize-1 */
108 uint m_alloc_mxr[2]; /* max alloc btree records */
109 uint m_alloc_mnr[2]; /* min alloc btree records */
110 uint m_bmap_dmxr[2]; /* max bmap btree records */
111 uint m_bmap_dmnr[2]; /* min bmap btree records */
112 uint m_rmap_mxr[2]; /* max rmap btree records */
113 uint m_rmap_mnr[2]; /* min rmap btree records */
114 uint m_refc_mxr[2]; /* max refc btree records */
115 uint m_refc_mnr[2]; /* min refc btree records */
116 uint m_ag_maxlevels; /* XFS_AG_MAXLEVELS */
117 uint m_bm_maxlevels[2]; /* XFS_BM_MAXLEVELS */
118 uint m_rmap_maxlevels; /* max rmap btree levels */
119 uint m_refc_maxlevels; /* max refcount btree level */
120 xfs_extlen_t m_ag_prealloc_blocks; /* reserved ag blocks */
121 uint m_alloc_set_aside; /* space we can't use */
122 uint m_ag_max_usable; /* max space per AG */
123 int m_dalign; /* stripe unit */
124 int m_swidth; /* stripe width */
125 xfs_agnumber_t m_maxagi; /* highest inode alloc group */
126 uint m_allocsize_log;/* min write size log bytes */
127 uint m_allocsize_blocks; /* min write size blocks */
128 int m_logbufs; /* number of log buffers */
129 int m_logbsize; /* size of each log buffer */
130 uint m_rsumlevels; /* rt summary levels */
131 uint m_rsumsize; /* size of rt summary, bytes */
132 int m_fixedfsid[2]; /* unchanged for life of FS */
133 uint m_qflags; /* quota status flags */
134 uint64_t m_flags; /* global mount flags */
135 int64_t m_low_space[XFS_LOWSP_MAX];
136 struct xfs_ino_geometry m_ino_geo; /* inode geometry */
137 struct xfs_trans_resv m_resv; /* precomputed res values */
138 /* low free space thresholds */
141 bool m_finobt_nores; /* no per-AG finobt resv. */
142 bool m_update_sb; /* sb needs update in mount */
145 * Bitsets of per-fs metadata that have been checked and/or are sick.
146 * Callers must hold m_sb_lock to access these two fields.
148 uint8_t m_fs_checked;
151 * Bitsets of rt metadata that have been checked and/or are sick.
152 * Callers must hold m_sb_lock to access this field.
154 uint8_t m_rt_checked;
158 * End of read-mostly variables. Frequently written variables and locks
159 * should be placed below this comment from now on. The first variable
160 * here is marked as cacheline aligned so they it is separated from
161 * the read-mostly variables.
164 spinlock_t ____cacheline_aligned m_sb_lock; /* sb counter lock */
165 struct percpu_counter m_icount; /* allocated inodes counter */
166 struct percpu_counter m_ifree; /* free inodes counter */
167 struct percpu_counter m_fdblocks; /* free block counter */
169 * Count of data device blocks reserved for delayed allocations,
170 * including indlen blocks. Does not include allocated CoW staging
171 * extents or anything related to the rt device.
173 struct percpu_counter m_delalloc_blks;
175 * Global count of allocation btree blocks in use across all AGs. Only
176 * used when perag reservation is enabled. Helps prevent block
177 * reservation from attempting to reserve allocation btree blocks.
179 atomic64_t m_allocbt_blks;
181 struct radix_tree_root m_perag_tree; /* per-ag accounting info */
182 spinlock_t m_perag_lock; /* lock for m_perag_tree */
183 uint64_t m_resblks; /* total reserved blocks */
184 uint64_t m_resblks_avail;/* available reserved blocks */
185 uint64_t m_resblks_save; /* reserved blks @ remount,ro */
186 struct delayed_work m_reclaim_work; /* background inode reclaim */
187 struct xfs_kobj m_kobj;
188 struct xfs_kobj m_error_kobj;
189 struct xfs_kobj m_error_meta_kobj;
190 struct xfs_error_cfg m_error_cfg[XFS_ERR_CLASS_MAX][XFS_ERR_ERRNO_MAX];
191 struct xstats m_stats; /* per-fs stats */
192 xfs_agnumber_t m_agfrotor; /* last ag where space found */
193 xfs_agnumber_t m_agirotor; /* last ag dir inode alloced */
194 spinlock_t m_agirotor_lock;/* .. and lock protecting it */
197 * Workqueue item so that we can coalesce multiple inode flush attempts
198 * into a single flush.
200 struct work_struct m_flush_inodes_work;
203 * Generation of the filesysyem layout. This is incremented by each
204 * growfs, and used by the pNFS server to ensure the client updates
205 * its view of the block device once it gets a layout that might
206 * reference the newly added blocks. Does not need to be persistent
207 * as long as we only allow file system size increments, but if we
208 * ever support shrinks it would have to be persisted in addition
209 * to various other kinds of pain inflicted on the pNFS server.
211 uint32_t m_generation;
212 struct mutex m_growlock; /* growfs mutex */
216 * Frequency with which errors are injected. Replaces xfs_etest; the
217 * value stored in here is the inverse of the frequency with which the
218 * error triggers. 1 = always, 2 = half the time, etc.
220 unsigned int *m_errortag;
221 struct xfs_kobj m_errortag_kobj;
225 #define M_IGEO(mp) (&(mp)->m_ino_geo)
230 #define XFS_MOUNT_WSYNC (1ULL << 0) /* for nfs - all metadata ops
231 must be synchronous except
232 for space allocations */
233 #define XFS_MOUNT_UNMOUNTING (1ULL << 1) /* filesystem is unmounting */
234 #define XFS_MOUNT_WAS_CLEAN (1ULL << 3)
235 #define XFS_MOUNT_FS_SHUTDOWN (1ULL << 4) /* atomic stop of all filesystem
236 operations, typically for
237 disk errors in metadata */
238 #define XFS_MOUNT_DISCARD (1ULL << 5) /* discard unused blocks */
239 #define XFS_MOUNT_NOALIGN (1ULL << 7) /* turn off stripe alignment
241 #define XFS_MOUNT_ATTR2 (1ULL << 8) /* allow use of attr2 format */
242 #define XFS_MOUNT_GRPID (1ULL << 9) /* group-ID assigned from directory */
243 #define XFS_MOUNT_NORECOVERY (1ULL << 10) /* no recovery - dirty fs */
244 #define XFS_MOUNT_ALLOCSIZE (1ULL << 12) /* specified allocation size */
245 #define XFS_MOUNT_SMALL_INUMS (1ULL << 14) /* user wants 32bit inodes */
246 #define XFS_MOUNT_32BITINODES (1ULL << 15) /* inode32 allocator active */
247 #define XFS_MOUNT_NOUUID (1ULL << 16) /* ignore uuid during mount */
248 #define XFS_MOUNT_IKEEP (1ULL << 18) /* keep empty inode clusters*/
249 #define XFS_MOUNT_SWALLOC (1ULL << 19) /* turn on stripe width
251 #define XFS_MOUNT_RDONLY (1ULL << 20) /* read-only fs */
252 #define XFS_MOUNT_DIRSYNC (1ULL << 21) /* synchronous directory ops */
253 #define XFS_MOUNT_LARGEIO (1ULL << 22) /* report large preferred
254 * I/O size in stat() */
255 #define XFS_MOUNT_FILESTREAMS (1ULL << 24) /* enable the filestreams
257 #define XFS_MOUNT_NOATTR2 (1ULL << 25) /* disable use of attr2 format */
258 #define XFS_MOUNT_DAX_ALWAYS (1ULL << 26)
259 #define XFS_MOUNT_DAX_NEVER (1ULL << 27)
262 * Max and min values for mount-option defined I/O
263 * preallocation sizes.
265 #define XFS_MAX_IO_LOG 30 /* 1G */
266 #define XFS_MIN_IO_LOG PAGE_SHIFT
268 #define XFS_LAST_UNMOUNT_WAS_CLEAN(mp) \
269 ((mp)->m_flags & XFS_MOUNT_WAS_CLEAN)
270 #define XFS_FORCED_SHUTDOWN(mp) ((mp)->m_flags & XFS_MOUNT_FS_SHUTDOWN)
271 void xfs_do_force_shutdown(struct xfs_mount *mp, int flags, char *fname,
273 #define xfs_force_shutdown(m,f) \
274 xfs_do_force_shutdown(m, f, __FILE__, __LINE__)
276 #define SHUTDOWN_META_IO_ERROR 0x0001 /* write attempt to metadata failed */
277 #define SHUTDOWN_LOG_IO_ERROR 0x0002 /* write attempt to the log failed */
278 #define SHUTDOWN_FORCE_UMOUNT 0x0004 /* shutdown from a forced unmount */
279 #define SHUTDOWN_CORRUPT_INCORE 0x0008 /* corrupt in-memory data structures */
282 * Flags for xfs_mountfs
284 #define XFS_MFSI_QUIET 0x40 /* Be silent if mount errors found */
286 static inline xfs_agnumber_t
287 xfs_daddr_to_agno(struct xfs_mount *mp, xfs_daddr_t d)
289 xfs_rfsblock_t ld = XFS_BB_TO_FSBT(mp, d);
290 do_div(ld, mp->m_sb.sb_agblocks);
291 return (xfs_agnumber_t) ld;
294 static inline xfs_agblock_t
295 xfs_daddr_to_agbno(struct xfs_mount *mp, xfs_daddr_t d)
297 xfs_rfsblock_t ld = XFS_BB_TO_FSBT(mp, d);
298 return (xfs_agblock_t) do_div(ld, mp->m_sb.sb_agblocks);
301 int xfs_buf_hash_init(struct xfs_perag *pag);
302 void xfs_buf_hash_destroy(struct xfs_perag *pag);
304 extern void xfs_uuid_table_free(void);
305 extern uint64_t xfs_default_resblks(xfs_mount_t *mp);
306 extern int xfs_mountfs(xfs_mount_t *mp);
307 extern void xfs_unmountfs(xfs_mount_t *);
309 extern int xfs_mod_fdblocks(struct xfs_mount *mp, int64_t delta,
311 extern int xfs_mod_frextents(struct xfs_mount *mp, int64_t delta);
313 extern int xfs_readsb(xfs_mount_t *, int);
314 extern void xfs_freesb(xfs_mount_t *);
315 extern bool xfs_fs_writable(struct xfs_mount *mp, int level);
316 extern int xfs_sb_validate_fsb_count(struct xfs_sb *, uint64_t);
318 extern int xfs_dev_is_read_only(struct xfs_mount *, char *);
320 extern void xfs_set_low_space_thresholds(struct xfs_mount *);
322 int xfs_zero_extent(struct xfs_inode *ip, xfs_fsblock_t start_fsb,
323 xfs_off_t count_fsb);
325 struct xfs_error_cfg * xfs_error_get_cfg(struct xfs_mount *mp,
326 int error_class, int error);
327 void xfs_force_summary_recalc(struct xfs_mount *mp);
328 void xfs_mod_delalloc(struct xfs_mount *mp, int64_t delta);
330 #endif /* __XFS_MOUNT_H__ */