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

CC: Kent Overstreet <[email protected]>
CC: Brian Foster <[email protected]>
CC: [email protected]
Signed-off-by: Jan Kara <[email protected]>
---
 fs/bcachefs/super-io.c    | 19 ++++++++++---------
 fs/bcachefs/super_types.h |  1 +
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/fs/bcachefs/super-io.c b/fs/bcachefs/super-io.c
index 332d41e1c0a3..01a32c41a540 100644
--- a/fs/bcachefs/super-io.c
+++ b/fs/bcachefs/super-io.c
@@ -162,8 +162,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);
@@ -685,21 +685,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) {
diff --git a/fs/bcachefs/super_types.h b/fs/bcachefs/super_types.h
index 78d6138db62d..b77d8897c9fa 100644
--- a/fs/bcachefs/super_types.h
+++ b/fs/bcachefs/super_types.h
@@ -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;
-- 
2.35.3

Reply via email to