Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp835005pxb; Tue, 12 Apr 2022 14:48:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyMH0+9vcYHwKdu3tnhI0hJLeHZBjY3cQaaaou/7h8KLL0CNwV48XQ+hPLxXohBYYsKsmsv X-Received: by 2002:a05:6a00:1c63:b0:505:cc7f:a21b with SMTP id s35-20020a056a001c6300b00505cc7fa21bmr10275479pfw.9.1649800103748; Tue, 12 Apr 2022 14:48:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649800103; cv=none; d=google.com; s=arc-20160816; b=rGrO1sBPxwALrF0KIbAjhytCW6QNSNhYohISaTVxmxq4tE59g6QBZ9poZgIScVqSwq OAtBZBcyap5sQURuhHE0DSZCxqpRoblFKxk9JOqbDwl9PN0Y7SfJEouHfBs5zUzZXoAO Qn14IkbV6xq8+OXH1dbumzXHsECuBwecckva2O9BYzzAj5gbcIgwpxXFxJELD/KGNf0+ tfwTh2qC+r6zP4qR03p8a5oSoYBtcqUL23AkzzkqWRDjUqGlihpQnYp2FAWGg0BC1sp8 WxGZb1xccMToMDGnmTenlunuzTSZpKtDMv67Ge08cyk5cMSHvL7n4k3jz0Fz+4xVGKnx rJBg== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=CuEdA3iOXrAOFrDLk/quxPy2j8tjgxvU1c30CA56iA0=; b=DxwvePK1bl1BJqyxpufFgP05odiGlsRBW+8nps6ZhEmg4mHBNHHNgOj21GQgF6p9gg EyaEP1w2HdN02j0PNPOQXFHKNMEVPSmYQQ7dUOCmYBL6b85dQYMvDl5Zs0zTfbRAOLx7 Rj+yy026xR3gwAklo5tnX/1JFWikNSILmfEA3Vroai1Q1dr5OtlD7eeWJWqdwf+bmXRI 9q7GTSi06I/m0akEgX//McMb89+0AaKblrRC0H2LmZt1H6W+nVdNTlMRX9m14P3g7GM4 L6FAipd4JNIddFXJvWQfs0oX1IH5hUvpglDGHUwtObBIblUGTTuw9EOSxrLL9S2psQfM 7seQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=LiFzEht6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id g5-20020a656cc5000000b003824910a3e4si3904791pgw.627.2022.04.12.14.48.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Apr 2022 14:48:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=LiFzEht6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id D9F305714A; Tue, 12 Apr 2022 13:46:52 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350030AbiDLGjt (ORCPT + 99 others); Tue, 12 Apr 2022 02:39:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50984 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350300AbiDLGhz (ORCPT ); Tue, 12 Apr 2022 02:37:55 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 66C2E15806; Mon, 11 Apr 2022 23:34:30 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 666CEB81B41; Tue, 12 Apr 2022 06:34:29 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B7922C385A1; Tue, 12 Apr 2022 06:34:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1649745268; bh=enVvnMtcgg+Dhv+sSDmzEWyHaumiPA0dfrQnXBxHQJY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LiFzEht6VLV4datqm2nWbKKODuF+wGh8Pw1Ezcq9q4Y6BqT1hCKEHy5Pg9w9OSvra VCRX664e+M6gKFWcifUCI9n/ha6wjefYTYIonaRcJ3fANy/ij4+oBplr9yt19O6y2l /laShUj8ktN5G23V5KLJkp9ku97QD00zIknhAXgk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Zhang Yi , Mike Snitzer , Sasha Levin Subject: [PATCH 5.10 038/171] dm: requeue IO if mapping table not yet available Date: Tue, 12 Apr 2022 08:28:49 +0200 Message-Id: <20220412062928.989617235@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220412062927.870347203@linuxfoundation.org> References: <20220412062927.870347203@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no 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 From: Mike Snitzer [ Upstream commit fa247089de9936a46e290d4724cb5f0b845600f5 ] Update both bio-based and request-based DM to requeue IO if the mapping table not available. This race of IO being submitted before the DM device ready is so narrow, yet possible for initial table load given that the DM device's request_queue is created prior, that it best to requeue IO to handle this unlikely case. Reported-by: Zhang Yi Signed-off-by: Mike Snitzer Signed-off-by: Sasha Levin --- drivers/md/dm-rq.c | 7 ++++++- drivers/md/dm.c | 11 +++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/md/dm-rq.c b/drivers/md/dm-rq.c index b1e867feb4f6..4833f4b20b2c 100644 --- a/drivers/md/dm-rq.c +++ b/drivers/md/dm-rq.c @@ -492,8 +492,13 @@ static blk_status_t dm_mq_queue_rq(struct blk_mq_hw_ctx *hctx, if (unlikely(!ti)) { int srcu_idx; - struct dm_table *map = dm_get_live_table(md, &srcu_idx); + struct dm_table *map; + map = dm_get_live_table(md, &srcu_idx); + if (unlikely(!map)) { + dm_put_live_table(md, srcu_idx); + return BLK_STS_RESOURCE; + } ti = dm_table_find_target(map, 0); dm_put_live_table(md, srcu_idx); } diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 6030cba5b038..2836d44094ab 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -1692,15 +1692,10 @@ static blk_qc_t dm_submit_bio(struct bio *bio) struct dm_table *map; map = dm_get_live_table(md, &srcu_idx); - if (unlikely(!map)) { - DMERR_LIMIT("%s: mapping table unavailable, erroring io", - dm_device_name(md)); - bio_io_error(bio); - goto out; - } - /* If suspended, queue this IO for later */ - if (unlikely(test_bit(DMF_BLOCK_IO_FOR_SUSPEND, &md->flags))) { + /* If suspended, or map not yet available, queue this IO for later */ + if (unlikely(test_bit(DMF_BLOCK_IO_FOR_SUSPEND, &md->flags)) || + unlikely(!map)) { if (bio->bi_opf & REQ_NOWAIT) bio_wouldblock_error(bio); else if (bio->bi_opf & REQ_RAHEAD) -- 2.35.1