]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Detect long config lock acquisition in mmp
authorOlaf Faaland <faaland1@llnl.gov>
Wed, 21 Feb 2018 01:33:51 +0000 (17:33 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 6 Mar 2018 23:14:39 +0000 (15:14 -0800)
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

module/zfs/mmp.c

index 2d740e0257380d3b74c35464256311d10e07c42b..a668e8dbdb2306fdd700b64a2a3f30296f0df13c 100644 (file)
@@ -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);