[LU-16890] allow OBD_FREE() to ignore NULL pointers Created: 12/Jun/23 Updated: 16/Aug/23 Resolved: 09/Jul/23 |
|
| Status: | Resolved |
| Project: | Lustre |
| Component/s: | None |
| Affects Version/s: | None |
| Fix Version/s: | Lustre 2.16.0 |
| Type: | Improvement | Priority: | Minor |
| Reporter: | Andreas Dilger | Assignee: | Arshad Hussain |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | easy | ||
| Issue Links: |
|
||||||||
| Severity: | 3 | ||||||||
| Rank (Obsolete): | 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(). |
| Comments |
| Comment by Gerrit Updater [ 15/Jun/23 ] |
|
"Arshad Hussain <arshad.hussain@aeoncomputing.com>" uploaded a new patch: https://review.whamcloud.com/c/fs/lustre-release/+/51332 |
| Comment by Gerrit Updater [ 08/Jul/23 ] |
|
"Oleg Drokin <green@whamcloud.com>" merged in patch https://review.whamcloud.com/c/fs/lustre-release/+/51332/ |
| Comment by Peter Jones [ 09/Jul/23 ] |
|
Landed for 2.16 |