| // SPDX-License-Identifier: GPL-2.0 | 
 | /* | 
 |  * Copyright (c) 2000-2005 Silicon Graphics, Inc. | 
 |  * All Rights Reserved. | 
 |  */ | 
 |  | 
 | #ifndef __XFS_MOUNT_H__ | 
 | #define __XFS_MOUNT_H__ | 
 |  | 
 | struct xfs_inode; | 
 | struct xfs_buftarg; | 
 | struct xfs_da_geometry; | 
 |  | 
 | typedef void (*buf_writeback_fn)(struct xfs_buf *bp); | 
 |  | 
 | /* | 
 |  * Define a user-level mount structure with all we need | 
 |  * in order to make use of the numerous XFS_* macros. | 
 |  */ | 
 | typedef struct xfs_mount { | 
 | 	xfs_sb_t		m_sb;		/* copy of fs superblock */ | 
 | #define m_icount	m_sb.sb_icount | 
 | #define m_ifree		m_sb.sb_ifree | 
 | #define m_fdblocks	m_sb.sb_fdblocks | 
 | 	spinlock_t		m_sb_lock; | 
 |  | 
 | 	/* | 
 | 	 * Bitsets of per-fs metadata that have been checked and/or are sick. | 
 | 	 * Callers must hold m_sb_lock to access these two fields. | 
 | 	 */ | 
 | 	uint8_t			m_fs_checked; | 
 | 	uint8_t			m_fs_sick; | 
 |  | 
 | 	char			*m_fsname;	/* filesystem name */ | 
 | 	int			m_bsize;	/* fs logical block size */ | 
 | 	spinlock_t		m_agirotor_lock; | 
 | 	xfs_agnumber_t		m_agfrotor;	/* last ag where space found */ | 
 | 	xfs_agnumber_t		m_agirotor;	/* last ag dir inode alloced */ | 
 | 	xfs_agnumber_t		m_maxagi;	/* highest inode alloc group */ | 
 |         struct xfs_ino_geometry	m_ino_geo;	/* inode geometry */ | 
 | 	uint			m_rsumlevels;	/* rt summary levels */ | 
 | 	uint			m_rsumsize;	/* size of rt summary, bytes */ | 
 | 	/* | 
 | 	 * Optional cache of rt summary level per bitmap block with the | 
 | 	 * invariant that m_rsum_cache[bbno] <= the minimum i for which | 
 | 	 * rsum[i][bbno] != 0. Reads and writes are serialized by the rsumip | 
 | 	 * inode lock. | 
 | 	 */ | 
 | 	uint8_t			*m_rsum_cache; | 
 | 	struct xfs_inode	*m_rbmip;	/* pointer to bitmap inode */ | 
 | 	struct xfs_inode	*m_rsumip;	/* pointer to summary inode */ | 
 | 	struct xfs_buftarg	*m_ddev_targp; | 
 | 	struct xfs_buftarg	*m_logdev_targp; | 
 | 	struct xfs_buftarg	*m_rtdev_targp; | 
 | #define m_dev		m_ddev_targp | 
 | #define m_logdev	m_logdev_targp | 
 | #define m_rtdev		m_rtdev_targp | 
 | 	uint8_t			m_dircook_elog;	/* log d-cookie entry bits */ | 
 | 	uint8_t			m_blkbit_log;	/* blocklog + NBBY */ | 
 | 	uint8_t			m_blkbb_log;	/* blocklog - BBSHIFT */ | 
 | 	uint8_t			m_sectbb_log;	/* sectorlog - BBSHIFT */ | 
 | 	uint8_t			m_agno_log;	/* log #ag's */ | 
 | 	uint			m_blockmask;	/* sb_blocksize-1 */ | 
 | 	uint			m_blockwsize;	/* sb_blocksize in words */ | 
 | 	uint			m_blockwmask;	/* blockwsize-1 */ | 
 | 	uint			m_alloc_mxr[2];	/* XFS_ALLOC_BLOCK_MAXRECS */ | 
 | 	uint			m_alloc_mnr[2];	/* XFS_ALLOC_BLOCK_MINRECS */ | 
 | 	uint			m_bmap_dmxr[2];	/* XFS_BMAP_BLOCK_DMAXRECS */ | 
 | 	uint			m_bmap_dmnr[2];	/* XFS_BMAP_BLOCK_DMINRECS */ | 
 | 	uint			m_rmap_mxr[2];	/* max rmap btree records */ | 
 | 	uint			m_rmap_mnr[2];	/* min rmap btree records */ | 
 | 	uint			m_refc_mxr[2];	/* max refc btree records */ | 
 | 	uint			m_refc_mnr[2];	/* min refc btree records */ | 
 | 	uint			m_ag_maxlevels;	/* XFS_AG_MAXLEVELS */ | 
 | 	uint			m_bm_maxlevels[2]; /* XFS_BM_MAXLEVELS */ | 
 | 	uint			m_rmap_maxlevels; /* max rmap btree levels */ | 
 | 	uint			m_refc_maxlevels; /* max refc btree levels */ | 
 | 	xfs_extlen_t		m_ag_prealloc_blocks; /* reserved ag blocks */ | 
 | 	uint			m_alloc_set_aside; /* space we can't use */ | 
 | 	uint			m_ag_max_usable; /* max space per AG */ | 
 | 	struct radix_tree_root	m_perag_tree; | 
 | 	uint			m_flags;	/* global mount flags */ | 
 | 	bool			m_finobt_nores; /* no per-AG finobt resv. */ | 
 | 	uint			m_qflags;	/* quota status flags */ | 
 | 	uint			m_attroffset;	/* inode attribute offset */ | 
 | 	struct xfs_trans_resv	m_resv;		/* precomputed res values */ | 
 | 	int			m_dalign;	/* stripe unit */ | 
 | 	int			m_swidth;	/* stripe width */ | 
 | 	const struct xfs_nameops *m_dirnameops;	/* vector of dir name ops */ | 
 |  | 
 | 	struct xfs_da_geometry	*m_dir_geo;	/* directory block geometry */ | 
 | 	struct xfs_da_geometry	*m_attr_geo;	/* attribute block geometry */ | 
 |  | 
 | 	/* | 
 | 	 * anonymous struct to allow xfs_dquot_buf.c to compile. | 
 | 	 * Pointer is always null in userspace, so code does not use it at all | 
 | 	 */ | 
 | 	struct { | 
 | 		int	qi_dqperchunk; | 
 | 	}			*m_quotainfo; | 
 |  | 
 | 	buf_writeback_fn	m_buf_writeback_fn; | 
 |  | 
 | 	/* | 
 | 	 * xlog is defined in libxlog and thus is not intialized by libxfs. This | 
 | 	 * allows an application to initialize and store a reference to the log | 
 | 	 * if warranted. | 
 | 	 */ | 
 | 	struct xlog		*m_log;		/* log specific stuff */ | 
 |  | 
 |         /* | 
 | 	 * Global count of allocation btree blocks in use across all AGs. Only | 
 | 	 * used when perag reservation is enabled. Helps prevent block | 
 | 	 * reservation from attempting to reserve allocation btree blocks. | 
 | 	 */ | 
 | 	atomic64_t		m_allocbt_blks; | 
 | 	spinlock_t		m_perag_lock;	/* lock for m_perag_tree */ | 
 |  | 
 | } xfs_mount_t; | 
 |  | 
 | #define M_IGEO(mp)		(&(mp)->m_ino_geo) | 
 |  | 
 | #define LIBXFS_MOUNT_DEBUGGER		0x0001 | 
 | #define LIBXFS_MOUNT_32BITINODES	0x0002 | 
 | #define LIBXFS_MOUNT_32BITINOOPT	0x0004 | 
 | #define LIBXFS_MOUNT_COMPAT_ATTR	0x0008 | 
 | #define LIBXFS_MOUNT_ATTR2		0x0010 | 
 | #define LIBXFS_MOUNT_WANT_CORRUPTED	0x0020 | 
 | #define LIBXFS_MOUNT_PERAG_DATA_LOADED	0x0040 | 
 |  | 
 | #define LIBXFS_BHASHSIZE(sbp) 		(1<<10) | 
 |  | 
 | extern xfs_mount_t	*libxfs_mount (xfs_mount_t *, xfs_sb_t *, | 
 | 				dev_t, dev_t, dev_t, int); | 
 | int libxfs_flush_mount(struct xfs_mount *mp); | 
 | int		libxfs_umount(struct xfs_mount *mp); | 
 | extern void	libxfs_rtmount_destroy (xfs_mount_t *); | 
 |  | 
 | /* Dummy xfs_dquot so that libxfs compiles. */ | 
 | struct xfs_dquot { | 
 | 	int		q_type; | 
 | }; | 
 | #endif	/* __XFS_MOUNT_H__ */ |