linux-f2fs-devel.lists.sourceforge.net archive mirror
 help / color / mirror / Atom feed
* [f2fs-dev] [PATCH v2 0/29] block: Make blkdev_get_by_*() return handle
@ 2023-08-11 11:04 Jan Kara
  2023-08-11 11:04 ` [f2fs-dev] [PATCH 23/29] f2fs: Convert to bdev_open_by_dev/path() Jan Kara
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Jan Kara @ 2023-08-11 11:04 UTC (permalink / raw)
  To: linux-fsdevel
  Cc: Dave Kleikamp, jfs-discussion, Jan Kara, Darrick J. Wong,
	linux-nvme, Joseph Qi, dm-devel, target-devel, linux-mtd,
	Jack Wang, Alasdair Kergon, drbd-dev, linux-s390, linux-nilfs,
	linux-scsi, Sergey Senozhatsky, Christoph Hellwig, xen-devel,
	Gao Xiang, Christian Borntraeger, Kent Overstreet, Sven Schnelle,
	linux-pm, Mike Snitzer, Joern Engel, reiserfs-devel, linux-block,
	linux-bcache, David Sterba, Jaegeuk Kim, Trond Myklebust,
	linux-raid, linux-nfs, linux-ext4, Ted Tso, linux-mm, Song Liu,
	linux-f2fs-devel, linux-xfs, Minchan Kim, ocfs2-devel,
	Anna Schumaker, Md. Haris Iqbal, Andrew Morton, linux-erofs,
	linux-btrfs

Hello,

this is a v2 of the patch series which implements the idea of blkdev_get_by_*()
calls returning bdev_handle which is then passed to blkdev_put() [1]. This
makes the get and put calls for bdevs more obviously matching and allows us to
propagate context from get to put without having to modify all the users
(again!).  In particular I need to propagate used open flags to blkdev_put() to
be able count writeable opens and add support for blocking writes to mounted
block devices. I'll send that series separately.

The series is based on Christian's vfs tree as of yesterday as there is quite
some overlap. Patches have passed some reasonable testing - I've tested block
changes, md, dm, bcache, xfs, btrfs, ext4, swap. This obviously doesn't cover
everything so I'd like to ask respective maintainers to review / test their
changes. Thanks! I've pushed out the full branch to:

git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs.git bdev_handle

to ease review / testing.

Changes since v1:
* Rebased on top of current vfs tree
* Renamed final functions to bdev_open_by_*() and bdev_release()
* Fixed detection of exclusive open in blkdev_ioctl() and blkdev_fallocate()
* Fixed swap conversion to properly reinitialize swap_info->bdev_handle
* Fixed xfs conversion to not oops with rtdev without logdev
* Couple other minor fixups

								Honza

[1] https://lore.kernel.org/all/ZJGNsVDhZx0Xgs2H@infradead.org

CC: Alasdair Kergon <agk@redhat.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Anna Schumaker <anna@kernel.org>
CC: Chao Yu <chao@kernel.org>
CC: Christian Borntraeger <borntraeger@linux.ibm.com>
CC: Coly Li <colyli@suse.de
CC: "Darrick J. Wong" <djwong@kernel.org>
CC: Dave Kleikamp <shaggy@kernel.org>
CC: David Sterba <dsterba@suse.com>
CC: dm-devel@redhat.com
CC: drbd-dev@lists.linbit.com
CC: Gao Xiang <xiang@kernel.org>
CC: Jack Wang <jinpu.wang@ionos.com>
CC: Jaegeuk Kim <jaegeuk@kernel.org>
CC: jfs-discussion@lists.sourceforge.net
CC: Joern Engel <joern@lazybastard.org>
CC: Joseph Qi <joseph.qi@linux.alibaba.com>
CC: Kent Overstreet <kent.overstreet@gmail.com>
CC: linux-bcache@vger.kernel.org
CC: linux-btrfs@vger.kernel.org
CC: linux-erofs@lists.ozlabs.org
CC: <linux-ext4@vger.kernel.org>
CC: linux-f2fs-devel@lists.sourceforge.net
CC: linux-mm@kvack.org
CC: linux-mtd@lists.infradead.org
CC: linux-nfs@vger.kernel.org
CC: linux-nilfs@vger.kernel.org
CC: linux-nvme@lists.infradead.org
CC: linux-pm@vger.kernel.org
CC: linux-raid@vger.kernel.org
CC: linux-s390@vger.kernel.org
CC: linux-scsi@vger.kernel.org
CC: linux-xfs@vger.kernel.org
CC: "Md. Haris Iqbal" <haris.iqbal@ionos.com>
CC: Mike Snitzer <snitzer@kernel.org>
CC: Minchan Kim <minchan@kernel.org>
CC: ocfs2-devel@oss.oracle.com
CC: reiserfs-devel@vger.kernel.org
CC: Sergey Senozhatsky <senozhatsky@chromium.org>
CC: Song Liu <song@kernel.org>
CC: Sven Schnelle <svens@linux.ibm.com>
CC: target-devel@vger.kernel.org
CC: Ted Tso <tytso@mit.edu>
CC: Trond Myklebust <trond.myklebust@hammerspace.com>
CC: xen-devel@lists.xenproject.org

Previous versions:
Link: http://lore.kernel.org/r/20230629165206.383-1-jack@suse.cz # v1


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [f2fs-dev] [PATCH 23/29] f2fs: Convert to bdev_open_by_dev/path()
  2023-08-11 11:04 [f2fs-dev] [PATCH v2 0/29] block: Make blkdev_get_by_*() return handle Jan Kara
@ 2023-08-11 11:04 ` Jan Kara
  2023-08-11 12:27 ` [f2fs-dev] [PATCH v2 0/29] block: Make blkdev_get_by_*() return handle Christoph Hellwig
  2023-08-25  1:58 ` Al Viro
  2 siblings, 0 replies; 14+ messages in thread
From: Jan Kara @ 2023-08-11 11:04 UTC (permalink / raw)
  To: linux-fsdevel
  Cc: Christoph Hellwig, Jan Kara, linux-f2fs-devel, linux-block, Jaegeuk Kim

Convert f2fs to use bdev_open_by_dev/path() and pass the handle around.

CC: Jaegeuk Kim <jaegeuk@kernel.org>
CC: Chao Yu <chao@kernel.org>
CC: linux-f2fs-devel@lists.sourceforge.net
Signed-off-by: Jan Kara <jack@suse.cz>
---
 fs/f2fs/f2fs.h  |  1 +
 fs/f2fs/super.c | 17 +++++++++--------
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index e18272ae3119..2ec6c10df636 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -1234,6 +1234,7 @@ struct f2fs_bio_info {
 #define FDEV(i)				(sbi->devs[i])
 #define RDEV(i)				(raw_super->devs[i])
 struct f2fs_dev_info {
+	struct bdev_handle *bdev_handle;
 	struct block_device *bdev;
 	char path[MAX_PATH_LEN];
 	unsigned int total_segments;
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index aa1f9a3a8037..885dcbd81859 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -1561,7 +1561,7 @@ static void destroy_device_list(struct f2fs_sb_info *sbi)
 	int i;
 
 	for (i = 0; i < sbi->s_ndevs; i++) {
-		blkdev_put(FDEV(i).bdev, sbi->sb);
+		bdev_release(FDEV(i).bdev_handle);
 #ifdef CONFIG_BLK_DEV_ZONED
 		kvfree(FDEV(i).blkz_seq);
 #endif
@@ -4196,9 +4196,9 @@ static int f2fs_scan_devices(struct f2fs_sb_info *sbi)
 
 		if (max_devices == 1) {
 			/* Single zoned block device mount */
-			FDEV(0).bdev =
-				blkdev_get_by_dev(sbi->sb->s_bdev->bd_dev, mode,
-						  sbi->sb, NULL);
+			FDEV(0).bdev_handle = bdev_open_by_dev(
+					sbi->sb->s_bdev->bd_dev, mode, sbi->sb,
+					NULL);
 		} else {
 			/* Multi-device mount */
 			memcpy(FDEV(i).path, RDEV(i).path, MAX_PATH_LEN);
@@ -4216,12 +4216,13 @@ static int f2fs_scan_devices(struct f2fs_sb_info *sbi)
 					(FDEV(i).total_segments <<
 					sbi->log_blocks_per_seg) - 1;
 			}
-			FDEV(i).bdev = blkdev_get_by_path(FDEV(i).path, mode,
-							  sbi->sb, NULL);
+			FDEV(i).bdev_handle = bdev_open_by_path(FDEV(i).path,
+					mode, sbi->sb, NULL);
 		}
-		if (IS_ERR(FDEV(i).bdev))
-			return PTR_ERR(FDEV(i).bdev);
+		if (IS_ERR(FDEV(i).bdev_handle))
+			return PTR_ERR(FDEV(i).bdev_handle);
 
+		FDEV(i).bdev = FDEV(i).bdev_handle->bdev;
 		/* to release errored devices */
 		sbi->s_ndevs = i + 1;
 
-- 
2.35.3



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [f2fs-dev] [PATCH v2 0/29] block: Make blkdev_get_by_*() return handle
  2023-08-11 11:04 [f2fs-dev] [PATCH v2 0/29] block: Make blkdev_get_by_*() return handle Jan Kara
  2023-08-11 11:04 ` [f2fs-dev] [PATCH 23/29] f2fs: Convert to bdev_open_by_dev/path() Jan Kara
@ 2023-08-11 12:27 ` Christoph Hellwig
  2023-08-25  1:58 ` Al Viro
  2 siblings, 0 replies; 14+ messages in thread
From: Christoph Hellwig @ 2023-08-11 12:27 UTC (permalink / raw)
  To: Jan Kara
  Cc: Dave Kleikamp, jfs-discussion, Darrick J. Wong, linux-nvme,
	Joseph Qi, dm-devel, target-devel, linux-mtd, Jack Wang,
	Alasdair Kergon, drbd-dev, linux-s390, linux-nilfs, linux-scsi,
	Sergey Senozhatsky, Christoph Hellwig, xen-devel, Gao Xiang,
	Christian Borntraeger, Kent Overstreet, Sven Schnelle, linux-pm,
	Mike Snitzer, Joern Engel, reiserfs-devel, linux-block,
	linux-bcache, David Sterba, Jaegeuk Kim, Trond Myklebust,
	linux-raid, linux-nfs, linux-ext4, Ted Tso, linux-mm, Song Liu,
	linux-f2fs-devel, linux-xfs, Minchan Kim, ocfs2-devel,
	Anna Schumaker, linux-fsdevel, Md. Haris Iqbal, Andrew Morton,
	linux-erofs, linux-btrfs

Except for a mostly cosmetic nitpick this looks good to me:

Acked-by: Christoph Hellwig <hch@lst.de>

That's not eactly the deep review I'd like to do, but as I'm about to
head out for vacation that's probably as good as it gets.


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [f2fs-dev] [PATCH v2 0/29] block: Make blkdev_get_by_*() return handle
  2023-08-11 11:04 [f2fs-dev] [PATCH v2 0/29] block: Make blkdev_get_by_*() return handle Jan Kara
  2023-08-11 11:04 ` [f2fs-dev] [PATCH 23/29] f2fs: Convert to bdev_open_by_dev/path() Jan Kara
  2023-08-11 12:27 ` [f2fs-dev] [PATCH v2 0/29] block: Make blkdev_get_by_*() return handle Christoph Hellwig
@ 2023-08-25  1:58 ` Al Viro
  2023-08-25 13:47   ` Jan Kara
  2 siblings, 1 reply; 14+ messages in thread
From: Al Viro @ 2023-08-25  1:58 UTC (permalink / raw)
  To: Jan Kara
  Cc: Dave Kleikamp, jfs-discussion, Darrick J. Wong, linux-nvme,
	Joseph Qi, dm-devel, target-devel, linux-mtd, Jack Wang,
	Alasdair Kergon, drbd-dev, linux-s390, linux-nilfs, linux-scsi,
	Sergey Senozhatsky, Christoph Hellwig, xen-devel, Gao Xiang,
	Christian Borntraeger, Kent Overstreet, Sven Schnelle, linux-pm,
	Mike Snitzer, Joern Engel, reiserfs-devel, linux-block,
	linux-bcache, David Sterba, Jaegeuk Kim, Trond Myklebust,
	linux-raid, linux-nfs, linux-ext4, Ted Tso, linux-mm, Song Liu,
	linux-f2fs-devel, linux-xfs, Minchan Kim, ocfs2-devel,
	Anna Schumaker, linux-fsdevel, Md. Haris Iqbal, Andrew Morton,
	linux-erofs, linux-btrfs

On Fri, Aug 11, 2023 at 01:04:31PM +0200, Jan Kara wrote:
> Hello,
> 
> this is a v2 of the patch series which implements the idea of blkdev_get_by_*()
> calls returning bdev_handle which is then passed to blkdev_put() [1]. This
> makes the get and put calls for bdevs more obviously matching and allows us to
> propagate context from get to put without having to modify all the users
> (again!).  In particular I need to propagate used open flags to blkdev_put() to
> be able count writeable opens and add support for blocking writes to mounted
> block devices. I'll send that series separately.
> 
> The series is based on Christian's vfs tree as of yesterday as there is quite
> some overlap. Patches have passed some reasonable testing - I've tested block
> changes, md, dm, bcache, xfs, btrfs, ext4, swap. This obviously doesn't cover
> everything so I'd like to ask respective maintainers to review / test their
> changes. Thanks! I've pushed out the full branch to:
> 
> git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs.git bdev_handle
> 
> to ease review / testing.

Hmm...  Completely Insane Idea(tm): how about turning that thing inside out and
having your bdev_open_by... return an actual opened struct file?

After all, we do that for sockets and pipes just fine and that's a whole lot
hotter area.

Suppose we leave blkdev_open()/blkdev_release() as-is.  No need to mess with
what we have for normal opened files for block devices.  And have block_open_by_dev()
that would find bdev, etc., same yours does and shove it into anon file.

Paired with plain fput() - no need to bother with new primitives for closing.
With a helper returning I_BDEV(bdev_file_inode(file)) to get from those to bdev.

NOTE: I'm not suggesting replacing ->s_bdev with struct file * if we do that -
we want that value cached, obviously.  Just store both...

Not saying it's a good idea, but... might be interesting to look into.
Comments?


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [f2fs-dev] [PATCH v2 0/29] block: Make blkdev_get_by_*() return handle
  2023-08-25  1:58 ` Al Viro
@ 2023-08-25 13:47   ` Jan Kara
  2023-08-26  2:28     ` Al Viro
                       ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Jan Kara @ 2023-08-25 13:47 UTC (permalink / raw)
  To: Al Viro
  Cc: Dave Kleikamp, jfs-discussion, Jan Kara, Darrick J. Wong,
	linux-nvme, Joseph Qi, dm-devel, target-devel, linux-mtd,
	Jack Wang, Alasdair Kergon, drbd-dev, linux-s390, linux-nilfs,
	linux-scsi, Sergey Senozhatsky, Christoph Hellwig, xen-devel,
	Gao Xiang, Christian Borntraeger, Kent Overstreet, Sven Schnelle,
	linux-pm, Mike Snitzer, Joern Engel, reiserfs-devel, linux-block,
	linux-bcache, Christian Brauner, David Sterba, Jaegeuk Kim,
	Trond Myklebust, Jens Axboe, linux-raid, linux-nfs, linux-ext4,
	Ted Tso, linux-mm, Song Liu, linux-f2fs-devel, linux-xfs,
	Minchan Kim, ocfs2-devel, Anna Schumaker, linux-fsdevel,
	Md. Haris Iqbal, Andrew Morton, linux-erofs, linux-btrfs

On Fri 25-08-23 02:58:43, Al Viro wrote:
> On Fri, Aug 11, 2023 at 01:04:31PM +0200, Jan Kara wrote:
> > Hello,
> > 
> > this is a v2 of the patch series which implements the idea of blkdev_get_by_*()
> > calls returning bdev_handle which is then passed to blkdev_put() [1]. This
> > makes the get and put calls for bdevs more obviously matching and allows us to
> > propagate context from get to put without having to modify all the users
> > (again!).  In particular I need to propagate used open flags to blkdev_put() to
> > be able count writeable opens and add support for blocking writes to mounted
> > block devices. I'll send that series separately.
> > 
> > The series is based on Christian's vfs tree as of yesterday as there is quite
> > some overlap. Patches have passed some reasonable testing - I've tested block
> > changes, md, dm, bcache, xfs, btrfs, ext4, swap. This obviously doesn't cover
> > everything so I'd like to ask respective maintainers to review / test their
> > changes. Thanks! I've pushed out the full branch to:
> > 
> > git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs.git bdev_handle
> > 
> > to ease review / testing.
> 
> Hmm...  Completely Insane Idea(tm): how about turning that thing inside out and
> having your bdev_open_by... return an actual opened struct file?
> 
> After all, we do that for sockets and pipes just fine and that's a whole lot
> hotter area.
> 
> Suppose we leave blkdev_open()/blkdev_release() as-is.  No need to mess with
> what we have for normal opened files for block devices.  And have block_open_by_dev()
> that would find bdev, etc., same yours does and shove it into anon file.
> 
> Paired with plain fput() - no need to bother with new primitives for closing.
> With a helper returning I_BDEV(bdev_file_inode(file)) to get from those to bdev.
> 
> NOTE: I'm not suggesting replacing ->s_bdev with struct file * if we do that -
> we want that value cached, obviously.  Just store both...
> 
> Not saying it's a good idea, but... might be interesting to look into.
> Comments?

I can see the appeal of not having to introduce the new bdev_handle type
and just using struct file which unifies in-kernel and userspace block
device opens. But I can see downsides too - the last fput() happening from
task work makes me a bit nervous whether it will not break something
somewhere with exclusive bdev opens. Getting from struct file to bdev is
somewhat harder but I guess a helper like F_BDEV() would solve that just
fine.

So besides my last fput() worry about I think this could work and would be
probably a bit nicer than what I have. But before going and redoing the whole
series let me gather some more feedback so that we don't go back and forth.
Christoph, Christian, Jens, any opinion?

								Honza
-- 
Jan Kara <jack@suse.com>
SUSE Labs, CR


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [f2fs-dev] [PATCH v2 0/29] block: Make blkdev_get_by_*() return handle
  2023-08-25 13:47   ` Jan Kara
@ 2023-08-26  2:28     ` Al Viro
  2023-08-28 14:27       ` Christoph Hellwig
  2023-08-28 13:20     ` Christian Brauner
  2023-08-28 14:22     ` Christoph Hellwig
  2 siblings, 1 reply; 14+ messages in thread
From: Al Viro @ 2023-08-26  2:28 UTC (permalink / raw)
  To: Jan Kara
  Cc: Dave Kleikamp, jfs-discussion, Darrick J. Wong, linux-nvme,
	Joseph Qi, dm-devel, target-devel, linux-mtd, Jack Wang,
	Alasdair Kergon, drbd-dev, linux-s390, linux-nilfs, linux-scsi,
	Sergey Senozhatsky, Christoph Hellwig, xen-devel, Gao Xiang,
	Christian Borntraeger, Kent Overstreet, Sven Schnelle, linux-pm,
	Mike Snitzer, Joern Engel, reiserfs-devel, linux-block,
	linux-bcache, Christian Brauner, David Sterba, Jaegeuk Kim,
	Trond Myklebust, Jens Axboe, linux-raid, linux-nfs, linux-ext4,
	Ted Tso, linux-mm, Song Liu, linux-f2fs-devel, linux-xfs,
	Minchan Kim, ocfs2-devel, Anna Schumaker, linux-fsdevel,
	Md. Haris Iqbal, Andrew Morton, linux-erofs, linux-btrfs

On Fri, Aug 25, 2023 at 03:47:56PM +0200, Jan Kara wrote:

> I can see the appeal of not having to introduce the new bdev_handle type
> and just using struct file which unifies in-kernel and userspace block
> device opens. But I can see downsides too - the last fput() happening from
> task work makes me a bit nervous whether it will not break something
> somewhere with exclusive bdev opens. Getting from struct file to bdev is
> somewhat harder but I guess a helper like F_BDEV() would solve that just
> fine.
> 
> So besides my last fput() worry about I think this could work and would be
> probably a bit nicer than what I have. But before going and redoing the whole
> series let me gather some more feedback so that we don't go back and forth.
> Christoph, Christian, Jens, any opinion?

Redoing is not an issue - it can be done on top of your series just
as well.  Async behaviour of fput() might be, but...  need to look
through the actual users; for a lot of them it's perfectly fine.

FWIW, from a cursory look there appears to be a missing primitive: take
an opened bdev (or bdev_handle, with your variant, or opened file if we
go that way eventually) and claim it.

I mean, look at claim_swapfile() for example:
                p->bdev = blkdev_get_by_dev(inode->i_rdev,
                                   FMODE_READ | FMODE_WRITE | FMODE_EXCL, p);
                if (IS_ERR(p->bdev)) {
                        error = PTR_ERR(p->bdev);
                        p->bdev = NULL;
                        return error;
                }
                p->old_block_size = block_size(p->bdev);
                error = set_blocksize(p->bdev, PAGE_SIZE);
                if (error < 0)
                        return error;
we already have the file opened, and we keep it opened all the way until
the swapoff(2); here we have noticed that it's a block device and we
	* open the fucker again (by device number), this time claiming
it with our swap_info_struct as holder, to be closed at swapoff(2) time
(just before we close the file)
	* flip the block size to PAGE_SIZE, to be reverted at swapoff(2)
time That really looks like it ought to be
	* take the opened file, see that it's a block device
	* try to claim it with that holder
	* on success, flip the block size
with close_filp() in the swapoff(2) (or failure exit path in swapon(2))
doing what it would've done for an O_EXCL opened block device.
The only difference from O_EXCL userland open is that here we would
end up with holder pointing not to struct file in question, but to our
swap_info_struct.  It will do the right thing.

This extra open is entirely due to "well, we need to claim it and the
primitive that does that happens to be tied to opening"; feels rather
counter-intuitive.

For that matter, we could add an explicit "unclaim" primitive - might
be easier to follow.  That would add another example where that could
be used - in blkdev_bszset() we have an opened block device (it's an
ioctl, after all), we want to change block size and we *really* don't
want to have that happen under a mounted filesystem.  So if it's not
opened exclusive, we do a temporary exclusive open of own and act on
that instead.   Might as well go for a temporary claim...

BTW, what happens if two threads call ioctl(fd, BLKBSZSET, &n)
for the same descriptor that happens to have been opened O_EXCL?
Without O_EXCL they would've been unable to claim the sucker at the same
time - the holder we are using is the address of a function argument,
i.e. something that points to kernel stack of the caller.  Those would
conflict and we either get set_blocksize() calls fully serialized, or
one of the callers would eat -EBUSY.  Not so in "opened with O_EXCL"
case - they can very well overlap and IIRC set_blocksize() does *not*
expect that kind of crap...  It's all under CAP_SYS_ADMIN, so it's not
as if it was a meaningful security hole anyway, but it does look fishy.


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [f2fs-dev] [PATCH v2 0/29] block: Make blkdev_get_by_*() return handle
  2023-08-25 13:47   ` Jan Kara
  2023-08-26  2:28     ` Al Viro
@ 2023-08-28 13:20     ` Christian Brauner
  2023-08-28 14:22     ` Christoph Hellwig
  2 siblings, 0 replies; 14+ messages in thread
From: Christian Brauner @ 2023-08-28 13:20 UTC (permalink / raw)
  To: Jan Kara
  Cc: Dave Kleikamp, jfs-discussion, Darrick J. Wong, linux-nvme,
	Joseph Qi, dm-devel, target-devel, linux-mtd, Jack Wang,
	Alasdair Kergon, drbd-dev, linux-s390, linux-nilfs, linux-scsi,
	Sergey Senozhatsky, Christoph Hellwig, xen-devel, Gao Xiang,
	Christian Borntraeger, Kent Overstreet, Sven Schnelle, linux-pm,
	Mike Snitzer, Joern Engel, reiserfs-devel, linux-block,
	linux-bcache, Al Viro, David Sterba, Jaegeuk Kim,
	Trond Myklebust, Jens Axboe, linux-raid, linux-nfs, linux-ext4,
	Ted Tso, linux-mm, Song Liu, linux-f2fs-devel, linux-xfs,
	Minchan Kim, ocfs2-devel, Anna Schumaker, linux-fsdevel,
	Md. Haris Iqbal, Andrew Morton, linux-erofs, linux-btrfs

> So besides my last fput() worry about I think this could work and would be
> probably a bit nicer than what I have. But before going and redoing the whole
> series let me gather some more feedback so that we don't go back and forth.
> Christoph, Christian, Jens, any opinion?

I'll be a bit under water for the next few days, I expect but I'll get
back to this. I think not making you redo this whole thing from scratch
is what I'd prefer unless there's really clear advantages. But I don't
want to offer a haphazard opinion in the middle of the merge window.


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [f2fs-dev] [PATCH v2 0/29] block: Make blkdev_get_by_*() return handle
  2023-08-25 13:47   ` Jan Kara
  2023-08-26  2:28     ` Al Viro
  2023-08-28 13:20     ` Christian Brauner
@ 2023-08-28 14:22     ` Christoph Hellwig
  2 siblings, 0 replies; 14+ messages in thread
From: Christoph Hellwig @ 2023-08-28 14:22 UTC (permalink / raw)
  To: Jan Kara
  Cc: Dave Kleikamp, jfs-discussion, Darrick J. Wong, linux-nvme,
	Joseph Qi, dm-devel, target-devel, linux-mtd, Jack Wang,
	Alasdair Kergon, drbd-dev, linux-s390, linux-nilfs, linux-scsi,
	Sergey Senozhatsky, Christoph Hellwig, xen-devel, Gao Xiang,
	Christian Borntraeger, Kent Overstreet, Sven Schnelle,
	Christian Brauner, linux-pm, Mike Snitzer, Joern Engel,
	reiserfs-devel, linux-block, linux-bcache, Al Viro, David Sterba,
	Jaegeuk Kim, Trond Myklebust, Jens Axboe, linux-raid, linux-nfs,
	linux-ext4, Ted Tso, linux-mm, Song Liu, linux-f2fs-devel,
	linux-xfs, Minchan Kim, ocfs2-devel, Anna Schumaker,
	linux-fsdevel, Md. Haris Iqbal, Andrew Morton, linux-erofs,
	linux-btrfs

On Fri, Aug 25, 2023 at 03:47:56PM +0200, Jan Kara wrote:
> I can see the appeal of not having to introduce the new bdev_handle type
> and just using struct file which unifies in-kernel and userspace block
> device opens. But I can see downsides too - the last fput() happening from
> task work makes me a bit nervous whether it will not break something
> somewhere with exclusive bdev opens. Getting from struct file to bdev is
> somewhat harder but I guess a helper like F_BDEV() would solve that just
> fine.
> 
> So besides my last fput() worry about I think this could work and would be
> probably a bit nicer than what I have. But before going and redoing the whole
> series let me gather some more feedback so that we don't go back and forth.
> Christoph, Christian, Jens, any opinion?

I did think about the file a bit.  The fact that we'd need something
like an anon_file for the by_dev open was always a huge turn off for
me, but maybe my concern is overblown.  Having a struct file would
actually be really useful for a bunch of users.



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [f2fs-dev] [PATCH v2 0/29] block: Make blkdev_get_by_*() return handle
  2023-08-26  2:28     ` Al Viro
@ 2023-08-28 14:27       ` Christoph Hellwig
  0 siblings, 0 replies; 14+ messages in thread
From: Christoph Hellwig @ 2023-08-28 14:27 UTC (permalink / raw)
  To: Al Viro
  Cc: Dave Kleikamp, jfs-discussion, Jan Kara, Darrick J. Wong,
	linux-nvme, Joseph Qi, dm-devel, target-devel, linux-mtd,
	Jack Wang, Alasdair Kergon, drbd-dev, linux-s390, linux-nilfs,
	linux-scsi, Sergey Senozhatsky, Christoph Hellwig, xen-devel,
	Gao Xiang, Christian Borntraeger, Kent Overstreet, Sven Schnelle,
	linux-pm, Mike Snitzer, Joern Engel, reiserfs-devel, linux-block,
	linux-bcache, Christian Brauner, David Sterba, Jaegeuk Kim,
	Trond Myklebust, Jens Axboe, linux-raid, linux-nfs, linux-ext4,
	Ted Tso, linux-mm, Song Liu, linux-f2fs-devel, linux-xfs,
	Minchan Kim, ocfs2-devel, Anna Schumaker, linux-fsdevel,
	Md. Haris Iqbal, Andrew Morton, linux-erofs, linux-btrfs

On Sat, Aug 26, 2023 at 03:28:52AM +0100, Al Viro wrote:
> I mean, look at claim_swapfile() for example:
>                 p->bdev = blkdev_get_by_dev(inode->i_rdev,
>                                    FMODE_READ | FMODE_WRITE | FMODE_EXCL, p);
>                 if (IS_ERR(p->bdev)) {
>                         error = PTR_ERR(p->bdev);
>                         p->bdev = NULL;
>                         return error;
>                 }
>                 p->old_block_size = block_size(p->bdev);
>                 error = set_blocksize(p->bdev, PAGE_SIZE);
>                 if (error < 0)
>                         return error;
> we already have the file opened, and we keep it opened all the way until
> the swapoff(2); here we have noticed that it's a block device and we
> 	* open the fucker again (by device number), this time claiming
> it with our swap_info_struct as holder, to be closed at swapoff(2) time
> (just before we close the file)

Note that some drivers look at FMODE_EXCL/BLK_OPEN_EXCL in ->open.
These are probably bogus and maybe we want to kill them, but that will
need an audit first.

> BTW, what happens if two threads call ioctl(fd, BLKBSZSET, &n)
> for the same descriptor that happens to have been opened O_EXCL?
> Without O_EXCL they would've been unable to claim the sucker at the same
> time - the holder we are using is the address of a function argument,
> i.e. something that points to kernel stack of the caller.  Those would
> conflict and we either get set_blocksize() calls fully serialized, or
> one of the callers would eat -EBUSY.  Not so in "opened with O_EXCL"
> case - they can very well overlap and IIRC set_blocksize() does *not*
> expect that kind of crap...  It's all under CAP_SYS_ADMIN, so it's not
> as if it was a meaningful security hole anyway, but it does look fishy.

The user get to keep the pieces..  BLKBSZSET is kinda bogus anyway
as the soft blocksize only matters for buffer_head-like I/O, and
there only for file systems.  Not idea why anyone would set it manually.


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [f2fs-dev] [PATCH 23/29] f2fs: Convert to bdev_open_by_dev/path()
  2023-08-23 10:48 [f2fs-dev] [PATCH v3 " Jan Kara
  2023-08-23 10:48 ` [f2fs-dev] [PATCH 23/29] f2fs: Convert to bdev_open_by_dev/path() Jan Kara
@ 2023-09-27  9:34 ` Jan Kara
  1 sibling, 0 replies; 14+ messages in thread
From: Jan Kara @ 2023-09-27  9:34 UTC (permalink / raw)
  To: Christian Brauner
  Cc: Christoph Hellwig, Jan Kara, linux-f2fs-devel, linux-block,
	linux-fsdevel, Jaegeuk Kim, Christoph Hellwig

Convert f2fs to use bdev_open_by_dev/path() and pass the handle around.

CC: Jaegeuk Kim <jaegeuk@kernel.org>
CC: Chao Yu <chao@kernel.org>
CC: linux-f2fs-devel@lists.sourceforge.net
Acked-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Jan Kara <jack@suse.cz>
---
 fs/f2fs/f2fs.h  |  1 +
 fs/f2fs/super.c | 13 +++++++------
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 6d688e42d89c..3878288122ee 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -1234,6 +1234,7 @@ struct f2fs_bio_info {
 #define FDEV(i)				(sbi->devs[i])
 #define RDEV(i)				(raw_super->devs[i])
 struct f2fs_dev_info {
+	struct bdev_handle *bdev_handle;
 	struct block_device *bdev;
 	char path[MAX_PATH_LEN];
 	unsigned int total_segments;
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index a8c8232852bb..027c3ee03985 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -1562,7 +1562,7 @@ static void destroy_device_list(struct f2fs_sb_info *sbi)
 
 	for (i = 0; i < sbi->s_ndevs; i++) {
 		if (i > 0)
-			blkdev_put(FDEV(i).bdev, sbi->sb);
+			bdev_release(FDEV(i).bdev_handle);
 #ifdef CONFIG_BLK_DEV_ZONED
 		kvfree(FDEV(i).blkz_seq);
 #endif
@@ -4198,7 +4198,7 @@ static int f2fs_scan_devices(struct f2fs_sb_info *sbi)
 
 	for (i = 0; i < max_devices; i++) {
 		if (i == 0)
-			FDEV(0).bdev = sbi->sb->s_bdev;
+			FDEV(0).bdev_handle = sbi->sb->s_bdev_handle;
 		else if (!RDEV(i).path[0])
 			break;
 
@@ -4218,13 +4218,14 @@ static int f2fs_scan_devices(struct f2fs_sb_info *sbi)
 				FDEV(i).end_blk = FDEV(i).start_blk +
 					(FDEV(i).total_segments <<
 					sbi->log_blocks_per_seg) - 1;
-				FDEV(i).bdev = blkdev_get_by_path(FDEV(i).path,
-					mode, sbi->sb, NULL);
+				FDEV(i).bdev_handle = bdev_open_by_path(
+					FDEV(i).path, mode, sbi->sb, NULL);
 			}
 		}
-		if (IS_ERR(FDEV(i).bdev))
-			return PTR_ERR(FDEV(i).bdev);
+		if (IS_ERR(FDEV(i).bdev_handle))
+			return PTR_ERR(FDEV(i).bdev_handle);
 
+		FDEV(i).bdev = FDEV(i).bdev_handle->bdev;
 		/* to release errored devices */
 		sbi->s_ndevs = i + 1;
 
-- 
2.35.3



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [f2fs-dev] [PATCH 23/29] f2fs: Convert to bdev_open_by_dev/path()
  2023-08-28 12:57   ` Chao Yu
@ 2023-08-28 16:35     ` Jan Kara
  0 siblings, 0 replies; 14+ messages in thread
From: Jan Kara @ 2023-08-28 16:35 UTC (permalink / raw)
  To: Chao Yu
  Cc: Jens Axboe, Christoph Hellwig, Christian Brauner, Jan Kara,
	linux-f2fs-devel, linux-block, linux-fsdevel, Jaegeuk Kim,
	Christoph Hellwig

On Mon 28-08-23 20:57:53, Chao Yu wrote:
> On 2023/8/23 18:48, Jan Kara wrote:
> > Convert f2fs to use bdev_open_by_dev/path() and pass the handle around.
> 
> Hi Jan,
> 
> Seems it will confilct w/ below commit, could you please take a look?
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git/commit/?h=dev&id=51bf8d3c81992ae57beeaf22df78ed7c2782af9d

Yes, it will conflict. But I don't plan to rush these patches into the
currently running merge window so I can just rebase after the f2fs patch
gets upstream. Thanks for the heads up.

								Honza

> > CC: Jaegeuk Kim <jaegeuk@kernel.org>
> > CC: Chao Yu <chao@kernel.org>
> > CC: linux-f2fs-devel@lists.sourceforge.net
> > Acked-by: Christoph Hellwig <hch@lst.de>
> > Signed-off-by: Jan Kara <jack@suse.cz>
> > ---
> >   fs/f2fs/f2fs.h  |  1 +
> >   fs/f2fs/super.c | 17 +++++++++--------
> >   2 files changed, 10 insertions(+), 8 deletions(-)
> > 
> > diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> > index e18272ae3119..2ec6c10df636 100644
> > --- a/fs/f2fs/f2fs.h
> > +++ b/fs/f2fs/f2fs.h
> > @@ -1234,6 +1234,7 @@ struct f2fs_bio_info {
> >   #define FDEV(i)				(sbi->devs[i])
> >   #define RDEV(i)				(raw_super->devs[i])
> >   struct f2fs_dev_info {
> > +	struct bdev_handle *bdev_handle;
> >   	struct block_device *bdev;
> >   	char path[MAX_PATH_LEN];
> >   	unsigned int total_segments;
> > diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> > index aa1f9a3a8037..885dcbd81859 100644
> > --- a/fs/f2fs/super.c
> > +++ b/fs/f2fs/super.c
> > @@ -1561,7 +1561,7 @@ static void destroy_device_list(struct f2fs_sb_info *sbi)
> >   	int i;
> >   	for (i = 0; i < sbi->s_ndevs; i++) {
> > -		blkdev_put(FDEV(i).bdev, sbi->sb);
> > +		bdev_release(FDEV(i).bdev_handle);
> >   #ifdef CONFIG_BLK_DEV_ZONED
> >   		kvfree(FDEV(i).blkz_seq);
> >   #endif
> > @@ -4196,9 +4196,9 @@ static int f2fs_scan_devices(struct f2fs_sb_info *sbi)
> >   		if (max_devices == 1) {
> >   			/* Single zoned block device mount */
> > -			FDEV(0).bdev =
> > -				blkdev_get_by_dev(sbi->sb->s_bdev->bd_dev, mode,
> > -						  sbi->sb, NULL);
> > +			FDEV(0).bdev_handle = bdev_open_by_dev(
> > +					sbi->sb->s_bdev->bd_dev, mode, sbi->sb,
> > +					NULL);
> >   		} else {
> >   			/* Multi-device mount */
> >   			memcpy(FDEV(i).path, RDEV(i).path, MAX_PATH_LEN);
> > @@ -4216,12 +4216,13 @@ static int f2fs_scan_devices(struct f2fs_sb_info *sbi)
> >   					(FDEV(i).total_segments <<
> >   					sbi->log_blocks_per_seg) - 1;
> >   			}
> > -			FDEV(i).bdev = blkdev_get_by_path(FDEV(i).path, mode,
> > -							  sbi->sb, NULL);
> > +			FDEV(i).bdev_handle = bdev_open_by_path(FDEV(i).path,
> > +					mode, sbi->sb, NULL);
> >   		}
> > -		if (IS_ERR(FDEV(i).bdev))
> > -			return PTR_ERR(FDEV(i).bdev);
> > +		if (IS_ERR(FDEV(i).bdev_handle))
> > +			return PTR_ERR(FDEV(i).bdev_handle);
> > +		FDEV(i).bdev = FDEV(i).bdev_handle->bdev;
> >   		/* to release errored devices */
> >   		sbi->s_ndevs = i + 1;
-- 
Jan Kara <jack@suse.com>
SUSE Labs, CR


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [f2fs-dev] [PATCH 23/29] f2fs: Convert to bdev_open_by_dev/path()
  2023-08-23 10:48 ` [f2fs-dev] [PATCH 23/29] f2fs: Convert to bdev_open_by_dev/path() Jan Kara
  2023-08-25 12:30   ` Christian Brauner
@ 2023-08-28 12:57   ` Chao Yu
  2023-08-28 16:35     ` Jan Kara
  1 sibling, 1 reply; 14+ messages in thread
From: Chao Yu @ 2023-08-28 12:57 UTC (permalink / raw)
  To: Jan Kara, Christian Brauner
  Cc: Jens Axboe, Christoph Hellwig, linux-f2fs-devel, linux-block,
	linux-fsdevel, Jaegeuk Kim, Christoph Hellwig

On 2023/8/23 18:48, Jan Kara wrote:
> Convert f2fs to use bdev_open_by_dev/path() and pass the handle around.

Hi Jan,

Seems it will confilct w/ below commit, could you please take a look?

https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git/commit/?h=dev&id=51bf8d3c81992ae57beeaf22df78ed7c2782af9d

Thanks,

> 
> CC: Jaegeuk Kim <jaegeuk@kernel.org>
> CC: Chao Yu <chao@kernel.org>
> CC: linux-f2fs-devel@lists.sourceforge.net
> Acked-by: Christoph Hellwig <hch@lst.de>
> Signed-off-by: Jan Kara <jack@suse.cz>
> ---
>   fs/f2fs/f2fs.h  |  1 +
>   fs/f2fs/super.c | 17 +++++++++--------
>   2 files changed, 10 insertions(+), 8 deletions(-)
> 
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index e18272ae3119..2ec6c10df636 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -1234,6 +1234,7 @@ struct f2fs_bio_info {
>   #define FDEV(i)				(sbi->devs[i])
>   #define RDEV(i)				(raw_super->devs[i])
>   struct f2fs_dev_info {
> +	struct bdev_handle *bdev_handle;
>   	struct block_device *bdev;
>   	char path[MAX_PATH_LEN];
>   	unsigned int total_segments;
> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> index aa1f9a3a8037..885dcbd81859 100644
> --- a/fs/f2fs/super.c
> +++ b/fs/f2fs/super.c
> @@ -1561,7 +1561,7 @@ static void destroy_device_list(struct f2fs_sb_info *sbi)
>   	int i;
>   
>   	for (i = 0; i < sbi->s_ndevs; i++) {
> -		blkdev_put(FDEV(i).bdev, sbi->sb);
> +		bdev_release(FDEV(i).bdev_handle);
>   #ifdef CONFIG_BLK_DEV_ZONED
>   		kvfree(FDEV(i).blkz_seq);
>   #endif
> @@ -4196,9 +4196,9 @@ static int f2fs_scan_devices(struct f2fs_sb_info *sbi)
>   
>   		if (max_devices == 1) {
>   			/* Single zoned block device mount */
> -			FDEV(0).bdev =
> -				blkdev_get_by_dev(sbi->sb->s_bdev->bd_dev, mode,
> -						  sbi->sb, NULL);
> +			FDEV(0).bdev_handle = bdev_open_by_dev(
> +					sbi->sb->s_bdev->bd_dev, mode, sbi->sb,
> +					NULL);
>   		} else {
>   			/* Multi-device mount */
>   			memcpy(FDEV(i).path, RDEV(i).path, MAX_PATH_LEN);
> @@ -4216,12 +4216,13 @@ static int f2fs_scan_devices(struct f2fs_sb_info *sbi)
>   					(FDEV(i).total_segments <<
>   					sbi->log_blocks_per_seg) - 1;
>   			}
> -			FDEV(i).bdev = blkdev_get_by_path(FDEV(i).path, mode,
> -							  sbi->sb, NULL);
> +			FDEV(i).bdev_handle = bdev_open_by_path(FDEV(i).path,
> +					mode, sbi->sb, NULL);
>   		}
> -		if (IS_ERR(FDEV(i).bdev))
> -			return PTR_ERR(FDEV(i).bdev);
> +		if (IS_ERR(FDEV(i).bdev_handle))
> +			return PTR_ERR(FDEV(i).bdev_handle);
>   
> +		FDEV(i).bdev = FDEV(i).bdev_handle->bdev;
>   		/* to release errored devices */
>   		sbi->s_ndevs = i + 1;
>   


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [f2fs-dev] [PATCH 23/29] f2fs: Convert to bdev_open_by_dev/path()
  2023-08-23 10:48 ` [f2fs-dev] [PATCH 23/29] f2fs: Convert to bdev_open_by_dev/path() Jan Kara
@ 2023-08-25 12:30   ` Christian Brauner
  2023-08-28 12:57   ` Chao Yu
  1 sibling, 0 replies; 14+ messages in thread
From: Christian Brauner @ 2023-08-25 12:30 UTC (permalink / raw)
  To: Jan Kara
  Cc: Jens Axboe, Christoph Hellwig, linux-f2fs-devel, linux-block,
	linux-fsdevel, Jaegeuk Kim, Christoph Hellwig

On Wed, Aug 23, 2023 at 12:48:34PM +0200, Jan Kara wrote:
> Convert f2fs to use bdev_open_by_dev/path() and pass the handle around.
> 
> CC: Jaegeuk Kim <jaegeuk@kernel.org>
> CC: Chao Yu <chao@kernel.org>
> CC: linux-f2fs-devel@lists.sourceforge.net
> Acked-by: Christoph Hellwig <hch@lst.de>
> Signed-off-by: Jan Kara <jack@suse.cz>
> ---

Looks good to me,
Reviewed-by: Christian Brauner <brauner@kernel.org>


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [f2fs-dev] [PATCH 23/29] f2fs: Convert to bdev_open_by_dev/path()
  2023-08-23 10:48 [f2fs-dev] [PATCH v3 " Jan Kara
@ 2023-08-23 10:48 ` Jan Kara
  2023-08-25 12:30   ` Christian Brauner
  2023-08-28 12:57   ` Chao Yu
  2023-09-27  9:34 ` Jan Kara
  1 sibling, 2 replies; 14+ messages in thread
From: Jan Kara @ 2023-08-23 10:48 UTC (permalink / raw)
  To: Christian Brauner
  Cc: Jens Axboe, Christoph Hellwig, Jan Kara, linux-f2fs-devel,
	linux-block, linux-fsdevel, Jaegeuk Kim, Christoph Hellwig

Convert f2fs to use bdev_open_by_dev/path() and pass the handle around.

CC: Jaegeuk Kim <jaegeuk@kernel.org>
CC: Chao Yu <chao@kernel.org>
CC: linux-f2fs-devel@lists.sourceforge.net
Acked-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jan Kara <jack@suse.cz>
---
 fs/f2fs/f2fs.h  |  1 +
 fs/f2fs/super.c | 17 +++++++++--------
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index e18272ae3119..2ec6c10df636 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -1234,6 +1234,7 @@ struct f2fs_bio_info {
 #define FDEV(i)				(sbi->devs[i])
 #define RDEV(i)				(raw_super->devs[i])
 struct f2fs_dev_info {
+	struct bdev_handle *bdev_handle;
 	struct block_device *bdev;
 	char path[MAX_PATH_LEN];
 	unsigned int total_segments;
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index aa1f9a3a8037..885dcbd81859 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -1561,7 +1561,7 @@ static void destroy_device_list(struct f2fs_sb_info *sbi)
 	int i;
 
 	for (i = 0; i < sbi->s_ndevs; i++) {
-		blkdev_put(FDEV(i).bdev, sbi->sb);
+		bdev_release(FDEV(i).bdev_handle);
 #ifdef CONFIG_BLK_DEV_ZONED
 		kvfree(FDEV(i).blkz_seq);
 #endif
@@ -4196,9 +4196,9 @@ static int f2fs_scan_devices(struct f2fs_sb_info *sbi)
 
 		if (max_devices == 1) {
 			/* Single zoned block device mount */
-			FDEV(0).bdev =
-				blkdev_get_by_dev(sbi->sb->s_bdev->bd_dev, mode,
-						  sbi->sb, NULL);
+			FDEV(0).bdev_handle = bdev_open_by_dev(
+					sbi->sb->s_bdev->bd_dev, mode, sbi->sb,
+					NULL);
 		} else {
 			/* Multi-device mount */
 			memcpy(FDEV(i).path, RDEV(i).path, MAX_PATH_LEN);
@@ -4216,12 +4216,13 @@ static int f2fs_scan_devices(struct f2fs_sb_info *sbi)
 					(FDEV(i).total_segments <<
 					sbi->log_blocks_per_seg) - 1;
 			}
-			FDEV(i).bdev = blkdev_get_by_path(FDEV(i).path, mode,
-							  sbi->sb, NULL);
+			FDEV(i).bdev_handle = bdev_open_by_path(FDEV(i).path,
+					mode, sbi->sb, NULL);
 		}
-		if (IS_ERR(FDEV(i).bdev))
-			return PTR_ERR(FDEV(i).bdev);
+		if (IS_ERR(FDEV(i).bdev_handle))
+			return PTR_ERR(FDEV(i).bdev_handle);
 
+		FDEV(i).bdev = FDEV(i).bdev_handle->bdev;
 		/* to release errored devices */
 		sbi->s_ndevs = i + 1;
 
-- 
2.35.3



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2023-09-27  9:35 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-11 11:04 [f2fs-dev] [PATCH v2 0/29] block: Make blkdev_get_by_*() return handle Jan Kara
2023-08-11 11:04 ` [f2fs-dev] [PATCH 23/29] f2fs: Convert to bdev_open_by_dev/path() Jan Kara
2023-08-11 12:27 ` [f2fs-dev] [PATCH v2 0/29] block: Make blkdev_get_by_*() return handle Christoph Hellwig
2023-08-25  1:58 ` Al Viro
2023-08-25 13:47   ` Jan Kara
2023-08-26  2:28     ` Al Viro
2023-08-28 14:27       ` Christoph Hellwig
2023-08-28 13:20     ` Christian Brauner
2023-08-28 14:22     ` Christoph Hellwig
2023-08-23 10:48 [f2fs-dev] [PATCH v3 " Jan Kara
2023-08-23 10:48 ` [f2fs-dev] [PATCH 23/29] f2fs: Convert to bdev_open_by_dev/path() Jan Kara
2023-08-25 12:30   ` Christian Brauner
2023-08-28 12:57   ` Chao Yu
2023-08-28 16:35     ` Jan Kara
2023-09-27  9:34 ` Jan Kara

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).