mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-01-27 18:34:22 +03:00
Add missing arc_free_cksum() to arc_release()
The arc layer tracks checksums of its data in the arc header so that it can ensure that buffers haven't changed when they're not supposed to. This checksum is only maintained while there is an uncompressed buffer still attached to the header. Unfortunately there is a missing call to arc_free_cksum() in arc_release() that can trigger ASSERTs. This has not been a common issue because the checksums are only maintained for debug builds and triggering the bug requires writing a block (and therefore calling arc_release()) while a compressed buffer is still being used on a debug build. This simply corrects the issue. Reviewed-by: George Melikov <mail@gmelikov.ru> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Tom Caputi <tcaputi@datto.com> Closes #6105
This commit is contained in:
parent
2946a1a15a
commit
f486f58440
@ -5691,6 +5691,10 @@ arc_release(arc_buf_t *buf, void *tag)
|
||||
arc_cksum_verify(buf);
|
||||
arc_buf_unwatch(buf);
|
||||
|
||||
/* if this is the last uncompressed buf free the checksum */
|
||||
if (!arc_hdr_has_uncompressed_buf(hdr))
|
||||
arc_cksum_free(hdr);
|
||||
|
||||
mutex_exit(hash_lock);
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user