From 7ea1cbf5b2b5489ce1a5f408d3e101e0e7447205 Mon Sep 17 00:00:00 2001 From: behlendo Date: Wed, 5 Nov 2008 21:43:37 +0000 Subject: [PATCH] Add proper error handling for the case where a thread can not be created. Instead of asserting we simply abort the test, wait for any tasks we created to finish, and return -ESRCH back to the user space component. git-svn-id: https://outreach.scidac.gov/svn/spl/trunk@175 7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c --- modules/splat/splat-kmem.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/modules/splat/splat-kmem.c b/modules/splat/splat-kmem.c index 7e95b4af8..a9792b1a5 100644 --- a/modules/splat/splat-kmem.c +++ b/modules/splat/splat-kmem.c @@ -582,7 +582,7 @@ splat_kmem_test8_sc(struct file *file, void *arg, int size, int count) kthread_t *thr; struct timespec start, stop, delta; char cache_name[32]; - int i, j, threads = 32; + int i, j, rc = 0, threads = 32; kcp.kcp_magic = SPLAT_KMEM_TEST_MAGIC; kcp.kcp_file = file; @@ -611,7 +611,8 @@ splat_kmem_test8_sc(struct file *file, void *arg, int size, int count) splat_vprint(file, SPLAT_KMEM_TEST8_NAME, "Unable to create '%s' cache\n", SPLAT_KMEM_CACHE_NAME); - return -ENOMEM; + rc = -ENOMEM; + break; } start = current_kernel_time(); @@ -619,7 +620,10 @@ splat_kmem_test8_sc(struct file *file, void *arg, int size, int count) for (j = 0; j < threads; j++) { thr = thread_create(NULL, 0, splat_kmem_test8_thread, &kcp, 0, &p0, TS_RUN, minclsyspri); - ASSERT(thr != NULL); + if (thr == NULL) { + rc = -ESRCH; + break; + } spin_lock(&kcp.kcp_lock); kcp.kcp_threads++; spin_unlock(&kcp.kcp_lock); @@ -644,11 +648,14 @@ splat_kmem_test8_sc(struct file *file, void *arg, int size, int count) kmem_cache_destroy(kcp.kcp_cache); - if (kcp.kcp_rc) + if (!rc && kcp.kcp_rc) + rc = kcp.kcp_rc; + + if (rc) break; } - return kcp.kcp_rc; + return rc; } static int -- 2.40.0