Skip to content

Commit

Permalink
Fix --enable-debug-kmem-tracking option
Browse files Browse the repository at this point in the history
Re-order initialization in spl_kmem_init to allow for kmem tracing
to work.  The spl_kmem_init function calls taskq_create prior to
initializing the tracking (calling spl_kmem_init_tracking).  Since
taskq_create uses kmem_alloc, NULL dereferences occur because the
global kmem_list hasn't had its next & prev pointers initialized yet.

This commit moves the calls to spl_kmem_init_tracking earlier in the
spl_kmem_init function in order that the subsequent kmem_alloc calls
(by taskq_create) work properly.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes openzfs#243
  • Loading branch information
dweeezil authored and behlendorf committed Jun 18, 2013
1 parent 99c452b commit 5c7a036
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions module/spl/spl-kmem.c
Original file line number Diff line number Diff line change
Expand Up @@ -2418,20 +2418,21 @@ spl_kmem_init(void)
int rc = 0;
SENTRY;

init_rwsem(&spl_kmem_cache_sem);
INIT_LIST_HEAD(&spl_kmem_cache_list);
spl_kmem_cache_taskq = taskq_create("spl_kmem_cache",
1, maxclsyspri, 1, 32, TASKQ_PREPOPULATE);

spl_register_shrinker(&spl_kmem_cache_shrinker);

#ifdef DEBUG_KMEM
kmem_alloc_used_set(0);
vmem_alloc_used_set(0);

spl_kmem_init_tracking(&kmem_list, &kmem_lock, KMEM_TABLE_SIZE);
spl_kmem_init_tracking(&vmem_list, &vmem_lock, VMEM_TABLE_SIZE);
#endif

init_rwsem(&spl_kmem_cache_sem);
INIT_LIST_HEAD(&spl_kmem_cache_list);
spl_kmem_cache_taskq = taskq_create("spl_kmem_cache",
1, maxclsyspri, 1, 32, TASKQ_PREPOPULATE);

spl_register_shrinker(&spl_kmem_cache_shrinker);

SRETURN(rc);
}

Expand Down

0 comments on commit 5c7a036

Please sign in to comment.