75b07eca3e
by importing the upstream release as patches. replace user namespace patch with version which has been applied usptream.
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
|
|
|