Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp2078679imj; Fri, 8 Feb 2019 12:11:28 -0800 (PST) X-Google-Smtp-Source: AHgI3Ib8X6s9K6z8nekY2Ik4KD2tkUDChd13AZYCu75W5QhiVngGGb0uuTUM5WVi66luESdbcg6B X-Received: by 2002:a63:e445:: with SMTP id i5mr22114600pgk.307.1549656688225; Fri, 08 Feb 2019 12:11:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549656688; cv=none; d=google.com; s=arc-20160816; b=b6x5IHQI3c0fV+9VvDK6EyHiCdx85OcSf6FMHTd5qwjTOpG6K4W/y8AprDSc03E0Rj IwKLgue/yZ1QTVut3vusGcPniiGJUJuFNkAD2RhdIifBSaak2E7bLxhciM/B7pvkPOlN UUfAkJNz1sjNhTzKdQunCo1gDWbCXg6gL1ppWqlfEQM25KFyDQLPXQiHyWsigSj0DfqS kHlD89gzkPq2Aye5cWktk64HCN1MKh83S1Q8nXrC5ZCcgnz6QXEu42gcepPytBbogG47 tc4rOGfFxbPC7xuWWtr7ChgXivpxYdEDkr0IglkecPk8xSQDntGCMAFL+yG6XjtuMNFj p5Jg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=gbDyPgHcF8z5CeTITaSZDxy7ReTphgwmcpjEb3taYDE=; b=b5I1uh21czC9mUElFsBA9+QPNS3A6H/OpOIp+tbmH0z4Wdcj0/7giacpzpfnoCm/nS Mcm1HgOTR0zeJLtGRYh2jsLfBwyUnhkJ3eM8yd4uzI5aGk65F+Eg7l0o6DqHyfKDOGoR dZzGNlWBhQCkKY6Kqdixq4DTLsb8eVhqTdbiAECx3UkNBDPTuYDLsPthrahVZXFOvTsl /6mW5UgfCdRsmca7AqWzbQlNt4ONbA0rYACsUyWNC6We/KQd5iZzsYFawiQMkb5hA7BA fe0XOZSk5hCWvLLaoprshs5ya4Sh85YXMDumxTs1zxp6GuTZ3FgMWjm85VpgoM2latjk tBdA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v25si3112272pfg.135.2019.02.08.12.11.11; Fri, 08 Feb 2019 12:11:28 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727714AbfBHUKw (ORCPT + 99 others); Fri, 8 Feb 2019 15:10:52 -0500 Received: from fieldses.org ([173.255.197.46]:57048 "EHLO fieldses.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727305AbfBHUKt (ORCPT ); Fri, 8 Feb 2019 15:10:49 -0500 Received: by fieldses.org (Postfix, from userid 2815) id DC9C91E3B; Fri, 8 Feb 2019 15:10:48 -0500 (EST) From: "J. Bruce Fields" To: linux-nfs@vger.kernel.org Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Trond Myklebust , Jeff Layton , David Howells , Tejun Heo , Peter Zijlstra , Shaohua Li , Oleg Nesterov , "J. Bruce Fields" Subject: [PATCH 4/7] kthreads: allow cloning threads with different flags Date: Fri, 8 Feb 2019 15:10:44 -0500 Message-Id: <1549656647-25115-5-git-send-email-bfields@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549656647-25115-1-git-send-email-bfields@redhat.com> References: <1549656647-25115-1-git-send-email-bfields@redhat.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: "J. Bruce Fields" This is so knfsd can add CLONE_THREAD. Signed-off-by: J. Bruce Fields --- include/linux/kthread.h | 3 ++- kernel/kthread.c | 11 +++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/include/linux/kthread.h b/include/linux/kthread.h index 10b5836dfb2a..988aa77f9811 100644 --- a/include/linux/kthread.h +++ b/include/linux/kthread.h @@ -11,11 +11,12 @@ struct kthread_group { spinlock_t create_lock; struct list_head create_list; struct task_struct *task; + unsigned long flags; }; extern struct kthread_group kthreadd_default; -struct kthread_group *kthread_start_group(char *); +struct kthread_group *kthread_start_group(unsigned long, char *); void kthread_stop_group(struct kthread_group *); struct task_struct *kthread_group_create_on_node(struct kthread_group *, diff --git a/kernel/kthread.c b/kernel/kthread.c index b515557b98c9..e24ef5afa651 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -26,6 +26,7 @@ struct kthread_group kthreadd_default = { .name = "kthreadd", .create_lock = __SPIN_LOCK_UNLOCKED(kthreadd_default.create_lock), .create_list = LIST_HEAD_INIT(kthreadd_default.create_list), + .flags = CLONE_FS | CLONE_FILES | SIGCHLD, }; void wake_kthreadd(struct kthread_group *kg) @@ -33,7 +34,7 @@ void wake_kthreadd(struct kthread_group *kg) wake_up_process(kg->task); } -struct kthread_group *kthread_start_group(char *name) +struct kthread_group *kthread_start_group(unsigned long flags, char *name) { struct kthread_group *new; struct task_struct *task; @@ -44,6 +45,7 @@ struct kthread_group *kthread_start_group(char *name) spin_lock_init(&new->create_lock); INIT_LIST_HEAD(&new->create_list); new->name = name; + new->flags = flags; task = kthread_run(kthreadd, new, name); if (IS_ERR(task)) { kfree(new); @@ -292,7 +294,8 @@ int tsk_fork_get_node(struct task_struct *tsk) return NUMA_NO_NODE; } -static void create_kthread(struct kthread_create_info *create) +static void create_kthread(struct kthread_create_info *create, + unsigned long flags) { int pid; @@ -300,7 +303,7 @@ static void create_kthread(struct kthread_create_info *create) current->pref_node_fork = create->node; #endif /* We want our own signal handler (we take no signals by default). */ - pid = kernel_thread(kthread, create, CLONE_FS | CLONE_FILES | SIGCHLD); + pid = kernel_thread(kthread, create, flags); if (pid < 0) { /* If user was SIGKILLed, I release the structure. */ struct completion *done = xchg(&create->done, NULL); @@ -623,7 +626,7 @@ void kthread_do_work(struct kthread_group *kg) list_del_init(&create->list); spin_unlock(&kg->create_lock); - create_kthread(create); + create_kthread(create, kg->flags); spin_lock(&kg->create_lock); } -- 2.20.1