Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp6885pxa; Tue, 4 Aug 2020 14:57:09 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzNHZKn7X/Y4SOc3khii0lZIjSaWZY1eRAgQk1r7KcPtZmdXElz2EE44mQbo2sAvQRdNzOE X-Received: by 2002:a50:9d88:: with SMTP id w8mr11255ede.122.1596578228920; Tue, 04 Aug 2020 14:57:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596578228; cv=none; d=google.com; s=arc-20160816; b=i2W0fdGmfrzvPQseIPHJJzsXXAKmzNSOil+ap9EEnT++YAfEUS7m/fmXuY2nF/8pKS E4xPzC62VRGuWF/QcjdGOiIFwd9+pHVo738qntGuQ31fAxyFg87iai9aJu43lAhbWV1y nUDNeXb5bciDicDhvXeoB6UbfYqGleoYI6EdDU1GARwlTU6m9/86mKJvd6Ycc4iqHEzT Ztt3PLbAKYCgKRzR4hr3z/AZ+DRVEbYwImAbha6H27jlV7BZ/LtR/MVngrTcxo08kJew dSw0kXJzmRnkz6AEB6GeVsrVQFh2/eoJ7bcjroFnvlSn0ty/G+Kg2NCb8X8FsQlkNrDL kI3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=UccPpGQ4uKB6WoZTJl1MuCD8hOajsEsC2QDYvhe7OlI=; b=gSQTq3q7fLNZ8pWhxf7PBtY/CznW9D74V5CaJsx4zDxA9Ik6dZ4uQfBMzwFQWTMz4Y OhJ+l6Qyj/zo47jzDhxfxLWPM9vzFjf66+suDl8mipqINmj95dBvl1hXj5MiIYM3vwph V/uGlcMvMgIcgkzHQIqq8KvYPN0sP3hK/ZPFr02XP78jTNI/kqZT/Jo2D4Ywp8H2VAkj 8oGMLM94Zh3HcEp7QjAk3IcBJNPCU/k99Jrk9+XTrvgYwKDTErHbM23S0YZMhJgLoH5/ m++rvkgBE0JTuZVAO0J7hFNLfmrn63kjGdxnMkGj0CHpZ1BWI+0ObyvwWneb7DiBHeb0 G3ZQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=RsfTh8Ki; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dn10si28745ejc.547.2020.08.04.14.56.45; Tue, 04 Aug 2020 14:57:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=RsfTh8Ki; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728235AbgHDV40 (ORCPT + 99 others); Tue, 4 Aug 2020 17:56:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41518 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727015AbgHDV4Z (ORCPT ); Tue, 4 Aug 2020 17:56:25 -0400 Received: from mail-qt1-x843.google.com (mail-qt1-x843.google.com [IPv6:2607:f8b0:4864:20::843]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B0DBAC06174A for ; Tue, 4 Aug 2020 14:56:25 -0700 (PDT) Received: by mail-qt1-x843.google.com with SMTP id c12so23204233qtn.9 for ; Tue, 04 Aug 2020 14:56:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=UccPpGQ4uKB6WoZTJl1MuCD8hOajsEsC2QDYvhe7OlI=; b=RsfTh8KikBVqMMDscItiDVRzYzoyVI57OTTnIWzu8W2gMV2GTU7IFKjy65O4wutBgV xvCN/mshX97he/qdqN0r+aelpgxZmMzVa6faS+xe3OSsiv8Dph55Zzz0WpEazdM31ZgI i2J39gbosT7a1R3NfV630dSc4+sy+kmAI2Bj/jcMwi/Xx5KjBNUK4EAlnw4ToTHR3djN NSRF6a3NHZCsHyGifrlUhxJtoUAaKOeQ9/enFzrkY4pah1bNPNcGu3G4Vbt5CXFCUFWD jdiG1rYBJgrI9TzlS5VnB9bkvg8VNpgDCIPm/XqNU/ovg9tRF6J6ot1Dj1JaulfVjZke pdwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=UccPpGQ4uKB6WoZTJl1MuCD8hOajsEsC2QDYvhe7OlI=; b=XqpEl0CEFkhydfa+H5UlBF0ssusnQSFFQXadZUX76mXvUZyhYJ7Sl/vf0+ZWsAS1fn TFnVsvJNpADQXPt9H6JyeI/1M79LwRdqx7N96+qFGnoevNnjoIPwK1EvlUjeOr9s3e/n 1PKgrOQ1DTqJ3o2glHx8sSwQWq6VPmRchAeACPV49r7m8//LWWk+alf/UhPWO2gmvB60 /bjqvVHZXgajSg4ONnFbDoV4OAsDm6L9vVqwX2HXQa3nOvcv0Vld3ryiy/CJW0pl1BD2 V27WzSpPadP8wSp5ZluOlbS5c6+JMqMBDA9uK/TBeadBMFERggA93DtX9ITIRle/sMiw kl/g== X-Gm-Message-State: AOAM5331hC+/xsh78VlESbgocOf3rKI7bKLpkjbPrdpQ+zEU95Bx0Z40 CodSwH/F0E/K/8uEhQObLZ/kwl2OBQ9KNDB2ACtN86lQ X-Received: by 2002:ac8:67da:: with SMTP id r26mr180090qtp.332.1596578184361; Tue, 04 Aug 2020 14:56:24 -0700 (PDT) MIME-Version: 1.0 References: <20200601091231.3794350-1-chengzhihao1@huawei.com> <211afcd0-d5b3-5ac0-1fd1-dc789634a858@huawei.com> <9caa4860-975c-70bb-c8b9-737d1db9ead4@huawei.com> In-Reply-To: <9caa4860-975c-70bb-c8b9-737d1db9ead4@huawei.com> From: Richard Weinberger Date: Tue, 4 Aug 2020 23:56:13 +0200 Message-ID: Subject: Re: [PATCH] ubi: check kthread_should_stop() after the setting of task state To: Zhihao Cheng Cc: linux-mtd@lists.infradead.org, LKML , Richard Weinberger , "zhangyi (F)" Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Aug 4, 2020 at 4:58 AM Zhihao Cheng wrote: > Oh, you're thinking about influence by schedule(), I get it. But I think > it still works. Because the ubi_thread is still on runqueue, it will be > scheduled to execute later anyway. It will not get woken. This is the problem. > > op state of > ubi_thread on runqueue > set_current_state(TASK_INTERRUPTIBLE) TASK_INTERRUPTIBLE Yes > if (kthread_should_stop()) // not satisfy > TASK_INTERRUPTIBLE Yes > kthread_stop: > wake_up_process > ttwu_queue > ttwu_do_activate > ttwu_do_wakeup TASK_RUNNING Yes > schedule > __schedule(false) > > // prev->state is TASK_RUNNING, so we cannot move it from runqueue by > deactivate_task(). So just pick next task to execute, ubi_thread is > still on runqueue and will be scheduled to execute later. It will be in state TASK_RUNNING only if your check is reached. If kthread_stop() is called *before* your code: + if (kthread_should_stop()) { + set_current_state(TASK_RUNNING); + break; + } ...everything is fine. But there is still a race window between your if (kthread_should_stop()) and schedule() in the next line. So if kthread_stop() is called right *after* the if and *before* schedule(), the task state is still TASK_INTERRUPTIBLE --> schedule() will not return unless the task is explicitly woken, which does not happen. Before your patch, the race window was much larger, I fully agree, but your patch does not cure the problem it just makes it harder to hit. And using mdelay() to verify such a thing is also tricky because mdelay() will influence the task state. -- Thanks, //richard