diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2023-07-20 21:28:03 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-07-20 21:28:03 -0400 |
commit | 71ed9f183ba9a2cb4230353b7ae62ac335c53c7c (patch) | |
tree | 8fb4d8e4b49a8506b107927c3fb97f9afd9b6172 | |
parent | ded0160563b045b61e79949f07bed903e98b6528 (diff) | |
download | bcachefs-tools-71ed9f183ba9a2cb4230353b7ae62ac335c53c7c.tar.gz |
Run shrinkers when pthread_create fails
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r-- | linux/kthread.c | 8 |
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); |