[PATCH 2/5] [LIO-Target]: Convert iscsi_datain_req_t to use structkmem_cache

From: Nicholas A. Bellinger
Date: Fri Jan 09 2009 - 15:54:38 EST


>From 480de313d016c482ff8622d2195231e1475f8275 Mon Sep 17 00:00:00 2001
From: Nicholas Bellinger <nab@xxxxxxxxxxxxxxx>
Date: Fri, 9 Jan 2009 10:37:19 -0800
Subject: [PATCH 2/5] [LIO-Target]: Convert iscsi_datain_req_t to use struct kmem_cache

This patch converts usage of the structure iscsi_datain_req_t to use
struct kmem_cache *lio_dr_cache.

Signed-off-by: Nicholas A. Bellinger <nab@xxxxxxxxxxxxxxx>
---
drivers/lio-core/iscsi_target.c | 11 +++++++++++
drivers/lio-core/iscsi_target_datain_values.c | 8 ++++----
2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/drivers/lio-core/iscsi_target.c b/drivers/lio-core/iscsi_target.c
index 5c73c82..77c0e52 100644
--- a/drivers/lio-core/iscsi_target.c
+++ b/drivers/lio-core/iscsi_target.c
@@ -97,6 +97,7 @@ iscsi_global_t *iscsi_global = NULL;
struct kmem_cache *lio_cmd_cache = NULL;
struct kmem_cache *lio_sess_cache = NULL;
struct kmem_cache *lio_qr_cache = NULL;
+struct kmem_cache *lio_dr_cache = NULL;

extern int se_allocate_rl_cmd (se_cmd_t *, unsigned char *, u64);
extern int iscsi_build_report_luns_response (iscsi_cmd_t *);
@@ -1125,6 +1126,13 @@ static int iscsi_target_detect(void)
goto out;
}

+ if (!(lio_dr_cache = kmem_cache_create("lio_dr_cache",
+ sizeof(iscsi_datain_req_t), __alignof__(iscsi_datain_req_t),
+ 0, NULL))) {
+ printk(KERN_ERR "Unable to kmem_cache_create() for lio_dr_cache\n");
+ goto out;
+ }
+
if (core_load_discovery_tpg() < 0)
goto out;

@@ -1140,6 +1148,8 @@ out:
kmem_cache_destroy(lio_sess_cache);
if (lio_qr_cache)
kmem_cache_destroy(lio_qr_cache);
+ if (lio_dr_cache)
+ kmem_cache_destroy(lio_dr_cache);
iscsi_deallocate_thread_sets(TARGET);
iscsi_target_deregister_configfs();
#ifdef CONFIG_PROC_FS
@@ -1193,6 +1203,7 @@ extern void iscsi_target_release_phase2 (void)
kmem_cache_destroy(lio_cmd_cache);
kmem_cache_destroy(lio_sess_cache);
kmem_cache_destroy(lio_qr_cache);
+ kmem_cache_destroy(lio_dr_cache);
core_release_discovery_tpg();
core_release_tiqns();
plugin_deregister_class(PLUGIN_TYPE_FRONTEND);
diff --git a/drivers/lio-core/iscsi_target_datain_values.c b/drivers/lio-core/iscsi_target_datain_values.c
index 219d685..268f3fe 100644
--- a/drivers/lio-core/iscsi_target_datain_values.c
+++ b/drivers/lio-core/iscsi_target_datain_values.c
@@ -50,16 +50,16 @@
#undef ISCSI_TARGET_DATAIN_VALUES_C

extern iscsi_global_t *iscsi_global;
+extern struct kmem_cache *lio_dr_cache;

extern iscsi_datain_req_t *iscsi_allocate_datain_req (void)
{
iscsi_datain_req_t *dr;

- if (!(dr = kmalloc(sizeof(iscsi_datain_req_t), GFP_ATOMIC))) {
+ if (!(dr = kmem_cache_zalloc(lio_dr_cache, GFP_ATOMIC))) {
TRACE_ERROR("Unable to allocate memory for iscsi_datain_req_t\n");
return(NULL);
}
- memset(dr, 0, sizeof(iscsi_datain_req_t));

return(dr);
}
@@ -83,7 +83,7 @@ extern void iscsi_free_datain_req (
REMOVE_ENTRY_FROM_LIST(dr, cmd->datain_req_head, cmd->datain_req_tail);
spin_unlock(&cmd->datain_lock);

- kfree(dr);
+ kmem_cache_free(lio_dr_cache, dr);

return;
}
@@ -97,7 +97,7 @@ extern void iscsi_free_all_datain_reqs (
dr = cmd->datain_req_head;
while (dr) {
dr_next = dr->next;
- kfree(dr);
+ kmem_cache_free(lio_dr_cache, dr);
dr = dr_next;
}
cmd->datain_req_head = cmd->datain_req_tail = NULL;
--
1.5.4.1



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/