From patchwork Mon Nov 16 21:20:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11910895 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 80F3DC63798 for ; Mon, 16 Nov 2020 21:20:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3B11A22240 for ; Mon, 16 Nov 2020 21:20:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="eCON20fy" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726204AbgKPVU2 (ORCPT ); Mon, 16 Nov 2020 16:20:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52586 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727054AbgKPVU1 (ORCPT ); Mon, 16 Nov 2020 16:20:27 -0500 Received: from casper.infradead.org (casper.infradead.org [IPv6:2001:8b0:10b:1236::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C539EC0613D3 for ; Mon, 16 Nov 2020 13:20:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=kUYn0sikpHZNYDnsxFrAwXSb49C5P7DMdxps0LhhPGQ=; b=eCON20fyF+vc0PaCNJJPX9EzEb l6IIoAw5KAIkpQsxG9P0WntGEhTi8aF7CKJMciBTl7GBiL+3E0ewy8T0KarG63A8XVIkZbxvs4DQi ZgRk0GOyAq+caHGMXm6Y6RSRLtCiE621rh/9S13I/WsUTcJFkgOn+ko9h2HEN05Hk573mOj13JRtm /Tz29ChA8TtdrbVsvL+QbmaQMpAXGaCfpTUu2nB4+msjVQovQay0Ap8TMb9AqtNYqKUgQdlM6fpQb 8c3fFMaMbeQOjex0gVvQqxZ4hzcOCRQsu3ZY4brXbHSgixvBzKzEJ8q3nzOJeZAXHRt+HJWXTuXV4 S8X7Yulw==; Received: from [2001:4bb8:180:6600:255b:7def:a93:4a09] (helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kelvD-0007Ol-8F; Mon, 16 Nov 2020 21:20:23 +0000 From: Christoph Hellwig To: Jens Axboe , Minchan Kim , Mike Snitzer Cc: dm-devel@redhat.com, linux-block@vger.kernel.org Subject: [PATCH 2/6] zram: remove the claim mechanism Date: Mon, 16 Nov 2020 22:20:16 +0100 Message-Id: <20201116212020.1099154-3-hch@lst.de> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201116212020.1099154-1-hch@lst.de> References: <20201116212020.1099154-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org The zram claim mechanism was added to ensure no new opens come in during teardown. But the proper way to archive that is to call del_gendisk first, which takes care of all that. Once del_gendisk is called in the right place, the reset side can also be simplified as no I/O can be outstanding on a block device that is not open. Signed-off-by: Christoph Hellwig --- drivers/block/zram/zram_drv.c | 72 ++++++++--------------------------- 1 file changed, 15 insertions(+), 57 deletions(-) diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 6d15d51cee2b7e..2e6d75ec1afddb 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -1756,64 +1756,33 @@ static ssize_t disksize_store(struct device *dev, static ssize_t reset_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t len) { - int ret; - unsigned short do_reset; - struct zram *zram; + struct zram *zram = dev_to_zram(dev); struct block_device *bdev; + unsigned short do_reset; + int ret = 0; ret = kstrtou16(buf, 10, &do_reset); if (ret) return ret; - if (!do_reset) return -EINVAL; - zram = dev_to_zram(dev); bdev = bdget_disk(zram->disk, 0); if (!bdev) return -ENOMEM; mutex_lock(&bdev->bd_mutex); - /* Do not reset an active device or claimed device */ - if (bdev->bd_openers || zram->claim) { - mutex_unlock(&bdev->bd_mutex); - bdput(bdev); - return -EBUSY; - } - - /* From now on, anyone can't open /dev/zram[0-9] */ - zram->claim = true; + if (bdev->bd_openers) + ret = -EBUSY; + else + zram_reset_device(zram); mutex_unlock(&bdev->bd_mutex); - - /* Make sure all the pending I/O are finished */ - fsync_bdev(bdev); - zram_reset_device(zram); bdput(bdev); - mutex_lock(&bdev->bd_mutex); - zram->claim = false; - mutex_unlock(&bdev->bd_mutex); - - return len; -} - -static int zram_open(struct block_device *bdev, fmode_t mode) -{ - int ret = 0; - struct zram *zram; - - WARN_ON(!mutex_is_locked(&bdev->bd_mutex)); - - zram = bdev->bd_disk->private_data; - /* zram was claimed to reset so open request fails */ - if (zram->claim) - ret = -EBUSY; - - return ret; + return ret ? ret : len; } static const struct block_device_operations zram_devops = { - .open = zram_open, .submit_bio = zram_submit_bio, .swap_slot_free_notify = zram_slot_free_notify, .rw_page = zram_rw_page, @@ -1821,7 +1790,6 @@ static const struct block_device_operations zram_devops = { }; static const struct block_device_operations zram_wb_devops = { - .open = zram_open, .submit_bio = zram_submit_bio, .swap_slot_free_notify = zram_slot_free_notify, .owner = THIS_MODULE @@ -1974,32 +1942,22 @@ static int zram_add(void) static int zram_remove(struct zram *zram) { - struct block_device *bdev; - - bdev = bdget_disk(zram->disk, 0); - if (!bdev) - return -ENOMEM; + struct block_device *bdev = bdget_disk(zram->disk, 0); - mutex_lock(&bdev->bd_mutex); - if (bdev->bd_openers || zram->claim) { - mutex_unlock(&bdev->bd_mutex); + if (bdev) { + if (bdev->bd_openers) { + bdput(bdev); + return -EBUSY; + } bdput(bdev); - return -EBUSY; } - zram->claim = true; - mutex_unlock(&bdev->bd_mutex); - + del_gendisk(zram->disk); zram_debugfs_unregister(zram); - - /* Make sure all the pending I/O are finished */ - fsync_bdev(bdev); zram_reset_device(zram); - bdput(bdev); pr_info("Removed device: %s\n", zram->disk->disk_name); - del_gendisk(zram->disk); blk_cleanup_queue(zram->disk->queue); put_disk(zram->disk); kfree(zram); From patchwork Mon Nov 16 21:20:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11910893 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AC43BC63777 for ; Mon, 16 Nov 2020 21:20:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5F28B2224F for ; Mon, 16 Nov 2020 21:20:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="s8gIYR5d" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727069AbgKPVUb (ORCPT ); Mon, 16 Nov 2020 16:20:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52598 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726852AbgKPVUb (ORCPT ); Mon, 16 Nov 2020 16:20:31 -0500 Received: from casper.infradead.org (casper.infradead.org [IPv6:2001:8b0:10b:1236::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 621BBC0613CF for ; Mon, 16 Nov 2020 13:20:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=2AKcef4DY6iJcprvQynjGgbCIgh8d3+qztu8J6nwbBU=; b=s8gIYR5dNXyULF41wkVeN9JoYs w1qbUbw8DZVaWh/Nx1VikpTJFzOog/0qnzGumVS+mBj0xa/7GlsuCv8VMD+VnCTOgldvdAisRSakg oWgc+vEBU+bI03fNtBZ2pvppNZ6aGt/flOwNSpEzhPxwNFO13sYIkOGdbUQGpThYi9Hz2fQkIMwNH oqJNUNvvVy3qA8i8KTdKjrCbGG/wZPGxPHNy1jUBbZB7B98ENnfuyTA0sE1MKSgbpA8gMvFpEqXSS 87eAI7GfavnIPUj/7H1RxKgeheWzY8myvGYfSPRrt12MmIufmPlp69HcxoZK//ngXTYbR5sfewQcF F6Xx3tJA==; Received: from [2001:4bb8:180:6600:255b:7def:a93:4a09] (helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kelvG-0007P0-K7; Mon, 16 Nov 2020 21:20:26 +0000 From: Christoph Hellwig To: Jens Axboe , Minchan Kim , Mike Snitzer Cc: dm-devel@redhat.com, linux-block@vger.kernel.org Subject: [PATCH 4/6] loop: do not call set_blocksize Date: Mon, 16 Nov 2020 22:20:18 +0100 Message-Id: <20201116212020.1099154-5-hch@lst.de> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201116212020.1099154-1-hch@lst.de> References: <20201116212020.1099154-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org set_blocksize is used by file systems to use their preferred buffer cache block size. Block drivers should not set it. Signed-off-by: Christoph Hellwig --- drivers/block/loop.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 9a27d4f1c08aac..b42c728620c9e4 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -1164,9 +1164,6 @@ static int loop_configure(struct loop_device *lo, fmode_t mode, size = get_loop_size(lo, file); loop_set_size(lo, size); - set_blocksize(bdev, S_ISBLK(inode->i_mode) ? - block_size(inode->i_bdev) : PAGE_SIZE); - lo->lo_state = Lo_bound; if (part_shift) lo->lo_flags |= LO_FLAGS_PARTSCAN; From patchwork Mon Nov 16 21:20:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11910897 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8F8BEC63798 for ; Mon, 16 Nov 2020 21:20:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3CA0122240 for ; Mon, 16 Nov 2020 21:20:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="MFSucmkH" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726852AbgKPVUc (ORCPT ); Mon, 16 Nov 2020 16:20:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52606 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726035AbgKPVUc (ORCPT ); Mon, 16 Nov 2020 16:20:32 -0500 Received: from casper.infradead.org (casper.infradead.org [IPv6:2001:8b0:10b:1236::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4F192C0613CF for ; Mon, 16 Nov 2020 13:20:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=x6ThtvQgvwHIscZfOUELeo3Uy7svW74ISAsOiTBJTd8=; b=MFSucmkHVCjF+4G00MDVKfOE7M BHZOOO99Uk3U4UiXmreqy5l49PtfcX/diVYdhl4mmzPa8dSjy/9l8keq8TEe46UBekbR2QEb5Qm8I xWo3hVunlDyBzsjoPPx0zFadTbBf6RTB47gi+OXO/QU0h6de1LIH6EAU0NJPAvShrq1hWFuKLt+XQ 16BcbFzLN3GiemdGPHPRcILvJ18F8ER4U6yjfI3n21pAZ/pCV/sxi2EEkL4xAtJQazLHPFSkcZcrg xCrUajYreFTXpfWiLV0h5+MYo/kYh6NODwtYYWXrFn19IP3EUiftrll4BTt8NCBnv4MP+QCkFhKC5 QTOIOIcA==; Received: from [2001:4bb8:180:6600:255b:7def:a93:4a09] (helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kelvH-0007PB-QY; Mon, 16 Nov 2020 21:20:28 +0000 From: Christoph Hellwig To: Jens Axboe , Minchan Kim , Mike Snitzer Cc: dm-devel@redhat.com, linux-block@vger.kernel.org Subject: [PATCH 5/6] dm: simplify flush_bio initialization in __send_empty_flush Date: Mon, 16 Nov 2020 22:20:19 +0100 Message-Id: <20201116212020.1099154-6-hch@lst.de> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201116212020.1099154-1-hch@lst.de> References: <20201116212020.1099154-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org We don't really need the struct block_device to initialize a bio. So switch from using bio_set_dev to manually setting up bi_disk (bi_partno will always be zero and has been cleared by bio_init already). Signed-off-by: Christoph Hellwig Acked-by: Mike Snitzer --- drivers/md/dm.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 54739f1b579bc8..6d7eb72d41f9ea 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -1422,18 +1422,12 @@ static int __send_empty_flush(struct clone_info *ci) */ bio_init(&flush_bio, NULL, 0); flush_bio.bi_opf = REQ_OP_WRITE | REQ_PREFLUSH | REQ_SYNC; + flush_bio.bi_disk = ci->io->md->disk; + bio_associate_blkg(&flush_bio); + ci->bio = &flush_bio; ci->sector_count = 0; - /* - * Empty flush uses a statically initialized bio, as the base for - * cloning. However, blkg association requires that a bdev is - * associated with a gendisk, which doesn't happen until the bdev is - * opened. So, blkg association is done at issue time of the flush - * rather than when the device is created in alloc_dev(). - */ - bio_set_dev(ci->bio, ci->io->md->bdev); - BUG_ON(bio_has_data(ci->bio)); while ((ti = dm_table_get_target(ci->map, target_nr++))) __send_duplicate_bios(ci, ti, ti->num_flush_bios, NULL); From patchwork Mon Nov 16 21:20:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11910889 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F085DC63777 for ; Mon, 16 Nov 2020 21:20:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9D02922240 for ; Mon, 16 Nov 2020 21:20:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="gIJroEqz" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727054AbgKPVUe (ORCPT ); Mon, 16 Nov 2020 16:20:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52608 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726035AbgKPVUd (ORCPT ); Mon, 16 Nov 2020 16:20:33 -0500 Received: from casper.infradead.org (casper.infradead.org [IPv6:2001:8b0:10b:1236::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A7B68C0613CF for ; Mon, 16 Nov 2020 13:20:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=Al4j1ytf0tEOG5tBSliKujyJqA951M78b84DTEt+Z9Y=; b=gIJroEqzFf3yya0CgMJkNw1jeS i015bBPj7ed14352RvXie2iqIzvhnF6eMuApVoCr/GhQdwPVCDZAcuHxEz1ViPGoOZ5HnXUxQCcV+ dTNt0p27sMIwiSkixVukduBNboPpx3iZiHh6ZWlhQ9kgUL06PbF5UJUZRbvKAp1HUcsL1KOWstbta HoUdfNq8kzS04HmtphiWM2EL2Uqdhzskgqt+tMRI+5cpRJYnwlMrnkxNAK5koyS1te62EBb7gcW0V vX3s4cu7PbkHbcj1AFtJubR8qdrfppuuiqiIvOU+ti290wmqwZlJwP66qVv70EL1wUcq3Ooo+gH6p que+IcRA==; Received: from [2001:4bb8:180:6600:255b:7def:a93:4a09] (helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kelvJ-0007PK-58; Mon, 16 Nov 2020 21:20:29 +0000 From: Christoph Hellwig To: Jens Axboe , Minchan Kim , Mike Snitzer Cc: dm-devel@redhat.com, linux-block@vger.kernel.org Subject: [PATCH 6/6] dm: remove the block_device reference in struct mapped_device Date: Mon, 16 Nov 2020 22:20:20 +0100 Message-Id: <20201116212020.1099154-7-hch@lst.de> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201116212020.1099154-1-hch@lst.de> References: <20201116212020.1099154-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org Get rid of the long-lasting struct block_device reference in struct mapped_device. The only remaining user is the freeze code, where we can trivially look up the block device at freeze time and release the reference at thaw time. Signed-off-by: Christoph Hellwig Acked-by: Mike Snitzer --- drivers/md/dm-core.h | 2 -- drivers/md/dm.c | 19 ++++++++----------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/drivers/md/dm-core.h b/drivers/md/dm-core.h index d522093cb39dda..b1b400ed76fe90 100644 --- a/drivers/md/dm-core.h +++ b/drivers/md/dm-core.h @@ -107,8 +107,6 @@ struct mapped_device { /* kobject and completion */ struct dm_kobject_holder kobj_holder; - struct block_device *bdev; - struct dm_stats stats; /* for blk-mq request-based DM support */ diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 6d7eb72d41f9ea..83fe1e7f13e6b0 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -1744,11 +1744,6 @@ static void cleanup_mapped_device(struct mapped_device *md) cleanup_srcu_struct(&md->io_barrier); - if (md->bdev) { - bdput(md->bdev); - md->bdev = NULL; - } - mutex_destroy(&md->suspend_lock); mutex_destroy(&md->type_lock); mutex_destroy(&md->table_devices_lock); @@ -1840,10 +1835,6 @@ static struct mapped_device *alloc_dev(int minor) if (!md->wq) goto bad; - md->bdev = bdget_disk(md->disk, 0); - if (!md->bdev) - goto bad; - dm_stats_init(&md->stats); /* Populate the mapping, nobody knows we exist yet */ @@ -2384,12 +2375,17 @@ struct dm_table *dm_swap_table(struct mapped_device *md, struct dm_table *table) */ static int lock_fs(struct mapped_device *md) { + struct block_device *bdev; int r; WARN_ON(md->frozen_sb); - md->frozen_sb = freeze_bdev(md->bdev); + bdev = bdget_disk(md->disk, 0); + if (!bdev) + return -ENOMEM; + md->frozen_sb = freeze_bdev(bdev); if (IS_ERR(md->frozen_sb)) { + bdput(bdev); r = PTR_ERR(md->frozen_sb); md->frozen_sb = NULL; return r; @@ -2405,7 +2401,8 @@ static void unlock_fs(struct mapped_device *md) if (!test_bit(DMF_FROZEN, &md->flags)) return; - thaw_bdev(md->bdev, md->frozen_sb); + thaw_bdev(md->frozen_sb->s_bdev, md->frozen_sb); + bdput(md->frozen_sb->s_bdev); md->frozen_sb = NULL; clear_bit(DMF_FROZEN, &md->flags); }