Received: by 2002:a05:6358:45e:b0:b5:b6eb:e1f9 with SMTP id 30csp723287rwe; Wed, 31 Aug 2022 09:52:06 -0700 (PDT) X-Google-Smtp-Source: AA6agR4Ee47Vr3j2Y4UgoSJICK1Ljqf+vKt7q4GvpA1w50qO9ydu4Uq6ulNMiQOS2Xt62rlWVls5 X-Received: by 2002:a17:906:4795:b0:73d:d6e8:52a7 with SMTP id cw21-20020a170906479500b0073dd6e852a7mr19456014ejc.59.1661964725755; Wed, 31 Aug 2022 09:52:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1661964725; cv=none; d=google.com; s=arc-20160816; b=l7VPOd754mLUyt7f8S5l9QltKr+oAnf6cSte8gjbhyIF/mIRbLq7wLSZWA2HdPx26C 5kgvat2p4yEaT8qAthZ025dF2AbVxpgwUoBU1AUTG9pZQAQoehVZvCFhLEzxJ2HfN1sE 9I2XLAX4OIED4dc0Ddu+34oV7DJm5yA2vHZ/FYyWR3V8oRl2YqO1owLKCGxKUIqN5LJ1 8HVf1sNVz2ESQsG4Ph03i+BSdbsBXUSSY5hnScZHDc6kv44elpPWpIeZ2Wlil8XQPrlB OpUJFIeBAMspjMqylb/3zWvno4euGI/Xh+r//8+TxOKIHlMaYuY6W3FyPXFmLFc0QBaf V0Lw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=VUZHas3HzWtP/GQxGSmQozTHiX9AEFLKITV3F2aFPNA=; b=MF2zWWDydF1qZg9BNLk4rpkzW0bXrER0/Xw4Yr9DyqO7QJsq4FleJmzAEZMYNXUp/9 tv1ym3gmCzobVBFfuV882Us83gYlCu/5U7YhfIXs01Yg54kVdFLjCZ5+EVhosmOhgYIs 4NRiFx27breGEWAOTS2h+P2onOoyBjgBrGGklOymCNRDJpkGGo3cBtOQjDco/sUkD8Hb DIqrzTxoGYK9QpkhZDyHFg6L5r+BXplTJhR/7nWxFuXVJrNXy34UFL8lZELdGG+lQ81V OqMbkqDj+DXYfu2P+4GayPmKNi2K6tP2fI2rHHoQa4KObcMa6luu1yd0GRDAQ6Q3vL4v a2cQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id l2-20020aa7c3c2000000b004461a2cbb05si9999931edr.394.2022.08.31.09.51.39; Wed, 31 Aug 2022 09:52:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232164AbiHaPxA (ORCPT + 99 others); Wed, 31 Aug 2022 11:53:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36194 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232078AbiHaPws (ORCPT ); Wed, 31 Aug 2022 11:52:48 -0400 Received: from out30-45.freemail.mail.aliyun.com (out30-45.freemail.mail.aliyun.com [115.124.30.45]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 55F20AB4C7; Wed, 31 Aug 2022 08:52:44 -0700 (PDT) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R101e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018045192;MF=ziyangzhang@linux.alibaba.com;NM=1;PH=DS;RN=7;SR=0;TI=SMTPD_---0VNrdnqz_1661961149; Received: from localhost.localdomain(mailfrom:ZiyangZhang@linux.alibaba.com fp:SMTPD_---0VNrdnqz_1661961149) by smtp.aliyun-inc.com; Wed, 31 Aug 2022 23:52:41 +0800 From: ZiyangZhang To: ming.lei@redhat.com, axboe@kernel.dk Cc: xiaoguang.wang@linux.alibaba.com, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, joseph.qi@linux.alibaba.com, ZiyangZhang Subject: [RFC PATCH V2 1/6] ublk_drv: check 'current' instead of 'ubq_daemon' Date: Wed, 31 Aug 2022 23:51:31 +0800 Message-Id: <20220831155136.23434-2-ZiyangZhang@linux.alibaba.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20220831155136.23434-1-ZiyangZhang@linux.alibaba.com> References: <20220831155136.23434-1-ZiyangZhang@linux.alibaba.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-9.9 required=5.0 tests=BAYES_00, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY, USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This check is not atomic. So with recovery feature, ubq_daemon may be modified simultaneously by recovery task. Instead, check 'current' is safe here because 'current' never changes. Also add comment explaining this check, which is really important for understanding recovery feature. Signed-off-by: ZiyangZhang Reviewed-by: Ming Lei --- drivers/block/ublk_drv.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index 6a4a94b4cdf4..c39b67d7133d 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -645,14 +645,22 @@ static inline void __ublk_rq_task_work(struct request *req) struct ublk_device *ub = ubq->dev; int tag = req->tag; struct ublk_io *io = &ubq->ios[tag]; - bool task_exiting = current != ubq->ubq_daemon || ubq_daemon_is_dying(ubq); unsigned int mapped_bytes; pr_devel("%s: complete: op %d, qid %d tag %d io_flags %x addr %llx\n", __func__, io->cmd->cmd_op, ubq->q_id, req->tag, io->flags, ublk_get_iod(ubq, req->tag)->addr); - if (unlikely(task_exiting)) { + /* + * Task is exiting if either: + * + * (1) current != ubq_daemon. + * io_uring_cmd_complete_in_task() tries to run task_work + * in a workqueue if ubq_daemon(cmd's task) is PF_EXITING. + * + * (2) current->flags & PF_EXITING. + */ + if (unlikely(current != ubq->ubq_daemon || current->flags & PF_EXITING)) { blk_mq_end_request(req, BLK_STS_IOERR); mod_delayed_work(system_wq, &ub->monitor_work, 0); return; -- 2.27.0