77 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0-or-later */
 | |
| /*
 | |
|  * Copyright (c) 2020-2024 Oracle.  All Rights Reserved.
 | |
|  * Author: Darrick J. Wong <djwong@kernel.org>
 | |
|  */
 | |
| #ifndef __XFS_SCRUB_QUOTACHECK_H__
 | |
| #define __XFS_SCRUB_QUOTACHECK_H__
 | |
| 
 | |
| /* Quota counters for live quotacheck. */
 | |
| struct xqcheck_dquot {
 | |
| 	/* block usage count */
 | |
| 	int64_t			bcount;
 | |
| 
 | |
| 	/* inode usage count */
 | |
| 	int64_t			icount;
 | |
| 
 | |
| 	/* realtime block usage count */
 | |
| 	int64_t			rtbcount;
 | |
| 
 | |
| 	/* Record state */
 | |
| 	unsigned int		flags;
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * This incore dquot record has been written at least once.  We never want to
 | |
|  * store an xqcheck_dquot that looks uninitialized.
 | |
|  */
 | |
| #define XQCHECK_DQUOT_WRITTEN		(1U << 0)
 | |
| 
 | |
| /* Already checked this dquot. */
 | |
| #define XQCHECK_DQUOT_COMPARE_SCANNED	(1U << 1)
 | |
| 
 | |
| /* Already repaired this dquot. */
 | |
| #define XQCHECK_DQUOT_REPAIR_SCANNED	(1U << 2)
 | |
| 
 | |
| /* Live quotacheck control structure. */
 | |
| struct xqcheck {
 | |
| 	struct xfs_scrub	*sc;
 | |
| 
 | |
| 	/* Shadow dquot counter data. */
 | |
| 	struct xfarray		*ucounts;
 | |
| 	struct xfarray		*gcounts;
 | |
| 	struct xfarray		*pcounts;
 | |
| 
 | |
| 	/* Lock protecting quotacheck count observations */
 | |
| 	struct mutex		lock;
 | |
| 
 | |
| 	struct xchk_iscan	iscan;
 | |
| 
 | |
| 	/* Hooks into the quota code. */
 | |
| 	struct xfs_dqtrx_hook	qhook;
 | |
| 
 | |
| 	/* Shadow quota delta tracking structure. */
 | |
| 	struct rhashtable	shadow_dquot_acct;
 | |
| };
 | |
| 
 | |
| /* Return the incore counter array for a given quota type. */
 | |
| static inline struct xfarray *
 | |
| xqcheck_counters_for(
 | |
| 	struct xqcheck		*xqc,
 | |
| 	xfs_dqtype_t		dqtype)
 | |
| {
 | |
| 	switch (dqtype) {
 | |
| 	case XFS_DQTYPE_USER:
 | |
| 		return xqc->ucounts;
 | |
| 	case XFS_DQTYPE_GROUP:
 | |
| 		return xqc->gcounts;
 | |
| 	case XFS_DQTYPE_PROJ:
 | |
| 		return xqc->pcounts;
 | |
| 	}
 | |
| 
 | |
| 	ASSERT(0);
 | |
| 	return NULL;
 | |
| }
 | |
| 
 | |
| #endif /* __XFS_SCRUB_QUOTACHECK_H__ */
 |