ztest: dmu_tx_assign() gets ENOSPC in spa_vdev_remove_thread()
When running zloop, we occasionally see the following crash: dmu_tx_assign(tx, TXG_WAIT) == 0 (0x1c == 0) ASSERT at ../../module/zfs/vdev_removal.c:1507:spa_vdev_remove_thread()/sbin/ztest(+0x89c3)[0x55faf567b9c3] The error value 0x1c is ENOSPC. The transaction used by spa_vdev_remove_thread() should not be able to fail due to being out of space. i.e. we should not call dmu_tx_hold_space(). This will allow the removal thread to schedule its work even when the pool is low on space. The "slop space" will provide enough free space to sync out the txg. Reviewed-by: Igor Kozhukhov <igor@dilos.org> Reviewed-by: Paul Dagnelie <pcd@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Matthew Ahrens <mahrens@delphix.com> External-issue: DLPX-37853 Closes #8889
This commit is contained in:
parent
daddbdc7cc
commit
3475724ea4
|
@ -1498,7 +1498,7 @@ spa_vdev_remove_thread(void *arg)
|
|||
|
||||
dmu_tx_t *tx =
|
||||
dmu_tx_create_dd(spa_get_dsl(spa)->dp_mos_dir);
|
||||
dmu_tx_hold_space(tx, SPA_MAXBLOCKSIZE);
|
||||
|
||||
VERIFY0(dmu_tx_assign(tx, TXG_WAIT));
|
||||
uint64_t txg = dmu_tx_get_txg(tx);
|
||||
|
||||
|
|
Loading…
Reference in New Issue