Skip to content

Commit f9d8c3c

Browse files
committed
block2mtd: port device access to files
Link: https://lore.kernel.org/r/20240123-vfs-bdev-file-v2-14-adbd023e19cc@kernel.org Reviewed-by: Jan Kara <jack@suse.cz> Signed-off-by: Christian Brauner <brauner@kernel.org>
1 parent 3789fb8 commit f9d8c3c

1 file changed

Lines changed: 21 additions & 25 deletions

File tree

drivers/mtd/devices/block2mtd.c

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
/* Info for the block device */
3838
struct block2mtd_dev {
3939
struct list_head list;
40-
struct bdev_handle *bdev_handle;
40+
struct file *bdev_file;
4141
struct mtd_info mtd;
4242
struct mutex write_mutex;
4343
};
@@ -55,8 +55,7 @@ static struct page *page_read(struct address_space *mapping, pgoff_t index)
5555
/* erase a specified part of the device */
5656
static int _block2mtd_erase(struct block2mtd_dev *dev, loff_t to, size_t len)
5757
{
58-
struct address_space *mapping =
59-
dev->bdev_handle->bdev->bd_inode->i_mapping;
58+
struct address_space *mapping = dev->bdev_file->f_mapping;
6059
struct page *page;
6160
pgoff_t index = to >> PAGE_SHIFT; // page index
6261
int pages = len >> PAGE_SHIFT;
@@ -106,8 +105,7 @@ static int block2mtd_read(struct mtd_info *mtd, loff_t from, size_t len,
106105
size_t *retlen, u_char *buf)
107106
{
108107
struct block2mtd_dev *dev = mtd->priv;
109-
struct address_space *mapping =
110-
dev->bdev_handle->bdev->bd_inode->i_mapping;
108+
struct address_space *mapping = dev->bdev_file->f_mapping;
111109
struct page *page;
112110
pgoff_t index = from >> PAGE_SHIFT;
113111
int offset = from & (PAGE_SIZE-1);
@@ -142,8 +140,7 @@ static int _block2mtd_write(struct block2mtd_dev *dev, const u_char *buf,
142140
loff_t to, size_t len, size_t *retlen)
143141
{
144142
struct page *page;
145-
struct address_space *mapping =
146-
dev->bdev_handle->bdev->bd_inode->i_mapping;
143+
struct address_space *mapping = dev->bdev_file->f_mapping;
147144
pgoff_t index = to >> PAGE_SHIFT; // page index
148145
int offset = to & ~PAGE_MASK; // page offset
149146
int cpylen;
@@ -198,7 +195,7 @@ static int block2mtd_write(struct mtd_info *mtd, loff_t to, size_t len,
198195
static void block2mtd_sync(struct mtd_info *mtd)
199196
{
200197
struct block2mtd_dev *dev = mtd->priv;
201-
sync_blockdev(dev->bdev_handle->bdev);
198+
sync_blockdev(file_bdev(dev->bdev_file));
202199
return;
203200
}
204201

@@ -210,10 +207,9 @@ static void block2mtd_free_device(struct block2mtd_dev *dev)
210207

211208
kfree(dev->mtd.name);
212209

213-
if (dev->bdev_handle) {
214-
invalidate_mapping_pages(
215-
dev->bdev_handle->bdev->bd_inode->i_mapping, 0, -1);
216-
bdev_release(dev->bdev_handle);
210+
if (dev->bdev_file) {
211+
invalidate_mapping_pages(dev->bdev_file->f_mapping, 0, -1);
212+
fput(dev->bdev_file);
217213
}
218214

219215
kfree(dev);
@@ -223,18 +219,18 @@ static void block2mtd_free_device(struct block2mtd_dev *dev)
223219
* This function is marked __ref because it calls the __init marked
224220
* early_lookup_bdev when called from the early boot code.
225221
*/
226-
static struct bdev_handle __ref *mdtblock_early_get_bdev(const char *devname,
222+
static struct file __ref *mdtblock_early_get_bdev(const char *devname,
227223
blk_mode_t mode, int timeout, struct block2mtd_dev *dev)
228224
{
229-
struct bdev_handle *bdev_handle = ERR_PTR(-ENODEV);
225+
struct file *bdev_file = ERR_PTR(-ENODEV);
230226
#ifndef MODULE
231227
int i;
232228

233229
/*
234230
* We can't use early_lookup_bdev from a running system.
235231
*/
236232
if (system_state >= SYSTEM_RUNNING)
237-
return bdev_handle;
233+
return bdev_file;
238234

239235
/*
240236
* We might not have the root device mounted at this point.
@@ -253,20 +249,20 @@ static struct bdev_handle __ref *mdtblock_early_get_bdev(const char *devname,
253249
wait_for_device_probe();
254250

255251
if (!early_lookup_bdev(devname, &devt)) {
256-
bdev_handle = bdev_open_by_dev(devt, mode, dev, NULL);
257-
if (!IS_ERR(bdev_handle))
252+
bdev_file = bdev_file_open_by_dev(devt, mode, dev, NULL);
253+
if (!IS_ERR(bdev_file))
258254
break;
259255
}
260256
}
261257
#endif
262-
return bdev_handle;
258+
return bdev_file;
263259
}
264260

265261
static struct block2mtd_dev *add_device(char *devname, int erase_size,
266262
char *label, int timeout)
267263
{
268264
const blk_mode_t mode = BLK_OPEN_READ | BLK_OPEN_WRITE;
269-
struct bdev_handle *bdev_handle;
265+
struct file *bdev_file;
270266
struct block_device *bdev;
271267
struct block2mtd_dev *dev;
272268
char *name;
@@ -279,16 +275,16 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size,
279275
return NULL;
280276

281277
/* Get a handle on the device */
282-
bdev_handle = bdev_open_by_path(devname, mode, dev, NULL);
283-
if (IS_ERR(bdev_handle))
284-
bdev_handle = mdtblock_early_get_bdev(devname, mode, timeout,
278+
bdev_file = bdev_file_open_by_path(devname, mode, dev, NULL);
279+
if (IS_ERR(bdev_file))
280+
bdev_file = mdtblock_early_get_bdev(devname, mode, timeout,
285281
dev);
286-
if (IS_ERR(bdev_handle)) {
282+
if (IS_ERR(bdev_file)) {
287283
pr_err("error: cannot open device %s\n", devname);
288284
goto err_free_block2mtd;
289285
}
290-
dev->bdev_handle = bdev_handle;
291-
bdev = bdev_handle->bdev;
286+
dev->bdev_file = bdev_file;
287+
bdev = file_bdev(bdev_file);
292288

293289
if (MAJOR(bdev->bd_dev) == MTD_BLOCK_MAJOR) {
294290
pr_err("attempting to use an MTD device as a block device\n");

0 commit comments

Comments
 (0)