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. Fixes: #15665 Closes: #15802 Signed-off-by: Alexander Motin <mav@FreeBSD.org> Sponsored by: iXsystems, Inc.
This commit is contained in:
parent
efbef9e6cc
commit
a1bf16ca69
|
@ -2853,6 +2853,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