Unverified Commit 1bfdc94b authored by Jan Kara's avatar Jan Kara Committed by Christian Brauner
Browse files

bcachefs: Convert to bdev_open_by_path()



Convert bcachefs to use bdev_open_by_path() and pass the handle around.

CC: Kent Overstreet <kent.overstreet@linux.dev>
CC: Brian Foster <bfoster@redhat.com>
CC: <linux-bcachefs@vger.kernel.org>
Signed-off-by: default avatarJan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20231101174325.10596-1-jack@suse.cz


Acked-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
Reviewed-by: default avatarJens Axboe <axboe@kernel.dk>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 7366f8b6
Loading
Loading
Loading
Loading
+10 −9
Original line number Diff line number Diff line
@@ -163,8 +163,8 @@ void bch2_sb_field_delete(struct bch_sb_handle *sb,
void bch2_free_super(struct bch_sb_handle *sb)
{
	kfree(sb->bio);
	if (!IS_ERR_OR_NULL(sb->bdev))
		blkdev_put(sb->bdev, sb->holder);
	if (!IS_ERR_OR_NULL(sb->bdev_handle))
		bdev_release(sb->bdev_handle);
	kfree(sb->holder);

	kfree(sb->sb);
@@ -686,21 +686,22 @@ int bch2_read_super(const char *path, struct bch_opts *opts,
	if (!opt_get(*opts, nochanges))
		sb->mode |= BLK_OPEN_WRITE;

	sb->bdev = blkdev_get_by_path(path, sb->mode, sb->holder, &bch2_sb_handle_bdev_ops);
	if (IS_ERR(sb->bdev) &&
	    PTR_ERR(sb->bdev) == -EACCES &&
	sb->bdev_handle = bdev_open_by_path(path, sb->mode, sb->holder, &bch2_sb_handle_bdev_ops);
	if (IS_ERR(sb->bdev_handle) &&
	    PTR_ERR(sb->bdev_handle) == -EACCES &&
	    opt_get(*opts, read_only)) {
		sb->mode &= ~BLK_OPEN_WRITE;

		sb->bdev = blkdev_get_by_path(path, sb->mode, sb->holder, &bch2_sb_handle_bdev_ops);
		if (!IS_ERR(sb->bdev))
		sb->bdev_handle = bdev_open_by_path(path, sb->mode, sb->holder, &bch2_sb_handle_bdev_ops);
		if (!IS_ERR(sb->bdev_handle))
			opt_set(*opts, nochanges, true);
	}

	if (IS_ERR(sb->bdev)) {
		ret = PTR_ERR(sb->bdev);
	if (IS_ERR(sb->bdev_handle)) {
		ret = PTR_ERR(sb->bdev_handle);
		goto out;
	}
	sb->bdev = sb->bdev_handle->bdev;

	ret = bch2_sb_realloc(sb, 0);
	if (ret) {
+1 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@

struct bch_sb_handle {
	struct bch_sb		*sb;
	struct bdev_handle	*bdev_handle;
	struct block_device	*bdev;
	struct bio		*bio;
	void			*holder;