Received: by 2002:a05:7412:419a:b0:f3:1519:9f41 with SMTP id i26csp4022555rdh; Tue, 28 Nov 2023 09:41:02 -0800 (PST) X-Google-Smtp-Source: AGHT+IF0m/pQ0/0n4wXYRHJkijo0BiZmDCGPt2ioGBl3NRWNIEniw6n9ycSJefguUrd6oR6fe0xf X-Received: by 2002:a05:6a21:2c83:b0:18a:d4c5:2842 with SMTP id ua3-20020a056a212c8300b0018ad4c52842mr11533903pzb.33.1701193262420; Tue, 28 Nov 2023 09:41:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701193262; cv=none; d=google.com; s=arc-20160816; b=hAbZsUkkf8slB/sL979Kdwj16wI4kj2vqG5jlIhW/YKolY3SMqY6Y4ArVy+GpyygtB oBQUZcXRme7s8G65T1pYT47CKSHBHTT/ZBAfQGByrv96tidJl3FaCTB75NW5XdZFZfD3 X3jW9ijV6lUuULikkA2v6FT3oKyGRpv++QaQUY1PCwCQMvmARZE9710uXjvahhLwMmrq SLfaZdLwO4sLlei5/4z6eVWoTaFJlb/Tm5utnE0h0+Z5jF9GtK+HO1p74DO4rVmwKWE5 QaM5up3/4daTmAyQUbTNvCLUWuYYx9AzANfG4CKovdx9PksD+6SpO1Za8cUbZwj3KIdW p50w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:dkim-signature:date; bh=INs2zZgjKSxCudQ4urP1DNFRoEn0+TxPVLEnF4N6OJI=; fh=nU5ZzPZJFLtJoiMzNcpjKxFxUjc2jjAzkNy0diz9gP8=; b=vgR8ZHBFq4DRPBJTCCRNcH/8+Rm/RE8JWYyNj3XkQyocQl7/tTV9MzAJcZEhWa8LD9 WlldZevdUdW27GmifPcmKabdOSpPGS3sDz2PAWwLKDJZgAxjl22NA7I3tXnJHNkEYlpi ufIaBWii//lZFTrUTTnhFZxsNWhGlu8PY08zPO9X4liYM+fv1S4ci1C2dimTISXDjTfN +jZC8hMC469ezRcBezFdTOMxgm2CPalM4N3j+7ycpEROe7coDLcHAd7wA2MYWhS8oz29 7+wJE8l1jdF1+raeSPgLZx4T1LuD+amdJDFHX+rjikp/E3vf+qy8bAfh5EnON4j+qQ0I bVPA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=b302NC3g; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Return-Path: Received: from groat.vger.email (groat.vger.email. [23.128.96.35]) by mx.google.com with ESMTPS id n16-20020a635910000000b005b9b68add80si12595753pgb.361.2023.11.28.09.41.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Nov 2023 09:41:02 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) client-ip=23.128.96.35; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=b302NC3g; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id 3398780A49BA; Tue, 28 Nov 2023 09:40:45 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345412AbjK1RkS (ORCPT + 99 others); Tue, 28 Nov 2023 12:40:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60174 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345347AbjK1RkN (ORCPT ); Tue, 28 Nov 2023 12:40:13 -0500 Received: from out-172.mta0.migadu.com (out-172.mta0.migadu.com [91.218.175.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8E518D64 for ; Tue, 28 Nov 2023 09:40:18 -0800 (PST) Date: Tue, 28 Nov 2023 12:40:12 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1701193216; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=INs2zZgjKSxCudQ4urP1DNFRoEn0+TxPVLEnF4N6OJI=; b=b302NC3gfpP27hEZZOIe+T5tsmwvJVErzX8kUCHeWMbrFdst8W4meCK43eU2fKX6vAsCw2 yAJLib84C2pCW7vxReaCpzLzdEjmigAzL80YQak+PVNIqTxVNEohLWyCvpliBiiToKYVMB dFN7lH9hwG/YQT7CCKR2rn17QKmKzDM= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Kent Overstreet To: Petr Mladek Cc: linux-kernel@vger.kernel.org, Nicholas Piggin , Mike Christie , Zqiang , Andrew Morton Subject: Re: [PATCH] kthread: kthread_should_stop() checks if we're a kthread Message-ID: <20231128174012.bfno4f3matn3d7cw@moria.home.lan> References: <20231120221503.3378095-1-kent.overstreet@linux.dev> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Tue, 28 Nov 2023 09:40:45 -0800 (PST) On Tue, Nov 28, 2023 at 10:30:49AM +0100, Petr Mladek wrote: > Adding Andrew into Cc. He usually takes changes in kernel/kthread.c. > > On Mon 2023-11-20 17:15:03, Kent Overstreet wrote: > > bcachefs has a fair amount of code that may or may not be running from a > > kthread (it may instead be called by a userspace ioctl); having > > kthread_should_stop() check if we're a kthread enables a fair bit of > > cleanup and makes it safer to use. > > > > Signed-off-by: Kent Overstreet > > --- > > kernel/kthread.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/kernel/kthread.c b/kernel/kthread.c > > index 1eea53050bab..fe6090ddf414 100644 > > --- a/kernel/kthread.c > > +++ b/kernel/kthread.c > > @@ -155,7 +155,8 @@ void free_kthread_struct(struct task_struct *k) > > */ > > bool kthread_should_stop(void) > > { > > - return test_bit(KTHREAD_SHOULD_STOP, &to_kthread(current)->flags); > > + return (current->flags & PF_KTHREAD) && > > + test_bit(KTHREAD_SHOULD_STOP, &to_kthread(current)->flags); > > } > > EXPORT_SYMBOL(kthread_should_stop); > > I agree that it makes the API more safe because &to_kthread(current) > is NULL when the process is not a kthread. > > Well, I do not like the idea of quietly ignoring a misuse of > the kthread_*() API. I would personally prefer to do: It's only a misuse in the most pedantic sense, IMO. Is it ever possible that with this change calling kthread_should_stop() from a non-kthread could cause a problem? > > // define this in include/linux/kthread.h > static inline bool in_kthread(void) > { > return current->flags & PF_KTHREAD > } > > // add WARN() into kthread_should_stop() > bool kthread_should_stop(void) > { > if (WARN_ON_ONCE(!in_kthread)) > return false; > > return test_bit(KTHREAD_SHOULD_STOP, &to_kthread(current)->flags); > } > EXPORT_SYMBOL(kthread_should_stop); > > > And use the following in bcachefs() code: > > if (in_kthread() && kthread_should_stop()) > goto exit; That's what bcachefs code does today, and forgetting to check in_kthread() is a real footgun - particularly for other people starting to work on the code. So I could do a bch2_in_kthread() instead that does the in_kthread( check, but then I have to make sure that people know to use bch2_in_kthread() instead of in_kthread(). Not ideal.