fd313b306e
to reduce version number confusion
47 lines
1.6 KiB
Diff
47 lines
1.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Olaf Faaland <faaland1@llnl.gov>
|
|
Date: Tue, 20 Feb 2018 17:33:51 -0800
|
|
Subject: [PATCH] Detect long config lock acquisition in mmp
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
If something holds the config lock as a writer for too long, MMP will
|
|
fail to issue MMP writes in a timely manner. This will result either in
|
|
the pool being suspended, or in an extreme case, in the pool not being
|
|
protected.
|
|
|
|
If the time to acquire the config lock exceeds 1/10 of the minimum
|
|
zfs_multihost_interval, report it in the zfs debug log.
|
|
|
|
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
|
|
Signed-off-by: Olaf Faaland <faaland1@llnl.gov>
|
|
Closes #7212
|
|
(cherry picked from commit c17922b8a9db00ad7e7d59a5ff975b2a1edcf887)
|
|
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
|
|
---
|
|
module/zfs/mmp.c | 6 ++++++
|
|
1 file changed, 6 insertions(+)
|
|
|
|
diff --git a/module/zfs/mmp.c b/module/zfs/mmp.c
|
|
index ee8e9201b..634e48287 100644
|
|
--- a/module/zfs/mmp.c
|
|
+++ b/module/zfs/mmp.c
|
|
@@ -323,7 +323,13 @@ mmp_write_uberblock(spa_t *spa)
|
|
int label;
|
|
uint64_t offset;
|
|
|
|
+ hrtime_t lock_acquire_time = gethrtime();
|
|
spa_config_enter(spa, SCL_STATE, mmp_tag, RW_READER);
|
|
+ lock_acquire_time = gethrtime() - lock_acquire_time;
|
|
+ if (lock_acquire_time > (MSEC2NSEC(MMP_MIN_INTERVAL) / 10))
|
|
+ zfs_dbgmsg("SCL_STATE acquisition took %llu ns\n",
|
|
+ (u_longlong_t)lock_acquire_time);
|
|
+
|
|
vd = mmp_random_leaf(spa->spa_root_vdev);
|
|
if (vd == NULL) {
|
|
spa_config_exit(spa, SCL_STATE, FTAG);
|
|
--
|
|
2.14.2
|
|
|