]> git.proxmox.com Git - mirror_zfs.git/blame - include/sys/mmp.h
MMP interval and fail_intervals in uberblock
[mirror_zfs.git] / include / sys / mmp.h
CommitLineData
379ca9cf
OF
1/*
2 * CDDL HEADER START
3 *
4 * This file and its contents are supplied under the terms of the
5 * Common Development and Distribution License ("CDDL"), version 1.0.
6 * You may only use this file in accordance with the terms of version
7 * 1.0 of the CDDL.
8 *
9 * A full copy of the text of the CDDL should have accompanied this
10 * source. A copy of the CDDL is also available via the Internet at
11 * http://www.illumos.org/license/CDDL.
12 *
13 * CDDL HEADER END
14 */
15/*
16 * Copyright (C) 2017 by Lawrence Livermore National Security, LLC.
17 */
18
19#ifndef _SYS_MMP_H
20#define _SYS_MMP_H
21
22#include <sys/spa.h>
23#include <sys/zfs_context.h>
24#include <sys/uberblock_impl.h>
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30#define MMP_MIN_INTERVAL 100 /* ms */
31#define MMP_DEFAULT_INTERVAL 1000 /* ms */
db2af93d
OF
32#define MMP_DEFAULT_IMPORT_INTERVALS 20
33#define MMP_DEFAULT_FAIL_INTERVALS 10
060f0226
OF
34#define MMP_MIN_FAIL_INTERVALS 2 /* min if != 0 */
35#define MMP_IMPORT_SAFETY_FACTOR 200 /* pct */
36#define MMP_INTERVAL_OK(interval) MAX(interval, MMP_MIN_INTERVAL)
37#define MMP_FAIL_INTVS_OK(fails) (fails == 0 ? 0 : MAX(fails, \
38 MMP_MIN_FAIL_INTERVALS))
379ca9cf
OF
39
40typedef struct mmp_thread {
41 kmutex_t mmp_thread_lock; /* protect thread mgmt fields */
42 kcondvar_t mmp_thread_cv;
43 kthread_t *mmp_thread;
44 uint8_t mmp_thread_exiting;
45 kmutex_t mmp_io_lock; /* protect below */
46 hrtime_t mmp_last_write; /* last successful MMP write */
47 uint64_t mmp_delay; /* decaying avg ns between MMP writes */
48 uberblock_t mmp_ub; /* last ub written by sync */
49 zio_t *mmp_zio_root; /* root of mmp write zios */
7088545d 50 uint64_t mmp_kstat_id; /* unique id for next MMP write kstat */
d2160d05 51 int mmp_skip_error; /* reason for last skipped write */
3d31aad8
OF
52 vdev_t *mmp_last_leaf; /* last mmp write sent here */
53 uint64_t mmp_leaf_last_gen; /* last mmp write sent here */
060f0226 54 uint32_t mmp_seq; /* intra-second update counter */
379ca9cf
OF
55} mmp_thread_t;
56
57
58extern void mmp_init(struct spa *spa);
59extern void mmp_fini(struct spa *spa);
60extern void mmp_thread_start(struct spa *spa);
61extern void mmp_thread_stop(struct spa *spa);
62extern void mmp_update_uberblock(struct spa *spa, struct uberblock *ub);
0582e403 63extern void mmp_signal_all_threads(void);
379ca9cf
OF
64
65/* Global tuning */
66extern ulong_t zfs_multihost_interval;
67extern uint_t zfs_multihost_fail_intervals;
68extern uint_t zfs_multihost_import_intervals;
69
70#ifdef __cplusplus
71}
72#endif
73
74#endif /* _SYS_MMP_H */