]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
MFC r331703: MFV 331702:
authormav <mav@FreeBSD.org>
Mon, 16 Apr 2018 04:11:48 +0000 (04:11 +0000)
committermav <mav@FreeBSD.org>
Mon, 16 Apr 2018 04:11:48 +0000 (04:11 +0000)
commit54dbfa46b746ad12e10dfb4979ea5c81f3b13a69
tree5befe368ba3b1ed8b123976601fb1fde882fdb79
parentae751e77ee5685e40fda9e58de3377886556347d
MFC r331703: MFV 331702:
9187 racing condition between vdev label and spa_last_synced_txg in vdev_validate

illumos/illumos-gate@d1de72cfa29ab77ff80e2bb0e668a6afa5bccaf0

ztest failed with uncorrectable IO error despite having the fix for #7163.
Both sides of the mirror have CANT_OPEN_BAD_LABEL, which also distinguishes
it from that issue.

Definitely seems like a racing condition between the vdev_validate and spa_sync:
1. Thread A (spa_sync): vdev label is updated to latest txg
2. Thread B (vdev_validate): vdev label's txg is compared to spa_last_synced_txg and is ahead.
3. Thread A (spa_sync): spa_last_synced_txg is updated to latest txg.

Solution: do not check txg in vdev_validate unless config lock is held.

Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Matt Ahrens <matthew.ahrens@delphix.com>
Approved by: Robert Mustacchi <rm@joyent.com>
Author: Pavel Zakharov <pavel.zakharov@delphix.com>
sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c