HomeFreeBSD

Wait for txg sync if the last DRR_FREEOBJECTS might result in a hole

Description

Wait for txg sync if the last DRR_FREEOBJECTS might result in a hole

If we receive a DRR_FREEOBJECTS as the first entry in an object range,
this might end up producing a hole if the freed objects were the
only existing objects in the block.

If the txg starts syncing before we've processed any following
DRR_OBJECT records, this leads to a possible race where the backing
arc_buf_t gets its psize set to 0 in the arc_write_ready() callback
while still being referenced from a dirty record in the open txg.

To prevent this, we insert a txg_wait_synced call if the first
record in the range was a DRR_FREEOBJECTS that actually
resulted in one or more freed objects.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: David Hedberg <david.hedberg@findity.com>
Sponsored by: Findity AB
Closes #11893
Closes #14358

Details

Provenance
David Hedberg <david@qzx.se>Authored on Jan 23 2023, 9:19 PM
Brian Behlendorf <behlendorf1@llnl.gov>Committed on May 9 2023, 7:57 PM
Parents
rG75ec145710e5: zpool import -m also removing spare and cache when log device is missing
Branches
Unknown
Tags
Unknown

Event Timeline

Brian Behlendorf <behlendorf1@llnl.gov> committed rG9b17d5a37d6c: Wait for txg sync if the last DRR_FREEOBJECTS might result in a hole (authored by David Hedberg <david@qzx.se>).May 9 2023, 7:57 PM