PM: hibernate: Use flexible array for CRC uncompressed buffers
Subsystems (2)
PATCH 1/1 PM: hibernate: Use flexible array for CRC uncompressed buffers
The CRC uncompressed buffer pointer array has the same lifetime as struct crc_data, but it is currently allocated separately. That adds another allocation failure path and a matching cleanup branch without providing any extra flexibility.
Store the pointer array as a flexible array member and allocate it together with the crc_data using kzalloc_flex(). The array remains zero-initialized, while the allocation and error handling become simpler.
Assisted-by Codex:GPT-5.5
Signed-off-by Rosen Penev <[email protected]>
--- kernel/power/swap.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-)
kernel/power/swap.c +3 -10
@@ -570,29 +570,23 @@ struct crc_data {wait_queue_head_t done;/* crc update done */ u32 *crc32;/* points to handle's crc32 */ size_t **unc_len;/* uncompressed lengths */ -unsigned char **unc;/* uncompressed data */ +unsigned char *unc[];/* uncompressed data */ };static struct crc_data *alloc_crc_data (int nr_threads) {struct crc_data *crc; - crc =kzalloc_obj (*crc); + crc =kzalloc_flex (*crc, unc, nr_threads);if (!crc)return NULL ; - crc->unc =kcalloc (nr_threads,sizeof (*crc->unc),GFP_KERNEL ); -if (!crc->unc) - goto err_free_crc; - crc->unc_len =kzalloc_objs (*crc->unc_len, nr_threads);if (!crc->unc_len) - goto err_free_unc; + goto err_free_crc;return crc; -err_free_unc: -kfree (crc->unc); err_free_crc:kfree (crc);return NULL ;
@@ -607,7 +601,6 @@ static void free_crc_data(struct crc_data *crc)kthread_stop (crc->thr);kfree (crc->unc_len); -kfree (crc->unc);kfree (crc); }
Signature · 1 line
2.54.0