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
This commit is contained in:
behlendo 2008-11-05 21:43:37 +00:00
parent 36833ea4e4
commit 7ea1cbf5b2
1 changed files with 12 additions and 5 deletions

View File

@ -582,7 +582,7 @@ splat_kmem_test8_sc(struct file *file, void *arg, int size, int count)
kthread_t *thr; kthread_t *thr;
struct timespec start, stop, delta; struct timespec start, stop, delta;
char cache_name[32]; 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_magic = SPLAT_KMEM_TEST_MAGIC;
kcp.kcp_file = file; 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, splat_vprint(file, SPLAT_KMEM_TEST8_NAME,
"Unable to create '%s' cache\n", "Unable to create '%s' cache\n",
SPLAT_KMEM_CACHE_NAME); SPLAT_KMEM_CACHE_NAME);
return -ENOMEM; rc = -ENOMEM;
break;
} }
start = current_kernel_time(); 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++) { for (j = 0; j < threads; j++) {
thr = thread_create(NULL, 0, splat_kmem_test8_thread, thr = thread_create(NULL, 0, splat_kmem_test8_thread,
&kcp, 0, &p0, TS_RUN, minclsyspri); &kcp, 0, &p0, TS_RUN, minclsyspri);
ASSERT(thr != NULL); if (thr == NULL) {
rc = -ESRCH;
break;
}
spin_lock(&kcp.kcp_lock); spin_lock(&kcp.kcp_lock);
kcp.kcp_threads++; kcp.kcp_threads++;
spin_unlock(&kcp.kcp_lock); 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); kmem_cache_destroy(kcp.kcp_cache);
if (kcp.kcp_rc) if (!rc && kcp.kcp_rc)
rc = kcp.kcp_rc;
if (rc)
break; break;
} }
return kcp.kcp_rc; return rc;
} }
static int static int