]> granicus.if.org Git - zfs/commitdiff
Add proper error handling for the case where a thread can not be
authorbehlendo <behlendo@7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c>
Wed, 5 Nov 2008 21:43:37 +0000 (21:43 +0000)
committerbehlendo <behlendo@7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c>
Wed, 5 Nov 2008 21:43:37 +0000 (21:43 +0000)
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

index 7e95b4af887cda8294f5769c3c8859f8c72ed59b..a9792b1a5927bffd2bbae5dac83a53f3e0f2ff0b 100644 (file)
@@ -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