Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp4077215pxf; Tue, 23 Mar 2021 01:54:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx43GXkrPAmSOCsF3/PLHYyjpzlSFb0uxaSoTkyxM7z+Ov6xZ32xLBYoi8aZSwmmSKzNomP X-Received: by 2002:a05:6402:51d4:: with SMTP id r20mr3583421edd.112.1616489667157; Tue, 23 Mar 2021 01:54:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616489667; cv=none; d=google.com; s=arc-20160816; b=GNV8QS8fr5XfxXxjOYpRXMS/s6R2edUa2Lp7Ew04kX7sHdfCjw3b7ie46K7EcRIm+J NGWcOix5+6Kio1Pevm6b4vWfyZKJ60zd70bXPlH8llPx/aMESHU00U094+34Ej0beCMK +p/bVIJG7VIcbe5kRC8/j+xGxUY/HUEvhyXxYoh1LFCXu0cGiZKPnGDR45LgO/Kx+lWf MikQBGcRNSUGnP/BC9+1bRSYwwcTfND7ZPbAs237WWKjYdojz89ep27tlAfw2mEqbuIT gdT6pTUfFzkVB8Vbk7CEE33dVqTvkEua6gxeP8Qg3fCS8oFsdduruJRbGPiYbVYfoDwF 3rzQ== 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 :message-id:date:subject:cc:to:from; bh=Ns5k8SKpB+1CwP7mnOjbGlaHk24Iry49NbauOaY9FjA=; b=c98guPOpcLaOlb+jvxslm1A4a8AntEVxOKIU9NxsEehXXqkQEzYSzh8jB4DQAO+Jml +57jZYfYfvs0Neid9n/nzgRm74dC0ZCBT878iNftC1zlR9d5hlDZtES0dQUzpW0K8KBk qPnF2N5ldm56d6PuGGO8tszqaGK1hP2sDnVbbXJ6UPMttQ3ApLOJy4AYLH8bHMl7meFv Fb8Q6Bd2XOCdaQh7kXCeb5+VljTky8bpy0eILJuAhEmPVmTOccIbmeMFGev1EY0oIcJz nscEUONOrGEUuzre/VZKeivxbOBlS+q3teZcDWDui0oAaMzixqZPznfnVt86utAEp/L3 FI1g== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e8si12909911edq.351.2021.03.23.01.54.04; Tue, 23 Mar 2021 01:54:27 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229798AbhCWIwg (ORCPT + 99 others); Tue, 23 Mar 2021 04:52:36 -0400 Received: from youngberry.canonical.com ([91.189.89.112]:51947 "EHLO youngberry.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229508AbhCWIwb (ORCPT ); Tue, 23 Mar 2021 04:52:31 -0400 Received: from 61-220-137-37.hinet-ip.hinet.net ([61.220.137.37] helo=localhost.localdomain) by youngberry.canonical.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1lOcm3-0005JG-Gg; Tue, 23 Mar 2021 08:52:28 +0000 From: chris.chiu@canonical.com To: viro@zeniv.linux.org.uk, hch@lst.de, axboe@kernel.dk Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Chris Chiu Subject: [PATCH] block: clear GD_NEED_PART_SCAN later in bdev_disk_changed Date: Tue, 23 Mar 2021 16:52:19 +0800 Message-Id: <20210323085219.24428-1-chris.chiu@canonical.com> X-Mailer: git-send-email 2.21.1 (Apple Git-122.3) MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Chris Chiu The GD_NEED_PART_SCAN is set by bdev_check_media_change to initiate a partition scan while removing a block device. It should be cleared after blk_drop_paritions because blk_drop_paritions could return -EBUSY and then the consequence __blkdev_get has no chance to do delete_partition if GD_NEED_PART_SCAN already cleared. It causes some problems on some card readers. Ex. Realtek card reader 0bda:0328 and 0bda:0158. The device node of the partition will not disappear after the memory card removed. Thus the user applications can not update the device mapping correctly. BugLink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1920874 Signed-off-by: Chris Chiu --- fs/block_dev.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/block_dev.c b/fs/block_dev.c index 92ed7d5df677..28d583fcdc2c 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -1240,13 +1240,13 @@ int bdev_disk_changed(struct block_device *bdev, bool invalidate) lockdep_assert_held(&bdev->bd_mutex); - clear_bit(GD_NEED_PART_SCAN, &bdev->bd_disk->state); - rescan: ret = blk_drop_partitions(bdev); if (ret) return ret; + clear_bit(GD_NEED_PART_SCAN, &disk->state); + /* * Historically we only set the capacity to zero for devices that * support partitions (independ of actually having partitions created). -- 2.20.1