| From 74dcd0ec735ba9c5bef254b2f6e53068cf3f9ff0 Mon Sep 17 00:00:00 2001 |
| From: Mike Christie <michaelc@cs.wisc.edu> |
| Date: Fri, 24 Jun 2011 15:11:55 -0500 |
| Subject: [SCSI] libiscsi_tcp: fix LLD data allocation |
| |
| From: Mike Christie <michaelc@cs.wisc.edu> |
| |
| commit 74dcd0ec735ba9c5bef254b2f6e53068cf3f9ff0 upstream. |
| |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/scsi/libiscsi_tcp.c | 14 +++----------- |
| 1 file changed, 3 insertions(+), 11 deletions(-) |
| |
| --- a/drivers/scsi/libiscsi_tcp.c |
| +++ b/drivers/scsi/libiscsi_tcp.c |
| @@ -1072,7 +1072,8 @@ iscsi_tcp_conn_setup(struct iscsi_cls_se |
| 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; |
| @@ -1084,22 +1085,13 @@ iscsi_tcp_conn_setup(struct iscsi_cls_se |
| |
| 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); |