erofs: port device access to file
authorChristian Brauner <brauner@kernel.org>
Tue, 23 Jan 2024 13:26:37 +0000 (14:26 +0100)
committerChristian Brauner <brauner@kernel.org>
Sun, 25 Feb 2024 11:05:25 +0000 (12:05 +0100)
Link: https://lore.kernel.org/r/20240123-vfs-bdev-file-v2-20-adbd023e19cc@kernel.org
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/erofs/data.c
fs/erofs/internal.h
fs/erofs/super.c

index c98aeda8abb215e9be577d1b27dea2713b0b6e87..433fc39ba4235d7587fd3fdbbf728a867bfd9976 100644 (file)
@@ -220,7 +220,7 @@ int erofs_map_dev(struct super_block *sb, struct erofs_map_dev *map)
                        up_read(&devs->rwsem);
                        return 0;
                }
-               map->m_bdev = dif->bdev_handle ? dif->bdev_handle->bdev : NULL;
+               map->m_bdev = dif->bdev_file ? file_bdev(dif->bdev_file) : NULL;
                map->m_daxdev = dif->dax_dev;
                map->m_dax_part_off = dif->dax_part_off;
                map->m_fscache = dif->fscache;
@@ -238,8 +238,8 @@ int erofs_map_dev(struct super_block *sb, struct erofs_map_dev *map)
                        if (map->m_pa >= startoff &&
                            map->m_pa < startoff + length) {
                                map->m_pa -= startoff;
-                               map->m_bdev = dif->bdev_handle ?
-                                             dif->bdev_handle->bdev : NULL;
+                               map->m_bdev = dif->bdev_file ?
+                                             file_bdev(dif->bdev_file) : NULL;
                                map->m_daxdev = dif->dax_dev;
                                map->m_dax_part_off = dif->dax_part_off;
                                map->m_fscache = dif->fscache;
index b0409badb0172387f8b96c03f69267da5403b68d..0f0706325b7b4753f93c515ec423f35466e5224d 100644 (file)
@@ -49,7 +49,7 @@ typedef u32 erofs_blk_t;
 struct erofs_device_info {
        char *path;
        struct erofs_fscache *fscache;
-       struct bdev_handle *bdev_handle;
+       struct file *bdev_file;
        struct dax_device *dax_dev;
        u64 dax_part_off;
 
index 5f60f163bd56e272d167399ddac9a95de42b1b34..9b4b66dcdd4f10d5f8338c398e394b6601941818 100644 (file)
@@ -177,7 +177,7 @@ static int erofs_init_device(struct erofs_buf *buf, struct super_block *sb,
        struct erofs_sb_info *sbi = EROFS_SB(sb);
        struct erofs_fscache *fscache;
        struct erofs_deviceslot *dis;
-       struct bdev_handle *bdev_handle;
+       struct file *bdev_file;
        void *ptr;
 
        ptr = erofs_read_metabuf(buf, sb, erofs_blknr(sb, *pos), EROFS_KMAP);
@@ -201,12 +201,12 @@ static int erofs_init_device(struct erofs_buf *buf, struct super_block *sb,
                        return PTR_ERR(fscache);
                dif->fscache = fscache;
        } else if (!sbi->devs->flatdev) {
-               bdev_handle = bdev_open_by_path(dif->path, BLK_OPEN_READ,
+               bdev_file = bdev_file_open_by_path(dif->path, BLK_OPEN_READ,
                                                sb->s_type, NULL);
-               if (IS_ERR(bdev_handle))
-                       return PTR_ERR(bdev_handle);
-               dif->bdev_handle = bdev_handle;
-               dif->dax_dev = fs_dax_get_by_bdev(bdev_handle->bdev,
+               if (IS_ERR(bdev_file))
+                       return PTR_ERR(bdev_file);
+               dif->bdev_file = bdev_file;
+               dif->dax_dev = fs_dax_get_by_bdev(file_bdev(bdev_file),
                                &dif->dax_part_off, NULL, NULL);
        }
 
@@ -754,8 +754,8 @@ static int erofs_release_device_info(int id, void *ptr, void *data)
        struct erofs_device_info *dif = ptr;
 
        fs_put_dax(dif->dax_dev, NULL);
-       if (dif->bdev_handle)
-               bdev_release(dif->bdev_handle);
+       if (dif->bdev_file)
+               fput(dif->bdev_file);
        erofs_fscache_unregister_cookie(dif->fscache);
        dif->fscache = NULL;
        kfree(dif->path);