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];
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
{
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);
init_waitqueue_head(&smcd->lgrs_deleted);
return smcd;
-free_conn:
- kfree(smcd->conn);
free_smcd:
kfree(smcd);
return NULL;
list_del_init(&smcd->list);
mutex_unlock(&smcd_dev_list.mutex);
destroy_workqueue(smcd->event_wq);
- kfree(smcd->conn);
kfree(smcd);
}