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);