Details
-
Improvement
-
Resolution: Fixed
-
Minor
-
None
-
3
-
9223372036854775807
Description
The OBD_FREE(ptr) macro will internally (via OBD_FREE_PRE()) assert that ptr != NULL, even though the kernel accepts kfree(NULL) without complaint.
It would make sense to remove the LASSERT(ptr) call from OBD_FREE_PRE() and change the callers to silently accept this case:
#define OBD_FREE(ptr, size) \ if (likely(ptr)) { \ OBD_FREE_PRE(ptr, size, "kfreed"); \ POISON(ptr, 0x5a, size); \ kfree(ptr); \ POISON_PTR(ptr); \ } #define OBD_SLAB_FREE(ptr, slab, size) \ if (likely(ptr)) { \ OBD_FREE_PRE(ptr, size, "slab-freed"); \ POISON(ptr, 0x5a, size); \ kmem_cache_free(slab, ptr); \ POISON_PTR(ptr); \ }
It isn't strictly needed for OBD_FREE_LARGE() since is_vmalloc_addr(ptr) will return false for a NULL pointer and fall back to OBD_FREE().