Destroy ARC buffer in case of fill error
In case of error dmu_buf_fill_done() returns the buffer back into DB_UNCACHED state. Since during transition from DB_UNCACHED into DB_FILL state dbuf_noread() allocates an ARC buffer, we must free it here, otherwise it will be leaked. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Jorgen Lundman <lundman@lundman.net> Signed-off-by: Alexander Motin <mav@FreeBSD.org> Sponsored by: iXsystems, Inc. Closes #15665 Closes #15802 Closes #16216
This commit is contained in:
parent
27cc6df760
commit
ba3c7692cd
|
@ -2834,6 +2834,7 @@ dmu_buf_fill_done(dmu_buf_t *dbuf, dmu_tx_t *tx, boolean_t failed)
|
|||
failed = B_FALSE;
|
||||
} else if (failed) {
|
||||
VERIFY(!dbuf_undirty(db, tx));
|
||||
arc_buf_destroy(db->db_buf, db);
|
||||
db->db_buf = NULL;
|
||||
dbuf_clear_data(db);
|
||||
DTRACE_SET_STATE(db, "fill failed");
|
||||
|
|
Loading…
Reference in New Issue