[SCSI] libiscsi, iscsi_tcp: iscsi pool cleanup
iscsi_pool_init simplified iscsi_pool_init currently has a lot of duplicate kfree() calls it does when some allocation fails. This patch simplifies the code a little by using iscsi_pool_free to tear down the pool in case of an error. iscsi_pool_init also returns a copy of the item array to the caller. Not all callers use this array, so we make it optional. Instead of allocating a second array and return that, allocate just one array, of twice the size. Update users of iscsi_pool_{init,free} This patch drops the (now useless) second argument to iscsi_pool_free, and updates all callers. It also removes the ctask->r2ts array, which was never used anyway. Since the items argument to iscsi_pool_init is now optional, we can pass NULL instead. Signed-off-by: Olaf Kirch <olaf.kirch@oracle.com> Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
committed by
James Bottomley
parent
38ad03de3f
commit
6320377fd9
@@ -1998,8 +1998,7 @@ iscsi_r2tpool_alloc(struct iscsi_session *session)
|
||||
*/
|
||||
|
||||
/* R2T pool */
|
||||
if (iscsi_pool_init(&tcp_ctask->r2tpool, session->max_r2t * 4,
|
||||
(void***)&tcp_ctask->r2ts,
|
||||
if (iscsi_pool_init(&tcp_ctask->r2tpool, session->max_r2t * 4, NULL,
|
||||
sizeof(struct iscsi_r2t_info))) {
|
||||
goto r2t_alloc_fail;
|
||||
}
|
||||
@@ -2008,8 +2007,7 @@ iscsi_r2tpool_alloc(struct iscsi_session *session)
|
||||
tcp_ctask->r2tqueue = kfifo_alloc(
|
||||
session->max_r2t * 4 * sizeof(void*), GFP_KERNEL, NULL);
|
||||
if (tcp_ctask->r2tqueue == ERR_PTR(-ENOMEM)) {
|
||||
iscsi_pool_free(&tcp_ctask->r2tpool,
|
||||
(void**)tcp_ctask->r2ts);
|
||||
iscsi_pool_free(&tcp_ctask->r2tpool);
|
||||
goto r2t_alloc_fail;
|
||||
}
|
||||
}
|
||||
@@ -2022,8 +2020,7 @@ r2t_alloc_fail:
|
||||
struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
|
||||
|
||||
kfifo_free(tcp_ctask->r2tqueue);
|
||||
iscsi_pool_free(&tcp_ctask->r2tpool,
|
||||
(void**)tcp_ctask->r2ts);
|
||||
iscsi_pool_free(&tcp_ctask->r2tpool);
|
||||
}
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -2038,8 +2035,7 @@ iscsi_r2tpool_free(struct iscsi_session *session)
|
||||
struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
|
||||
|
||||
kfifo_free(tcp_ctask->r2tqueue);
|
||||
iscsi_pool_free(&tcp_ctask->r2tpool,
|
||||
(void**)tcp_ctask->r2ts);
|
||||
iscsi_pool_free(&tcp_ctask->r2tpool);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user