low probability race in zfs_get_data
error = dmu_sync(zio, lr->lr_common.lrc_txg, zfs_get_done, zgd); ASSERT(error || lr->lr_length <= zp->z_blksz);
It's possible, although extremely rare, that the
zfs_get_done() callback is executed before
In that case the znode's range lock is dropped and the znode is unreferenced.
Thus, the assertion can access some invalid or wrong data via the
size variable caches the correct value of
z_blksz and can be safely used here.
Updated by Electric Monk over 2 years ago
- % Done changed from 0 to 100
- Status changed from New to Closed
commit 0c94e1af6784c69a1dea25e0e35dd13b2b91e2e5 Author: Andriy Gapon <firstname.lastname@example.org> Date: 2016-12-21T19:01:59.000Z 7256 low probability race in zfs_get_data Reviewed by: Matt Ahrens <email@example.com> Reviewed by: Pavel Zakharov <firstname.lastname@example.org> Approved by: Dan McDonald <email@example.com>