aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-07-20 21:28:03 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2023-07-20 21:28:03 -0400
commit71ed9f183ba9a2cb4230353b7ae62ac335c53c7c (patch)
tree8fb4d8e4b49a8506b107927c3fb97f9afd9b6172
parentded0160563b045b61e79949f07bed903e98b6528 (diff)
downloadbcachefs-tools-71ed9f183ba9a2cb4230353b7ae62ac335c53c7c.tar.gz
Run shrinkers when pthread_create fails
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--linux/kthread.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/linux/kthread.c b/linux/kthread.c
index 134aeeef..17830e5f 100644
--- a/linux/kthread.c
+++ b/linux/kthread.c
@@ -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);