[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:
committed by
James Bottomley
parent
03adb5f912
commit
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_cls_conn *cls_conn;
|
||||||
struct iscsi_tcp_conn *tcp_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)
|
if (!cls_conn)
|
||||||
return NULL;
|
return NULL;
|
||||||
conn = cls_conn->dd_data;
|
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 = conn->dd_data;
|
||||||
tcp_conn->iscsi_conn = conn;
|
tcp_conn->iscsi_conn = conn;
|
||||||
|
tcp_conn->dd_data = conn->dd_data + sizeof(*tcp_conn);
|
||||||
tcp_conn->dd_data = kzalloc(dd_data_size, GFP_KERNEL);
|
|
||||||
if (!tcp_conn->dd_data) {
|
|
||||||
iscsi_conn_teardown(cls_conn);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return cls_conn;
|
return cls_conn;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(iscsi_tcp_conn_setup);
|
EXPORT_SYMBOL_GPL(iscsi_tcp_conn_setup);
|
||||||
|
|
||||||
void iscsi_tcp_conn_teardown(struct iscsi_cls_conn *cls_conn)
|
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);
|
iscsi_conn_teardown(cls_conn);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(iscsi_tcp_conn_teardown);
|
EXPORT_SYMBOL_GPL(iscsi_tcp_conn_teardown);
|
||||||
|
Reference in New Issue
Block a user