Skip to content

Commit

Permalink
Detect long config lock acquisition in mmp
Browse files Browse the repository at this point in the history
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 openzfs#7212
  • Loading branch information
ofaaland authored and tonyhutter committed Mar 8, 2018
1 parent 3ed7a02 commit 301e9e0
Showing 1 changed file with 6 additions and 0 deletions.
6 changes: 6 additions & 0 deletions module/zfs/mmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 301e9e0

Please sign in to comment.