Page MenuHomeFreeBSD

stand: evict zfs_alloc/zfs_free
Needs ReviewPublic

Authored by kevans on May 31 2019, 6:59 PM.
Tags
None
Referenced Files
Unknown Object (File)
Wed, Aug 26, 7:20 AM
Unknown Object (File)
Tue, Aug 25, 10:49 PM
Unknown Object (File)
Tue, Aug 25, 7:29 PM
Unknown Object (File)
Sun, Aug 16, 7:00 PM
Unknown Object (File)
Wed, Aug 12, 11:42 PM
Unknown Object (File)
Wed, Aug 12, 7:52 PM
Unknown Object (File)
Wed, Aug 12, 5:06 PM
Unknown Object (File)
Wed, Aug 12, 2:13 PM
Subscribers

Details

Summary

zfs_alloc/zfs_free were meant to be for temporary allocations, but they were occasionally used for more long-lasting allocations (e.g. vdev_raidz_map_alloc). This has problems, as one must carefully free() memory in the exact opposite order that it was allocated (size-wise) due to the error checking done by zfs_free (freed_ptr == zfs_temp_ptr - sz, i.e. removing sz bytes from our block of memory better put us back at the address we're freeing).

Rectify this by removing them and just replacing uses with malloc/free. We weren't gaining much from the panic anyways, and it's error-prone.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Skipped
Unit
Tests Skipped
Build Status
Buildable 24632

Event Timeline

There is problem now. The zfs_alloc was "always" succeeding but malloc can fail, therefore we can not just replace here, but we also need to add checks.

Take two, a little better... some of the raidz verification stuff needs a small API revamp or reconsideration if we want to try and recover from those, and we may want to improve diagnostics a little bit in other areas.