diff options
author | avg <[email protected]> | 2014-11-06 11:08:02 +0000 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2015-02-03 16:54:16 -0800 |
commit | 037763e44e0f6d7284e9328db988a89fdc975a4e (patch) | |
tree | d69453c575ff051746f125ca5c46d37b44a1c5d9 /module/zfs/dsl_bookmark.c | |
parent | 19ea3d25df99995d2e62592cd6bc74f883f0e8e0 (diff) |
fix l2arc compression buffers leak
Commit log from FreeBSD:
We have observed that arc_release() can be called concurrently with a
l2arc in-flight write. Also, we have observed that arc_hdr_destroy()
can be called from arc_write_done() for a zio with ZIO_FLAG_IO_REWRITE
flag in similar circumstances.
Previously the l2arc headers would be freed while leaking their
associated compression buffers. Now the buffers are placed on
l2arc_free_on_write list for delayed freeing. This is similar to
what was already done to arc buffers that were supposed to be freed
concurrently with in-flight writes of those buffers.
In addition to fixing the discovered leaks this change also adds
some protective code to assert that a compression buffer associated
with a l2arc header is never leaked.
A new kstat l2_cdata_free_on_write is added. It keeps a count
of delayed compression buffer frees which previously would have
been leaks.
Tested by: Vitalij Satanivskij <[email protected]> et al
Requested by: many
MFC after: 2 weeks
Sponsored by: HybridCluster / ClusterHQ
References:
https://illumos.org/issues/5222
https://github.com/freebsd/freebsd/commit/b98f85d
http://thread.gmane.org/gmane.os.freebsd.current/155757/focus=155781
http://lists.open-zfs.org/pipermail/developer/2014-January/000455.html
http://lists.open-zfs.org/pipermail/developer/2014-February/000523.html
Ported-by: Tim Chase <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #3029
Diffstat (limited to 'module/zfs/dsl_bookmark.c')
0 files changed, 0 insertions, 0 deletions