Received: by 2002:a05:6a10:c7c6:0:0:0:0 with SMTP id h6csp1659895pxy; Mon, 2 Aug 2021 07:16:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwOwWaTyX9rr+4DUVpSUh6tDKtyDwli5+qQ5LQdEjqEy+L+b8KPAUQ31QEGb2ZLsDykITRi X-Received: by 2002:a92:c245:: with SMTP id k5mr2023380ilo.143.1627913798088; Mon, 02 Aug 2021 07:16:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627913798; cv=none; d=google.com; s=arc-20160816; b=K5BWiLgTD7Grwzy+C3C3o6Y4QMEiV9Oa7Ut6BQ62hPcLaR7u0VDXz3XWEL0152MetM 699hzCTGotryOLmjvyd+cfGfy+HK5ZuRTPZ5ahB3a4rwdhkqRuJW4w3scn80pl5ujIWW coBNURHWNbmWEOFfN2b7dyI2xN+gPfkYK+3mAV5xicji5UXIFXfgoq/CdOdH96LuUqHD 95BThogLDAZkU21HnEHqHapJnsvTFEkpnUKjhir9xYcivnDQY9RPy+Kv7S7OGgf1RtNJ QDax5V8OBplhMy2zuqNTRwQeoWZ3PWNTuJx0kJOB43DT2B1MPxsRF1GFMrKbdRDTzjnl A4HQ== 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=wHIMfDRjRO+CFX3swf00BpENNKOLUiLt7eVf1eBOWnA=; b=KVMs4UGaMiRZ5IzSTbd58wo6YhY0wOgWD53jn1kOStkEsGTdqF7TygtFNEAVbk5B3K bmqwIxOsifE9TerqLJRsWt/NCkbFviaARdcnTDS8nINQ4cG5vrVvmwt9lruVSDEAQlX/ eiLdglwuZtsMydEqTM9EBrQmTjY9Gd0DJ+ZIaBcB0zwYxprQBgAunWEyEDX5QipBhKf1 062YA0QVSqwpcuVoG4bmLQ5/8pNT5d6eAe7cziQL7h30aMnJpBDrQ+JCn9yB9vJYccq+ PH1Vprs0WtsPvQ3oFA5A2rvPZxb93HZLBfWwbmUElECECjWLqSKdRvwQ9PJhFbLwU6J2 qzUg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=vi+ge7fy; 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=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f22si12569360jam.121.2021.08.02.07.16.27; Mon, 02 Aug 2021 07:16:38 -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=@linuxfoundation.org header.s=korg header.b=vi+ge7fy; 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=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236052AbhHBOPR (ORCPT + 99 others); Mon, 2 Aug 2021 10:15:17 -0400 Received: from mail.kernel.org ([198.145.29.99]:49530 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235258AbhHBOD4 (ORCPT ); Mon, 2 Aug 2021 10:03:56 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 56DD861104; Mon, 2 Aug 2021 13:57:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1627912646; bh=jiVEl3P0brZ/g6ojgB2OANVvi/m6JP3VxXG2oSSt0Jo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vi+ge7fy4vu/v1fxN7rINKwqBx4M73gUwLVFK6QKYLFEaAlQ2gvW4Q68bL1aUDCgB xTcJkH65x/hNyJxbRmvfhxe3uqfrtpzVJA4CBeWnk6kAmsWWLhzylNv6KSpFuyuzpj v66ml5/+PLL4ddRvN5Jnk6jPYMu+FJnS7vwcSrfk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Christoph Hellwig , Josef Bacik , Ming Lei , Jens Axboe , Sasha Levin Subject: [PATCH 5.13 086/104] block: delay freeing the gendisk Date: Mon, 2 Aug 2021 15:45:23 +0200 Message-Id: <20210802134346.836377326@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210802134344.028226640@linuxfoundation.org> References: <20210802134344.028226640@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Christoph Hellwig [ Upstream commit 340e84573878b2b9d63210482af46883366361b9 ] blkdev_get_no_open acquires a reference to the block_device through the block device inode and then tries to acquire a device model reference to the gendisk. But at this point the disk migh already be freed (although the race is free). Fix this by only freeing the gendisk from the whole device bdevs ->free_inode callback as well. Fixes: 22ae8ce8b892 ("block: simplify bdev/disk lookup in blkdev_get") Signed-off-by: Christoph Hellwig Reviewed-by: Josef Bacik Reviewed-by: Ming Lei Link: https://lore.kernel.org/r/20210722075402.983367-2-hch@lst.de Signed-off-by: Jens Axboe Signed-off-by: Sasha Levin --- block/genhd.c | 3 +-- fs/block_dev.c | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/block/genhd.c b/block/genhd.c index ad7436bd60c1..e8968fd30b2b 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -1124,10 +1124,9 @@ static void disk_release(struct device *dev) disk_release_events(disk); kfree(disk->random); xa_destroy(&disk->part_tbl); - bdput(disk->part0); if (disk->queue) blk_put_queue(disk->queue); - kfree(disk); + bdput(disk->part0); /* frees the disk */ } struct class block_class = { .name = "block", diff --git a/fs/block_dev.c b/fs/block_dev.c index 6cc4d4cfe0c2..e4a80bd4ddf1 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -812,6 +812,8 @@ static void bdev_free_inode(struct inode *inode) free_percpu(bdev->bd_stats); kfree(bdev->bd_meta_info); + if (!bdev_is_partition(bdev)) + kfree(bdev->bd_disk); kmem_cache_free(bdev_cachep, BDEV_I(inode)); } -- 2.30.2