mirror of
https://github.com/torvalds/linux
synced 2026-07-21 17:50:43 +09:00
smc: Use flexible array for SMCD connections
Store the per-DMB connection pointers in the SMCD device allocation instead of allocating a separate connection array. This keeps the connection table tied to the SMCD device lifetime and simplifies the allocation and cleanup paths. Signed-off-by: Rosen Penev <rosenp@gmail.com> Reviewed-by: Sidraya Jayagond <sidraya@linux.ibm.com> Link: https://patch.msgid.link/20260519005206.628071-1-rosenp@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
a2b5e31b66
commit
5026c42d7f
@@ -40,7 +40,6 @@ struct smcd_dev {
|
||||
struct dibs_dev *dibs;
|
||||
struct list_head list;
|
||||
spinlock_t lock;
|
||||
struct smc_connection **conn;
|
||||
struct list_head vlan;
|
||||
struct workqueue_struct *event_wq;
|
||||
u8 pnetid[SMC_MAX_PNETID_LEN];
|
||||
@@ -50,6 +49,7 @@ struct smcd_dev {
|
||||
atomic_t lgr_cnt;
|
||||
wait_queue_head_t lgrs_deleted;
|
||||
u8 going_away : 1;
|
||||
struct smc_connection *conn[];
|
||||
};
|
||||
|
||||
#define SMC_HS_CTRL_NAME_MAX 16
|
||||
|
||||
@@ -467,17 +467,14 @@ static struct smcd_dev *smcd_alloc_dev(const char *name, int max_dmbs)
|
||||
{
|
||||
struct smcd_dev *smcd;
|
||||
|
||||
smcd = kzalloc_obj(*smcd);
|
||||
smcd = kzalloc_flex(*smcd, conn, max_dmbs);
|
||||
if (!smcd)
|
||||
return NULL;
|
||||
smcd->conn = kzalloc_objs(struct smc_connection *, max_dmbs);
|
||||
if (!smcd->conn)
|
||||
goto free_smcd;
|
||||
|
||||
smcd->event_wq = alloc_ordered_workqueue("ism_evt_wq-%s)",
|
||||
WQ_MEM_RECLAIM, name);
|
||||
if (!smcd->event_wq)
|
||||
goto free_conn;
|
||||
goto free_smcd;
|
||||
|
||||
spin_lock_init(&smcd->lock);
|
||||
spin_lock_init(&smcd->lgr_lock);
|
||||
@@ -486,8 +483,6 @@ static struct smcd_dev *smcd_alloc_dev(const char *name, int max_dmbs)
|
||||
init_waitqueue_head(&smcd->lgrs_deleted);
|
||||
return smcd;
|
||||
|
||||
free_conn:
|
||||
kfree(smcd->conn);
|
||||
free_smcd:
|
||||
kfree(smcd);
|
||||
return NULL;
|
||||
@@ -557,7 +552,6 @@ static void smcd_unregister_dev(struct dibs_dev *dibs)
|
||||
list_del_init(&smcd->list);
|
||||
mutex_unlock(&smcd_dev_list.mutex);
|
||||
destroy_workqueue(smcd->event_wq);
|
||||
kfree(smcd->conn);
|
||||
kfree(smcd);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user