All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@lst.de>
To: Jens Axboe <axboe@kernel.dk>
Cc: Tejun Heo <tj@kernel.org>, Josef Bacik <josef@toxicpanda.com>,
	Coly Li <colyli@suse.de>, Mike Snitzer <snitzer@redhat.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jan Kara <jack@suse.cz>,
	Johannes Thumshirn <johannes.thumshirn@wdc.com>,
	dm-devel@redhat.com, Jan Kara <jack@suse.com>,
	linux-block@vger.kernel.org, linux-bcache@vger.kernel.org,
	linux-mtd@lists.infradead.org, linux-fsdevel@vger.kernel.org,
	linux-mm@kvack.org, Chao Yu <yuchao0@huawei.com>
Subject: [PATCH 04/44] fs: simplify freeze_bdev/thaw_bdev
Date: Thu, 26 Nov 2020 14:03:42 +0100	[thread overview]
Message-ID: <20201126130422.92945-5-hch@lst.de> (raw)
In-Reply-To: <20201126130422.92945-1-hch@lst.de>

Store the frozen superblock in struct block_device to avoid the awkward
interface that can return a sb only used a cookie, an ERR_PTR or NULL.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: Chao Yu <yuchao0@huawei.com>		[f2fs]
---
 drivers/md/dm-core.h      |  5 -----
 drivers/md/dm.c           | 20 ++++++--------------
 fs/block_dev.c            | 37 +++++++++++++++----------------------
 fs/buffer.c               |  2 +-
 fs/ext4/ioctl.c           |  2 +-
 fs/f2fs/file.c            | 14 +++++---------
 fs/xfs/xfs_fsops.c        |  7 ++-----
 include/linux/blk_types.h |  1 +
 include/linux/blkdev.h    |  4 ++--
 9 files changed, 33 insertions(+), 59 deletions(-)

diff --git a/drivers/md/dm-core.h b/drivers/md/dm-core.h
index d522093cb39dda..aace147effcacb 100644
--- a/drivers/md/dm-core.h
+++ b/drivers/md/dm-core.h
@@ -96,11 +96,6 @@ struct mapped_device {
 	 */
 	struct workqueue_struct *wq;
 
-	/*
-	 * freeze/thaw support require holding onto a super block
-	 */
-	struct super_block *frozen_sb;
-
 	/* forced geometry settings */
 	struct hd_geometry geometry;
 
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 54739f1b579bc8..50541d336c719b 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -2392,27 +2392,19 @@ static int lock_fs(struct mapped_device *md)
 {
 	int r;
 
-	WARN_ON(md->frozen_sb);
+	WARN_ON(test_bit(DMF_FROZEN, &md->flags));
 
-	md->frozen_sb = freeze_bdev(md->bdev);
-	if (IS_ERR(md->frozen_sb)) {
-		r = PTR_ERR(md->frozen_sb);
-		md->frozen_sb = NULL;
-		return r;
-	}
-
-	set_bit(DMF_FROZEN, &md->flags);
-
-	return 0;
+	r = freeze_bdev(md->bdev);
+	if (!r)
+		set_bit(DMF_FROZEN, &md->flags);
+	return r;
 }
 
 static void unlock_fs(struct mapped_device *md)
 {
 	if (!test_bit(DMF_FROZEN, &md->flags))
 		return;
-
-	thaw_bdev(md->bdev, md->frozen_sb);
-	md->frozen_sb = NULL;
+	thaw_bdev(md->bdev);
 	clear_bit(DMF_FROZEN, &md->flags);
 }
 
diff --git a/fs/block_dev.c b/fs/block_dev.c
index d8664f5c1ff669..33c29106c98907 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -548,55 +548,47 @@ EXPORT_SYMBOL(fsync_bdev);
  * count down in thaw_bdev(). When it becomes 0, thaw_bdev() will unfreeze
  * actually.
  */
-struct super_block *freeze_bdev(struct block_device *bdev)
+int freeze_bdev(struct block_device *bdev)
 {
 	struct super_block *sb;
 	int error = 0;
 
 	mutex_lock(&bdev->bd_fsfreeze_mutex);
-	if (++bdev->bd_fsfreeze_count > 1) {
-		/*
-		 * We don't even need to grab a reference - the first call
-		 * to freeze_bdev grab an active reference and only the last
-		 * thaw_bdev drops it.
-		 */
-		sb = get_super(bdev);
-		if (sb)
-			drop_super(sb);
-		mutex_unlock(&bdev->bd_fsfreeze_mutex);
-		return sb;
-	}
+	if (++bdev->bd_fsfreeze_count > 1)
+		goto done;
 
 	sb = get_active_super(bdev);
 	if (!sb)
-		goto out;
+		goto sync;
 	if (sb->s_op->freeze_super)
 		error = sb->s_op->freeze_super(sb);
 	else
 		error = freeze_super(sb);
+	deactivate_super(sb);
+
 	if (error) {
-		deactivate_super(sb);
 		bdev->bd_fsfreeze_count--;
-		mutex_unlock(&bdev->bd_fsfreeze_mutex);
-		return ERR_PTR(error);
+		goto done;
 	}
-	deactivate_super(sb);
- out:
+	bdev->bd_fsfreeze_sb = sb;
+
+sync:
 	sync_blockdev(bdev);
+done:
 	mutex_unlock(&bdev->bd_fsfreeze_mutex);
-	return sb;	/* thaw_bdev releases s->s_umount */
+	return error;
 }
 EXPORT_SYMBOL(freeze_bdev);
 
 /**
  * thaw_bdev  -- unlock filesystem
  * @bdev:	blockdevice to unlock
- * @sb:		associated superblock
  *
  * Unlocks the filesystem and marks it writeable again after freeze_bdev().
  */
-int thaw_bdev(struct block_device *bdev, struct super_block *sb)
+int thaw_bdev(struct block_device *bdev)
 {
+	struct super_block *sb;
 	int error = -EINVAL;
 
 	mutex_lock(&bdev->bd_fsfreeze_mutex);
@@ -607,6 +599,7 @@ int thaw_bdev(struct block_device *bdev, struct super_block *sb)
 	if (--bdev->bd_fsfreeze_count > 0)
 		goto out;
 
+	sb = bdev->bd_fsfreeze_sb;
 	if (!sb)
 		goto out;
 
diff --git a/fs/buffer.c b/fs/buffer.c
index 23f645657488ba..a7595ada9400ff 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -523,7 +523,7 @@ static int osync_buffers_list(spinlock_t *lock, struct list_head *list)
 
 void emergency_thaw_bdev(struct super_block *sb)
 {
-	while (sb->s_bdev && !thaw_bdev(sb->s_bdev, sb))
+	while (sb->s_bdev && !thaw_bdev(sb->s_bdev))
 		printk(KERN_WARNING "Emergency Thaw on %pg\n", sb->s_bdev);
 }
 
diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
index f0381876a7e5b0..524e134324475e 100644
--- a/fs/ext4/ioctl.c
+++ b/fs/ext4/ioctl.c
@@ -624,7 +624,7 @@ static int ext4_shutdown(struct super_block *sb, unsigned long arg)
 	case EXT4_GOING_FLAGS_DEFAULT:
 		freeze_bdev(sb->s_bdev);
 		set_bit(EXT4_FLAGS_SHUTDOWN, &sbi->s_ext4_flags);
-		thaw_bdev(sb->s_bdev, sb);
+		thaw_bdev(sb->s_bdev);
 		break;
 	case EXT4_GOING_FLAGS_LOGFLUSH:
 		set_bit(EXT4_FLAGS_SHUTDOWN, &sbi->s_ext4_flags);
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index ee861c6d9ff026..a9fc482a0e60a5 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -2230,16 +2230,12 @@ static int f2fs_ioc_shutdown(struct file *filp, unsigned long arg)
 
 	switch (in) {
 	case F2FS_GOING_DOWN_FULLSYNC:
-		sb = freeze_bdev(sb->s_bdev);
-		if (IS_ERR(sb)) {
-			ret = PTR_ERR(sb);
+		ret = freeze_bdev(sb->s_bdev);
+		if (ret)
 			goto out;
-		}
-		if (sb) {
-			f2fs_stop_checkpoint(sbi, false);
-			set_sbi_flag(sbi, SBI_IS_SHUTDOWN);
-			thaw_bdev(sb->s_bdev, sb);
-		}
+		f2fs_stop_checkpoint(sbi, false);
+		set_sbi_flag(sbi, SBI_IS_SHUTDOWN);
+		thaw_bdev(sb->s_bdev);
 		break;
 	case F2FS_GOING_DOWN_METASYNC:
 		/* do checkpoint only */
diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c
index ef1d5bb88b93ab..b7c5783a031c69 100644
--- a/fs/xfs/xfs_fsops.c
+++ b/fs/xfs/xfs_fsops.c
@@ -433,13 +433,10 @@ xfs_fs_goingdown(
 {
 	switch (inflags) {
 	case XFS_FSOP_GOING_FLAGS_DEFAULT: {
-		struct super_block *sb = freeze_bdev(mp->m_super->s_bdev);
-
-		if (sb && !IS_ERR(sb)) {
+		if (!freeze_bdev(mp->m_super->s_bdev)) {
 			xfs_force_shutdown(mp, SHUTDOWN_FORCE_UMOUNT);
-			thaw_bdev(sb->s_bdev, sb);
+			thaw_bdev(mp->m_super->s_bdev);
 		}
-
 		break;
 	}
 	case XFS_FSOP_GOING_FLAGS_LOGFLUSH:
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
index d9b69bbde5cc54..ebfb4e7c1fd125 100644
--- a/include/linux/blk_types.h
+++ b/include/linux/blk_types.h
@@ -46,6 +46,7 @@ struct block_device {
 	int			bd_fsfreeze_count;
 	/* Mutex for freeze */
 	struct mutex		bd_fsfreeze_mutex;
+	struct super_block	*bd_fsfreeze_sb;
 } __randomize_layout;
 
 /*
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 05b346a68c2eee..12810a19edebc4 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -2020,7 +2020,7 @@ static inline int sync_blockdev(struct block_device *bdev)
 #endif
 int fsync_bdev(struct block_device *bdev);
 
-struct super_block *freeze_bdev(struct block_device *bdev);
-int thaw_bdev(struct block_device *bdev, struct super_block *sb);
+int freeze_bdev(struct block_device *bdev);
+int thaw_bdev(struct block_device *bdev);
 
 #endif /* _LINUX_BLKDEV_H */
-- 
2.29.2


WARNING: multiple messages have this Message-ID (diff)
From: Christoph Hellwig <hch@lst.de>
To: Jens Axboe <axboe@kernel.dk>
Cc: linux-bcache@vger.kernel.org, Chao Yu <yuchao0@huawei.com>,
	Jan Kara <jack@suse.cz>, Mike Snitzer <snitzer@redhat.com>,
	linux-mm@kvack.org,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jan Kara <jack@suse.com>, Josef Bacik <josef@toxicpanda.com>,
	Coly Li <colyli@suse.de>,
	linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	dm-devel@redhat.com, linux-mtd@lists.infradead.org,
	Johannes Thumshirn <johannes.thumshirn@wdc.com>,
	Tejun Heo <tj@kernel.org>
Subject: [PATCH 04/44] fs: simplify freeze_bdev/thaw_bdev
Date: Thu, 26 Nov 2020 14:03:42 +0100	[thread overview]
Message-ID: <20201126130422.92945-5-hch@lst.de> (raw)
In-Reply-To: <20201126130422.92945-1-hch@lst.de>

Store the frozen superblock in struct block_device to avoid the awkward
interface that can return a sb only used a cookie, an ERR_PTR or NULL.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: Chao Yu <yuchao0@huawei.com>		[f2fs]
---
 drivers/md/dm-core.h      |  5 -----
 drivers/md/dm.c           | 20 ++++++--------------
 fs/block_dev.c            | 37 +++++++++++++++----------------------
 fs/buffer.c               |  2 +-
 fs/ext4/ioctl.c           |  2 +-
 fs/f2fs/file.c            | 14 +++++---------
 fs/xfs/xfs_fsops.c        |  7 ++-----
 include/linux/blk_types.h |  1 +
 include/linux/blkdev.h    |  4 ++--
 9 files changed, 33 insertions(+), 59 deletions(-)

diff --git a/drivers/md/dm-core.h b/drivers/md/dm-core.h
index d522093cb39dda..aace147effcacb 100644
--- a/drivers/md/dm-core.h
+++ b/drivers/md/dm-core.h
@@ -96,11 +96,6 @@ struct mapped_device {
 	 */
 	struct workqueue_struct *wq;
 
-	/*
-	 * freeze/thaw support require holding onto a super block
-	 */
-	struct super_block *frozen_sb;
-
 	/* forced geometry settings */
 	struct hd_geometry geometry;
 
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 54739f1b579bc8..50541d336c719b 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -2392,27 +2392,19 @@ static int lock_fs(struct mapped_device *md)
 {
 	int r;
 
-	WARN_ON(md->frozen_sb);
+	WARN_ON(test_bit(DMF_FROZEN, &md->flags));
 
-	md->frozen_sb = freeze_bdev(md->bdev);
-	if (IS_ERR(md->frozen_sb)) {
-		r = PTR_ERR(md->frozen_sb);
-		md->frozen_sb = NULL;
-		return r;
-	}
-
-	set_bit(DMF_FROZEN, &md->flags);
-
-	return 0;
+	r = freeze_bdev(md->bdev);
+	if (!r)
+		set_bit(DMF_FROZEN, &md->flags);
+	return r;
 }
 
 static void unlock_fs(struct mapped_device *md)
 {
 	if (!test_bit(DMF_FROZEN, &md->flags))
 		return;
-
-	thaw_bdev(md->bdev, md->frozen_sb);
-	md->frozen_sb = NULL;
+	thaw_bdev(md->bdev);
 	clear_bit(DMF_FROZEN, &md->flags);
 }
 
diff --git a/fs/block_dev.c b/fs/block_dev.c
index d8664f5c1ff669..33c29106c98907 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -548,55 +548,47 @@ EXPORT_SYMBOL(fsync_bdev);
  * count down in thaw_bdev(). When it becomes 0, thaw_bdev() will unfreeze
  * actually.
  */
-struct super_block *freeze_bdev(struct block_device *bdev)
+int freeze_bdev(struct block_device *bdev)
 {
 	struct super_block *sb;
 	int error = 0;
 
 	mutex_lock(&bdev->bd_fsfreeze_mutex);
-	if (++bdev->bd_fsfreeze_count > 1) {
-		/*
-		 * We don't even need to grab a reference - the first call
-		 * to freeze_bdev grab an active reference and only the last
-		 * thaw_bdev drops it.
-		 */
-		sb = get_super(bdev);
-		if (sb)
-			drop_super(sb);
-		mutex_unlock(&bdev->bd_fsfreeze_mutex);
-		return sb;
-	}
+	if (++bdev->bd_fsfreeze_count > 1)
+		goto done;
 
 	sb = get_active_super(bdev);
 	if (!sb)
-		goto out;
+		goto sync;
 	if (sb->s_op->freeze_super)
 		error = sb->s_op->freeze_super(sb);
 	else
 		error = freeze_super(sb);
+	deactivate_super(sb);
+
 	if (error) {
-		deactivate_super(sb);
 		bdev->bd_fsfreeze_count--;
-		mutex_unlock(&bdev->bd_fsfreeze_mutex);
-		return ERR_PTR(error);
+		goto done;
 	}
-	deactivate_super(sb);
- out:
+	bdev->bd_fsfreeze_sb = sb;
+
+sync:
 	sync_blockdev(bdev);
+done:
 	mutex_unlock(&bdev->bd_fsfreeze_mutex);
-	return sb;	/* thaw_bdev releases s->s_umount */
+	return error;
 }
 EXPORT_SYMBOL(freeze_bdev);
 
 /**
  * thaw_bdev  -- unlock filesystem
  * @bdev:	blockdevice to unlock
- * @sb:		associated superblock
  *
  * Unlocks the filesystem and marks it writeable again after freeze_bdev().
  */
-int thaw_bdev(struct block_device *bdev, struct super_block *sb)
+int thaw_bdev(struct block_device *bdev)
 {
+	struct super_block *sb;
 	int error = -EINVAL;
 
 	mutex_lock(&bdev->bd_fsfreeze_mutex);
@@ -607,6 +599,7 @@ int thaw_bdev(struct block_device *bdev, struct super_block *sb)
 	if (--bdev->bd_fsfreeze_count > 0)
 		goto out;
 
+	sb = bdev->bd_fsfreeze_sb;
 	if (!sb)
 		goto out;
 
diff --git a/fs/buffer.c b/fs/buffer.c
index 23f645657488ba..a7595ada9400ff 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -523,7 +523,7 @@ static int osync_buffers_list(spinlock_t *lock, struct list_head *list)
 
 void emergency_thaw_bdev(struct super_block *sb)
 {
-	while (sb->s_bdev && !thaw_bdev(sb->s_bdev, sb))
+	while (sb->s_bdev && !thaw_bdev(sb->s_bdev))
 		printk(KERN_WARNING "Emergency Thaw on %pg\n", sb->s_bdev);
 }
 
diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
index f0381876a7e5b0..524e134324475e 100644
--- a/fs/ext4/ioctl.c
+++ b/fs/ext4/ioctl.c
@@ -624,7 +624,7 @@ static int ext4_shutdown(struct super_block *sb, unsigned long arg)
 	case EXT4_GOING_FLAGS_DEFAULT:
 		freeze_bdev(sb->s_bdev);
 		set_bit(EXT4_FLAGS_SHUTDOWN, &sbi->s_ext4_flags);
-		thaw_bdev(sb->s_bdev, sb);
+		thaw_bdev(sb->s_bdev);
 		break;
 	case EXT4_GOING_FLAGS_LOGFLUSH:
 		set_bit(EXT4_FLAGS_SHUTDOWN, &sbi->s_ext4_flags);
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index ee861c6d9ff026..a9fc482a0e60a5 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -2230,16 +2230,12 @@ static int f2fs_ioc_shutdown(struct file *filp, unsigned long arg)
 
 	switch (in) {
 	case F2FS_GOING_DOWN_FULLSYNC:
-		sb = freeze_bdev(sb->s_bdev);
-		if (IS_ERR(sb)) {
-			ret = PTR_ERR(sb);
+		ret = freeze_bdev(sb->s_bdev);
+		if (ret)
 			goto out;
-		}
-		if (sb) {
-			f2fs_stop_checkpoint(sbi, false);
-			set_sbi_flag(sbi, SBI_IS_SHUTDOWN);
-			thaw_bdev(sb->s_bdev, sb);
-		}
+		f2fs_stop_checkpoint(sbi, false);
+		set_sbi_flag(sbi, SBI_IS_SHUTDOWN);
+		thaw_bdev(sb->s_bdev);
 		break;
 	case F2FS_GOING_DOWN_METASYNC:
 		/* do checkpoint only */
diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c
index ef1d5bb88b93ab..b7c5783a031c69 100644
--- a/fs/xfs/xfs_fsops.c
+++ b/fs/xfs/xfs_fsops.c
@@ -433,13 +433,10 @@ xfs_fs_goingdown(
 {
 	switch (inflags) {
 	case XFS_FSOP_GOING_FLAGS_DEFAULT: {
-		struct super_block *sb = freeze_bdev(mp->m_super->s_bdev);
-
-		if (sb && !IS_ERR(sb)) {
+		if (!freeze_bdev(mp->m_super->s_bdev)) {
 			xfs_force_shutdown(mp, SHUTDOWN_FORCE_UMOUNT);
-			thaw_bdev(sb->s_bdev, sb);
+			thaw_bdev(mp->m_super->s_bdev);
 		}
-
 		break;
 	}
 	case XFS_FSOP_GOING_FLAGS_LOGFLUSH:
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
index d9b69bbde5cc54..ebfb4e7c1fd125 100644
--- a/include/linux/blk_types.h
+++ b/include/linux/blk_types.h
@@ -46,6 +46,7 @@ struct block_device {
 	int			bd_fsfreeze_count;
 	/* Mutex for freeze */
 	struct mutex		bd_fsfreeze_mutex;
+	struct super_block	*bd_fsfreeze_sb;
 } __randomize_layout;
 
 /*
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 05b346a68c2eee..12810a19edebc4 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -2020,7 +2020,7 @@ static inline int sync_blockdev(struct block_device *bdev)
 #endif
 int fsync_bdev(struct block_device *bdev);
 
-struct super_block *freeze_bdev(struct block_device *bdev);
-int thaw_bdev(struct block_device *bdev, struct super_block *sb);
+int freeze_bdev(struct block_device *bdev);
+int thaw_bdev(struct block_device *bdev);
 
 #endif /* _LINUX_BLKDEV_H */
-- 
2.29.2


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

WARNING: multiple messages have this Message-ID (diff)
From: Christoph Hellwig <hch@lst.de>
To: Jens Axboe <axboe@kernel.dk>
Cc: linux-bcache@vger.kernel.org, Chao Yu <yuchao0@huawei.com>,
	Jan Kara <jack@suse.cz>, Mike Snitzer <snitzer@redhat.com>,
	linux-mm@kvack.org,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jan Kara <jack@suse.com>, Josef Bacik <josef@toxicpanda.com>,
	Coly Li <colyli@suse.de>,
	linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	dm-devel@redhat.com, linux-mtd@lists.infradead.org,
	Johannes Thumshirn <johannes.thumshirn@wdc.com>,
	Tejun Heo <tj@kernel.org>
Subject: [dm-devel] [PATCH 04/44] fs: simplify freeze_bdev/thaw_bdev
Date: Thu, 26 Nov 2020 14:03:42 +0100	[thread overview]
Message-ID: <20201126130422.92945-5-hch@lst.de> (raw)
In-Reply-To: <20201126130422.92945-1-hch@lst.de>

Store the frozen superblock in struct block_device to avoid the awkward
interface that can return a sb only used a cookie, an ERR_PTR or NULL.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: Chao Yu <yuchao0@huawei.com>		[f2fs]
---
 drivers/md/dm-core.h      |  5 -----
 drivers/md/dm.c           | 20 ++++++--------------
 fs/block_dev.c            | 37 +++++++++++++++----------------------
 fs/buffer.c               |  2 +-
 fs/ext4/ioctl.c           |  2 +-
 fs/f2fs/file.c            | 14 +++++---------
 fs/xfs/xfs_fsops.c        |  7 ++-----
 include/linux/blk_types.h |  1 +
 include/linux/blkdev.h    |  4 ++--
 9 files changed, 33 insertions(+), 59 deletions(-)

diff --git a/drivers/md/dm-core.h b/drivers/md/dm-core.h
index d522093cb39dda..aace147effcacb 100644
--- a/drivers/md/dm-core.h
+++ b/drivers/md/dm-core.h
@@ -96,11 +96,6 @@ struct mapped_device {
 	 */
 	struct workqueue_struct *wq;
 
-	/*
-	 * freeze/thaw support require holding onto a super block
-	 */
-	struct super_block *frozen_sb;
-
 	/* forced geometry settings */
 	struct hd_geometry geometry;
 
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 54739f1b579bc8..50541d336c719b 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -2392,27 +2392,19 @@ static int lock_fs(struct mapped_device *md)
 {
 	int r;
 
-	WARN_ON(md->frozen_sb);
+	WARN_ON(test_bit(DMF_FROZEN, &md->flags));
 
-	md->frozen_sb = freeze_bdev(md->bdev);
-	if (IS_ERR(md->frozen_sb)) {
-		r = PTR_ERR(md->frozen_sb);
-		md->frozen_sb = NULL;
-		return r;
-	}
-
-	set_bit(DMF_FROZEN, &md->flags);
-
-	return 0;
+	r = freeze_bdev(md->bdev);
+	if (!r)
+		set_bit(DMF_FROZEN, &md->flags);
+	return r;
 }
 
 static void unlock_fs(struct mapped_device *md)
 {
 	if (!test_bit(DMF_FROZEN, &md->flags))
 		return;
-
-	thaw_bdev(md->bdev, md->frozen_sb);
-	md->frozen_sb = NULL;
+	thaw_bdev(md->bdev);
 	clear_bit(DMF_FROZEN, &md->flags);
 }
 
diff --git a/fs/block_dev.c b/fs/block_dev.c
index d8664f5c1ff669..33c29106c98907 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -548,55 +548,47 @@ EXPORT_SYMBOL(fsync_bdev);
  * count down in thaw_bdev(). When it becomes 0, thaw_bdev() will unfreeze
  * actually.
  */
-struct super_block *freeze_bdev(struct block_device *bdev)
+int freeze_bdev(struct block_device *bdev)
 {
 	struct super_block *sb;
 	int error = 0;
 
 	mutex_lock(&bdev->bd_fsfreeze_mutex);
-	if (++bdev->bd_fsfreeze_count > 1) {
-		/*
-		 * We don't even need to grab a reference - the first call
-		 * to freeze_bdev grab an active reference and only the last
-		 * thaw_bdev drops it.
-		 */
-		sb = get_super(bdev);
-		if (sb)
-			drop_super(sb);
-		mutex_unlock(&bdev->bd_fsfreeze_mutex);
-		return sb;
-	}
+	if (++bdev->bd_fsfreeze_count > 1)
+		goto done;
 
 	sb = get_active_super(bdev);
 	if (!sb)
-		goto out;
+		goto sync;
 	if (sb->s_op->freeze_super)
 		error = sb->s_op->freeze_super(sb);
 	else
 		error = freeze_super(sb);
+	deactivate_super(sb);
+
 	if (error) {
-		deactivate_super(sb);
 		bdev->bd_fsfreeze_count--;
-		mutex_unlock(&bdev->bd_fsfreeze_mutex);
-		return ERR_PTR(error);
+		goto done;
 	}
-	deactivate_super(sb);
- out:
+	bdev->bd_fsfreeze_sb = sb;
+
+sync:
 	sync_blockdev(bdev);
+done:
 	mutex_unlock(&bdev->bd_fsfreeze_mutex);
-	return sb;	/* thaw_bdev releases s->s_umount */
+	return error;
 }
 EXPORT_SYMBOL(freeze_bdev);
 
 /**
  * thaw_bdev  -- unlock filesystem
  * @bdev:	blockdevice to unlock
- * @sb:		associated superblock
  *
  * Unlocks the filesystem and marks it writeable again after freeze_bdev().
  */
-int thaw_bdev(struct block_device *bdev, struct super_block *sb)
+int thaw_bdev(struct block_device *bdev)
 {
+	struct super_block *sb;
 	int error = -EINVAL;
 
 	mutex_lock(&bdev->bd_fsfreeze_mutex);
@@ -607,6 +599,7 @@ int thaw_bdev(struct block_device *bdev, struct super_block *sb)
 	if (--bdev->bd_fsfreeze_count > 0)
 		goto out;
 
+	sb = bdev->bd_fsfreeze_sb;
 	if (!sb)
 		goto out;
 
diff --git a/fs/buffer.c b/fs/buffer.c
index 23f645657488ba..a7595ada9400ff 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -523,7 +523,7 @@ static int osync_buffers_list(spinlock_t *lock, struct list_head *list)
 
 void emergency_thaw_bdev(struct super_block *sb)
 {
-	while (sb->s_bdev && !thaw_bdev(sb->s_bdev, sb))
+	while (sb->s_bdev && !thaw_bdev(sb->s_bdev))
 		printk(KERN_WARNING "Emergency Thaw on %pg\n", sb->s_bdev);
 }
 
diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
index f0381876a7e5b0..524e134324475e 100644
--- a/fs/ext4/ioctl.c
+++ b/fs/ext4/ioctl.c
@@ -624,7 +624,7 @@ static int ext4_shutdown(struct super_block *sb, unsigned long arg)
 	case EXT4_GOING_FLAGS_DEFAULT:
 		freeze_bdev(sb->s_bdev);
 		set_bit(EXT4_FLAGS_SHUTDOWN, &sbi->s_ext4_flags);
-		thaw_bdev(sb->s_bdev, sb);
+		thaw_bdev(sb->s_bdev);
 		break;
 	case EXT4_GOING_FLAGS_LOGFLUSH:
 		set_bit(EXT4_FLAGS_SHUTDOWN, &sbi->s_ext4_flags);
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index ee861c6d9ff026..a9fc482a0e60a5 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -2230,16 +2230,12 @@ static int f2fs_ioc_shutdown(struct file *filp, unsigned long arg)
 
 	switch (in) {
 	case F2FS_GOING_DOWN_FULLSYNC:
-		sb = freeze_bdev(sb->s_bdev);
-		if (IS_ERR(sb)) {
-			ret = PTR_ERR(sb);
+		ret = freeze_bdev(sb->s_bdev);
+		if (ret)
 			goto out;
-		}
-		if (sb) {
-			f2fs_stop_checkpoint(sbi, false);
-			set_sbi_flag(sbi, SBI_IS_SHUTDOWN);
-			thaw_bdev(sb->s_bdev, sb);
-		}
+		f2fs_stop_checkpoint(sbi, false);
+		set_sbi_flag(sbi, SBI_IS_SHUTDOWN);
+		thaw_bdev(sb->s_bdev);
 		break;
 	case F2FS_GOING_DOWN_METASYNC:
 		/* do checkpoint only */
diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c
index ef1d5bb88b93ab..b7c5783a031c69 100644
--- a/fs/xfs/xfs_fsops.c
+++ b/fs/xfs/xfs_fsops.c
@@ -433,13 +433,10 @@ xfs_fs_goingdown(
 {
 	switch (inflags) {
 	case XFS_FSOP_GOING_FLAGS_DEFAULT: {
-		struct super_block *sb = freeze_bdev(mp->m_super->s_bdev);
-
-		if (sb && !IS_ERR(sb)) {
+		if (!freeze_bdev(mp->m_super->s_bdev)) {
 			xfs_force_shutdown(mp, SHUTDOWN_FORCE_UMOUNT);
-			thaw_bdev(sb->s_bdev, sb);
+			thaw_bdev(mp->m_super->s_bdev);
 		}
-
 		break;
 	}
 	case XFS_FSOP_GOING_FLAGS_LOGFLUSH:
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
index d9b69bbde5cc54..ebfb4e7c1fd125 100644
--- a/include/linux/blk_types.h
+++ b/include/linux/blk_types.h
@@ -46,6 +46,7 @@ struct block_device {
 	int			bd_fsfreeze_count;
 	/* Mutex for freeze */
 	struct mutex		bd_fsfreeze_mutex;
+	struct super_block	*bd_fsfreeze_sb;
 } __randomize_layout;
 
 /*
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 05b346a68c2eee..12810a19edebc4 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -2020,7 +2020,7 @@ static inline int sync_blockdev(struct block_device *bdev)
 #endif
 int fsync_bdev(struct block_device *bdev);
 
-struct super_block *freeze_bdev(struct block_device *bdev);
-int thaw_bdev(struct block_device *bdev, struct super_block *sb);
+int freeze_bdev(struct block_device *bdev);
+int thaw_bdev(struct block_device *bdev);
 
 #endif /* _LINUX_BLKDEV_H */
-- 
2.29.2

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel


  parent reply	other threads:[~2020-11-26 13:07 UTC|newest]

Thread overview: 267+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-26 13:03 merge struct block_device and struct hd_struct v3 Christoph Hellwig
2020-11-26 13:03 ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03 ` Christoph Hellwig
2020-11-26 13:03 ` [PATCH 01/44] blk-cgroup: fix a hd_struct leak in blkcg_fill_root_iostats Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-26 13:03 ` [PATCH 02/44] filemap: consistently use ->f_mapping over ->i_mapping Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-26 13:03 ` [PATCH 03/44] fs: remove get_super_thawed and get_super_exclusive_thawed Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-26 13:03 ` Christoph Hellwig [this message]
2020-11-26 13:03   ` [dm-devel] [PATCH 04/44] fs: simplify freeze_bdev/thaw_bdev Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-26 14:13   ` Jan Kara
2020-11-26 14:13     ` [dm-devel] " Jan Kara
2020-11-26 14:13     ` Jan Kara
2020-11-26 13:03 ` [PATCH 05/44] mtip32xx: remove the call to fsync_bdev on removal Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-26 13:03 ` [PATCH 06/44] zram: do not call set_blocksize Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-26 13:03 ` [PATCH 07/44] loop: " Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-26 13:03 ` [PATCH 08/44] dm: simplify flush_bio initialization in __send_empty_flush Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-26 13:03 ` [PATCH 09/44] dm: remove the block_device reference in struct mapped_device Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-27 10:36   ` Hannes Reinecke
2020-11-27 10:36     ` [dm-devel] " Hannes Reinecke
2020-11-27 10:36     ` Hannes Reinecke
2020-11-26 13:03 ` [PATCH 10/44] block: remove a duplicate __disk_get_part prototype Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-27 10:36   ` Hannes Reinecke
2020-11-27 10:36     ` [dm-devel] " Hannes Reinecke
2020-11-27 10:36     ` Hannes Reinecke
2020-11-26 13:03 ` [PATCH 11/44] block: remove a superflous check in blkpg_do_ioctl Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-27 10:37   ` Hannes Reinecke
2020-11-27 10:37     ` [dm-devel] " Hannes Reinecke
2020-11-27 10:37     ` Hannes Reinecke
2020-11-26 13:03 ` [PATCH 12/44] block: add a bdev_kobj helper Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-26 14:47   ` David Sterba
2020-11-26 14:47     ` [dm-devel] " David Sterba
2020-11-26 14:47     ` David Sterba
2020-11-27 12:03   ` Hannes Reinecke
2020-11-27 12:03     ` [dm-devel] " Hannes Reinecke
2020-11-27 12:03     ` Hannes Reinecke
2020-11-26 13:03 ` [PATCH 13/44] block: use disk_part_iter_exit in disk_part_iter_next Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-27 12:04   ` Hannes Reinecke
2020-11-27 12:04     ` [dm-devel] " Hannes Reinecke
2020-11-27 12:04     ` Hannes Reinecke
2020-11-26 13:03 ` [PATCH 14/44] block: use put_device in put_disk Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-26 13:03 ` [PATCH 15/44] block: change the hash used for looking up block devices Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-26 13:03 ` [PATCH 16/44] init: refactor name_to_dev_t Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-26 13:03 ` [PATCH 17/44] init: refactor devt_from_partuuid Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-26 13:03 ` [PATCH 18/44] init: cleanup match_dev_by_uuid and match_dev_by_label Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-26 13:03 ` [PATCH 19/44] block: refactor __blkdev_put Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-26 13:03 ` [PATCH 20/44] block: refactor blkdev_get Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-26 14:55   ` Jan Kara
2020-11-26 14:55     ` [dm-devel] " Jan Kara
2020-11-26 14:55     ` Jan Kara
2020-11-26 13:03 ` [PATCH 21/44] block: move bdput() to the callers of __blkdev_get Christoph Hellwig
2020-11-26 13:03   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:03   ` Christoph Hellwig
2020-11-26 15:05   ` Jan Kara
2020-11-26 15:05     ` [dm-devel] " Jan Kara
2020-11-26 15:05     ` Jan Kara
2020-11-26 13:04 ` [PATCH 22/44] block: opencode devcgroup_inode_permission Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 15:07   ` Jan Kara
2020-11-26 15:07     ` [dm-devel] " Jan Kara
2020-11-26 15:07     ` Jan Kara
2020-11-26 13:04 ` [PATCH 23/44] block: remove i_bdev Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 15:45   ` Jan Kara
2020-11-26 15:45     ` [dm-devel] " Jan Kara
2020-11-26 15:45     ` Jan Kara
2020-11-26 13:04 ` [PATCH 24/44] block: simplify bdev/disk lookup in blkdev_get Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 16:33   ` Jan Kara
2020-11-26 16:33     ` [dm-devel] " Jan Kara
2020-11-26 16:33     ` Jan Kara
2020-11-26 17:42     ` Christoph Hellwig
2020-11-26 17:42       ` [dm-devel] " Christoph Hellwig
2020-11-26 17:42       ` Christoph Hellwig
2020-11-26 13:04 ` [PATCH 25/44] block: remove ->bd_contains Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 13:04 ` [PATCH 26/44] block: simplify the block device claiming interface Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 13:04 ` [PATCH 27/44] block: simplify part_to_disk Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 16:36   ` Jan Kara
2020-11-26 16:36     ` [dm-devel] " Jan Kara
2020-11-26 16:36     ` Jan Kara
2020-11-26 13:04 ` [PATCH 28/44] block: initialize struct block_device in bdev_alloc Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 16:37   ` Jan Kara
2020-11-26 16:37     ` [dm-devel] " Jan Kara
2020-11-26 16:37     ` Jan Kara
2020-11-26 13:04 ` [PATCH 29/44] block: remove the nr_sects field in struct hd_struct Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 16:50   ` Jan Kara
2020-11-26 16:50     ` [dm-devel] " Jan Kara
2020-11-26 16:50     ` Jan Kara
2020-11-26 17:52     ` Christoph Hellwig
2020-11-26 17:52       ` [dm-devel] " Christoph Hellwig
2020-11-26 17:52       ` Christoph Hellwig
2020-11-26 18:04       ` Jan Kara
2020-11-26 18:04         ` [dm-devel] " Jan Kara
2020-11-26 18:04         ` Jan Kara
2020-11-27  9:41         ` Christoph Hellwig
2020-11-27  9:41           ` [dm-devel] " Christoph Hellwig
2020-11-27  9:41           ` Christoph Hellwig
2020-11-26 13:04 ` [PATCH 30/44] block: move disk stat accounting to struct block_device Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 16:53   ` Jan Kara
2020-11-26 16:53     ` [dm-devel] " Jan Kara
2020-11-26 16:53     ` Jan Kara
2020-11-26 13:04 ` [PATCH 31/44] block: move the start_sect field " Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 16:56   ` Jan Kara
2020-11-26 16:56     ` [dm-devel] " Jan Kara
2020-11-26 16:56     ` Jan Kara
2020-11-26 18:02     ` Christoph Hellwig
2020-11-26 18:02       ` [dm-devel] " Christoph Hellwig
2020-11-26 18:02       ` Christoph Hellwig
2020-11-26 13:04 ` [PATCH 32/44] block: move the partition_meta_info " Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 16:58   ` Jan Kara
2020-11-26 16:58     ` [dm-devel] " Jan Kara
2020-11-26 16:58     ` Jan Kara
2020-11-26 13:04 ` [PATCH 33/44] block: move holder_dir " Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 17:00   ` Jan Kara
2020-11-26 17:00     ` [dm-devel] " Jan Kara
2020-11-26 17:00     ` Jan Kara
2020-11-26 13:04 ` [PATCH 34/44] block: move make_it_fail " Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 17:01   ` Jan Kara
2020-11-26 17:01     ` [dm-devel] " Jan Kara
2020-11-26 17:01     ` Jan Kara
2020-11-26 13:04 ` [PATCH 35/44] block: move the policy field " Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 17:03   ` Jan Kara
2020-11-26 17:03     ` [dm-devel] " Jan Kara
2020-11-26 17:03     ` Jan Kara
2020-11-26 13:04 ` [PATCH 36/44] block: allocate struct hd_struct as part of struct bdev_inode Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 17:35   ` Jan Kara
2020-11-26 17:35     ` [dm-devel] " Jan Kara
2020-11-26 17:35     ` Jan Kara
2020-11-26 18:00     ` Jan Kara
2020-11-26 18:00       ` [dm-devel] " Jan Kara
2020-11-26 18:00       ` Jan Kara
2020-11-26 18:02       ` Christoph Hellwig
2020-11-26 18:02         ` [dm-devel] " Christoph Hellwig
2020-11-26 18:02         ` Christoph Hellwig
2020-11-26 13:04 ` [PATCH 37/44] block: switch partition lookup to use struct block_device Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 17:45   ` Jan Kara
2020-11-26 17:45     ` [dm-devel] " Jan Kara
2020-11-26 17:45     ` Jan Kara
2020-11-26 18:22   ` Jan Kara
2020-11-26 18:22     ` [dm-devel] " Jan Kara
2020-11-26 18:22     ` Jan Kara
2020-11-27  9:48     ` Christoph Hellwig
2020-11-27  9:48       ` [dm-devel] " Christoph Hellwig
2020-11-27  9:48       ` Christoph Hellwig
2020-11-27 12:45       ` Jan Kara
2020-11-27 12:45         ` [dm-devel] " Jan Kara
2020-11-27 12:45         ` Jan Kara
2020-11-27 15:36         ` Christoph Hellwig
2020-11-27 15:36           ` [dm-devel] " Christoph Hellwig
2020-11-27 15:36           ` Christoph Hellwig
2020-11-27 17:26           ` Jan Kara
2020-11-27 17:26             ` [dm-devel] " Jan Kara
2020-11-27 17:26             ` Jan Kara
2020-11-26 13:04 ` [PATCH 38/44] block: remove the partno field from struct hd_struct Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 17:46   ` Jan Kara
2020-11-26 17:46     ` [dm-devel] " Jan Kara
2020-11-26 17:46     ` Jan Kara
2020-11-26 13:04 ` [PATCH 39/44] block: pass a block_device to blk_alloc_devt Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 17:47   ` Jan Kara
2020-11-26 17:47     ` [dm-devel] " Jan Kara
2020-11-26 17:47     ` Jan Kara
2020-11-26 13:04 ` [PATCH 40/44] block: pass a block_device to invalidate_partition Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 17:49   ` Jan Kara
2020-11-26 17:49     ` [dm-devel] " Jan Kara
2020-11-26 17:49     ` Jan Kara
2020-11-26 13:04 ` [PATCH 41/44] block: switch disk_part_iter_* to use a struct block_device Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-27 12:53   ` Jan Kara
2020-11-27 12:53     ` [dm-devel] " Jan Kara
2020-11-27 12:53     ` Jan Kara
2020-11-27 15:24     ` Christoph Hellwig
2020-11-27 15:24       ` [dm-devel] " Christoph Hellwig
2020-11-27 15:24       ` Christoph Hellwig
2020-11-27 17:30       ` Jan Kara
2020-11-27 17:30         ` [dm-devel] " Jan Kara
2020-11-27 17:30         ` Jan Kara
2020-11-26 13:04 ` [PATCH 42/44] f2fs: remove a few bd_part checks Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-26 13:04 ` [PATCH 43/44] block: merge struct block_device and struct hd_struct Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-27 13:19   ` Jan Kara
2020-11-27 13:19     ` [dm-devel] " Jan Kara
2020-11-27 13:19     ` Jan Kara
2020-11-27 15:47     ` Christoph Hellwig
2020-11-27 15:47       ` [dm-devel] " Christoph Hellwig
2020-11-27 15:47       ` Christoph Hellwig
2020-11-26 13:04 ` [PATCH 44/44] block: stop using bdget_disk for partition 0 Christoph Hellwig
2020-11-26 13:04   ` [dm-devel] " Christoph Hellwig
2020-11-26 13:04   ` Christoph Hellwig
2020-11-27 13:22   ` Jan Kara
2020-11-27 13:22     ` [dm-devel] " Jan Kara
2020-11-27 13:22     ` Jan Kara

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201126130422.92945-5-hch@lst.de \
    --to=hch@lst.de \
    --cc=axboe@kernel.dk \
    --cc=colyli@suse.de \
    --cc=dm-devel@redhat.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jack@suse.com \
    --cc=jack@suse.cz \
    --cc=johannes.thumshirn@wdc.com \
    --cc=josef@toxicpanda.com \
    --cc=linux-bcache@vger.kernel.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=snitzer@redhat.com \
    --cc=tj@kernel.org \
    --cc=yuchao0@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.