From 1c25956ef8349c863c95ac97f46d97ed633d9e38 Mon Sep 17 00:00:00 2001 From: Olaf Faaland Date: Tue, 20 Feb 2018 17:33:51 -0800 Subject: [PATCH] Detect long config lock acquisition in mmp 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. Signed-off-by: Olaf Faaland --- module/zfs/mmp.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/module/zfs/mmp.c b/module/zfs/mmp.c index 2d740e025738..a668e8dbdb23 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);