]> git.sesse.net Git - bcachefs-tools-debian/commitdiff
Run shrinkers when pthread_create fails
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 21 Jul 2023 01:28:03 +0000 (21:28 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Fri, 21 Jul 2023 01:28:03 +0000 (21:28 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
linux/kthread.c

index 134aeeef2c8125f160c1e1c7c7db4c798cf2e9e9..17830e5fd7b4b30250c49abc8ac15b2bde67742a 100644 (file)
@@ -80,7 +80,13 @@ struct task_struct *kthread_create(int (*thread_fn)(void *data),
        pthread_attr_init(&attr);
        pthread_attr_setstacksize(&attr, 32 << 10);
 
-       ret = pthread_create(&p->thread, &attr, kthread_start_fn, p);
+       for (unsigned i = 0; i < 10; i++) {
+               ret = pthread_create(&p->thread, &attr, kthread_start_fn, p);
+               if (!ret)
+                       break;
+
+               run_shrinkers(GFP_KERNEL, true);
+       }
        if (ret)
                return ERR_PTR(-ret);
        pthread_setname_np(p->thread, p->comm);