mirror of
				https://git.proxmox.com/git/mirror_zfs
				synced 2025-11-04 10:56:58 +00:00 
			
		
		
		
	This tunable required a handler to be implemented for ZFS_MODULE_PARAM_CALL. Add the handler so the tunable can be declared in common code. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ryan Moeller <ryan@iXsystems.com> Closes #10490
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * CDDL HEADER START
 | 
						|
 *
 | 
						|
 * This file and its contents are supplied under the terms of the
 | 
						|
 * Common Development and Distribution License ("CDDL"), version 1.0.
 | 
						|
 * You may only use this file in accordance with the terms of version
 | 
						|
 * 1.0 of the CDDL.
 | 
						|
 *
 | 
						|
 * A full copy of the text of the CDDL should have accompanied this
 | 
						|
 * source.  A copy of the CDDL is also available via the Internet at
 | 
						|
 * http://www.illumos.org/license/CDDL.
 | 
						|
 *
 | 
						|
 * CDDL HEADER END
 | 
						|
 */
 | 
						|
/*
 | 
						|
 * Copyright (C) 2017 by Lawrence Livermore National Security, LLC.
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef _SYS_MMP_H
 | 
						|
#define	_SYS_MMP_H
 | 
						|
 | 
						|
#include <sys/spa.h>
 | 
						|
#include <sys/zfs_context.h>
 | 
						|
#include <sys/uberblock_impl.h>
 | 
						|
 | 
						|
#ifdef	__cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
#define	MMP_MIN_INTERVAL		100	/* ms */
 | 
						|
#define	MMP_DEFAULT_INTERVAL		1000	/* ms */
 | 
						|
#define	MMP_DEFAULT_IMPORT_INTERVALS	20
 | 
						|
#define	MMP_DEFAULT_FAIL_INTERVALS	10
 | 
						|
#define	MMP_MIN_FAIL_INTERVALS		2	/* min if != 0 */
 | 
						|
#define	MMP_IMPORT_SAFETY_FACTOR	200	/* pct */
 | 
						|
#define	MMP_INTERVAL_OK(interval)	MAX(interval, MMP_MIN_INTERVAL)
 | 
						|
#define	MMP_FAIL_INTVS_OK(fails)	(fails == 0 ? 0 : MAX(fails, \
 | 
						|
					    MMP_MIN_FAIL_INTERVALS))
 | 
						|
 | 
						|
typedef struct mmp_thread {
 | 
						|
	kmutex_t	mmp_thread_lock; /* protect thread mgmt fields */
 | 
						|
	kcondvar_t	mmp_thread_cv;
 | 
						|
	kthread_t	*mmp_thread;
 | 
						|
	uint8_t		mmp_thread_exiting;
 | 
						|
	kmutex_t	mmp_io_lock;	/* protect below */
 | 
						|
	hrtime_t	mmp_last_write;	/* last successful MMP write */
 | 
						|
	uint64_t	mmp_delay;	/* decaying avg ns between MMP writes */
 | 
						|
	uberblock_t	mmp_ub;		/* last ub written by sync */
 | 
						|
	zio_t		*mmp_zio_root;	/* root of mmp write zios */
 | 
						|
	uint64_t	mmp_kstat_id;	/* unique id for next MMP write kstat */
 | 
						|
	int		mmp_skip_error; /* reason for last skipped write */
 | 
						|
	vdev_t		*mmp_last_leaf;	/* last mmp write sent here */
 | 
						|
	uint64_t	mmp_leaf_last_gen;	/* last mmp write sent here */
 | 
						|
	uint32_t	mmp_seq;	/* intra-second update counter */
 | 
						|
} mmp_thread_t;
 | 
						|
 | 
						|
 | 
						|
extern void mmp_init(struct spa *spa);
 | 
						|
extern void mmp_fini(struct spa *spa);
 | 
						|
extern void mmp_thread_start(struct spa *spa);
 | 
						|
extern void mmp_thread_stop(struct spa *spa);
 | 
						|
extern void mmp_update_uberblock(struct spa *spa, struct uberblock *ub);
 | 
						|
extern void mmp_signal_all_threads(void);
 | 
						|
 | 
						|
/* Global tuning */
 | 
						|
extern int param_set_multihost_interval(ZFS_MODULE_PARAM_ARGS);
 | 
						|
extern ulong_t zfs_multihost_interval;
 | 
						|
extern uint_t zfs_multihost_fail_intervals;
 | 
						|
extern uint_t zfs_multihost_import_intervals;
 | 
						|
 | 
						|
#ifdef	__cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif	/* _SYS_MMP_H */
 |