mirror_zfs/cmd
Matthew Ahrens 02dc43bc46 OpenZFS 8378 - crash due to bp in-memory modification of nopwrite block
Authored by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Prakash Surya <prakash.surya@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Approved by: Robert Mustacchi <rm@joyent.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Ported-by: Giuseppe Di Natale <dinatale2@llnl.gov>

The problem is that zfs_get_data() supplies a stale zgd_bp to
dmu_sync(), which we then nopwrite against.
zfs_get_data() doesn't hold any DMU-related locks, so after it
copies db_blkptr to zgd_bp, dbuf_write_ready() could change
db_blkptr, and dbuf_write_done() could remove the dirty record.
dmu_sync() then sees the stale BP and that the dbuf it not dirty,
so it is eligible for nop-writing.
The fix is for dmu_sync() to copy db_blkptr to zgd_bp after
acquiring the db_mtx. We could still see a stale db_blkptr,
but if it is stale then the dirty record will still exist and
thus we won't attempt to nopwrite.

OpenZFS-issue: https://www.illumos.org/issues/8378
OpenZFS-commit: https://github.com/openzfs/openzfs/commit/3127742
Closes #6293
2017-07-04 15:41:24 -07:00
..
arc_summary Correct arc_summary and dbufstat python style 2017-03-09 10:21:59 -08:00
arcstat Correct exit code for dbufstat -v and arcstat -v 2016-10-06 10:52:21 -07:00
dbufstat Correct arc_summary and dbufstat python style 2017-03-09 10:21:59 -08:00
fsck_zfs Add /sbin/fsck.zfs helper 2013-01-09 16:54:58 -08:00
mount_zfs Add MS_MANDLOCK mount failure message 2017-06-07 10:59:44 -07:00
raidz_test Add missing *_destroy/*_fini calls 2017-05-04 19:26:28 -04:00
vdev_id vdev_id: fix failure due to multipath -l bug 2017-04-20 12:10:55 -07:00
zdb Add zfs_nicebytes() to print human-readable sizes 2017-05-02 13:43:53 -07:00
zed Enable remaining tests 2017-05-22 12:34:32 -04:00
zfs Add missing \n for "invalid optionusage" output 2017-06-09 09:51:13 -07:00
zhack Fix zhack argument processing 2016-08-31 14:32:46 -07:00
zinject Inject zinject(8) a percentage amount of dev errs 2017-06-16 17:21:11 -07:00
zpios Fix spelling 2017-01-03 11:31:18 -06:00
zpool Dashes for zero latency values in zpool iostat -p 2017-06-22 09:39:01 -07:00
zstreamdump OpenZFS 7252 - compressed zfs send / receive 2017-04-26 12:31:43 -07:00
ztest OpenZFS 8378 - crash due to bp in-memory modification of nopwrite block 2017-07-04 15:41:24 -07:00
zvol_id OpenZFS 6314 - buffer overflow in dsl_dataset_name 2016-06-28 13:47:03 -07:00
Makefile.am SIMD implementation of vdev_raidz generate and reconstruct routines 2016-06-21 09:27:26 -07:00