[SCSI] libiscsi_tcp: fix LLD data allocation
Have libiscsi_tcp have upper layers allocate the LLD data along with the iscsi_cls_conn struct, so it is refcounted. Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
Родитель
03adb5f912
Коммит
74dcd0ec73
|
@ -1084,7 +1084,8 @@ iscsi_tcp_conn_setup(struct iscsi_cls_session *cls_session, int dd_data_size,
|
|||
struct iscsi_cls_conn *cls_conn;
|
||||
struct iscsi_tcp_conn *tcp_conn;
|
||||
|
||||
cls_conn = iscsi_conn_setup(cls_session, sizeof(*tcp_conn), conn_idx);
|
||||
cls_conn = iscsi_conn_setup(cls_session,
|
||||
sizeof(*tcp_conn) + dd_data_size, conn_idx);
|
||||
if (!cls_conn)
|
||||
return NULL;
|
||||
conn = cls_conn->dd_data;
|
||||
|
@ -1096,22 +1097,13 @@ iscsi_tcp_conn_setup(struct iscsi_cls_session *cls_session, int dd_data_size,
|
|||
|
||||
tcp_conn = conn->dd_data;
|
||||
tcp_conn->iscsi_conn = conn;
|
||||
|
||||
tcp_conn->dd_data = kzalloc(dd_data_size, GFP_KERNEL);
|
||||
if (!tcp_conn->dd_data) {
|
||||
iscsi_conn_teardown(cls_conn);
|
||||
return NULL;
|
||||
}
|
||||
tcp_conn->dd_data = conn->dd_data + sizeof(*tcp_conn);
|
||||
return cls_conn;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(iscsi_tcp_conn_setup);
|
||||
|
||||
void iscsi_tcp_conn_teardown(struct iscsi_cls_conn *cls_conn)
|
||||
{
|
||||
struct iscsi_conn *conn = cls_conn->dd_data;
|
||||
struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
|
||||
|
||||
kfree(tcp_conn->dd_data);
|
||||
iscsi_conn_teardown(cls_conn);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(iscsi_tcp_conn_teardown);
|
||||
|
|
Загрузка…
Ссылка в новой задаче