mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-11-17 10:01:01 +03:00
Remove unnecessary txg syncs from receive_object()
1b66810b
introduced serveral changes which improved the reliability
of zfs sends when large dnodes were involved. However, these fixes
required adding a few calls to txg_wait_synced() in the DRR_OBJECT
handling code. Although most of them are currently necessary, this
patch allows the code to continue without waiting in some cases
where it doesn't have to.
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tom Caputi <tcaputi@datto.com>
Closes #7197
This commit is contained in:
parent
478b3150de
commit
5121c4fb0c
@ -2546,6 +2546,8 @@ receive_object(struct receive_writer_arg *rwa, struct drr_object *drro,
|
|||||||
* these objects before we attempt to allocate the new dnode.
|
* these objects before we attempt to allocate the new dnode.
|
||||||
*/
|
*/
|
||||||
if (drro->drr_dn_slots > 1) {
|
if (drro->drr_dn_slots > 1) {
|
||||||
|
boolean_t need_sync = B_FALSE;
|
||||||
|
|
||||||
for (uint64_t slot = drro->drr_object + 1;
|
for (uint64_t slot = drro->drr_object + 1;
|
||||||
slot < drro->drr_object + drro->drr_dn_slots;
|
slot < drro->drr_object + drro->drr_dn_slots;
|
||||||
slot++) {
|
slot++) {
|
||||||
@ -2564,9 +2566,12 @@ receive_object(struct receive_writer_arg *rwa, struct drr_object *drro,
|
|||||||
|
|
||||||
if (err != 0)
|
if (err != 0)
|
||||||
return (err);
|
return (err);
|
||||||
|
|
||||||
|
need_sync = B_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
txg_wait_synced(dmu_objset_pool(rwa->os), 0);
|
if (need_sync)
|
||||||
|
txg_wait_synced(dmu_objset_pool(rwa->os), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
tx = dmu_tx_create(rwa->os);
|
tx = dmu_tx_create(rwa->os);
|
||||||
|
Loading…
Reference in New Issue
Block a user