Skip to content

Commit 3789fb8

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

2 files changed

Lines changed: 39 additions & 39 deletions

File tree

drivers/md/bcache/bcache.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ struct cached_dev {
300300
struct list_head list;
301301
struct bcache_device disk;
302302
struct block_device *bdev;
303-
struct bdev_handle *bdev_handle;
303+
struct file *bdev_file;
304304

305305
struct cache_sb sb;
306306
struct cache_sb_disk *sb_disk;
@@ -423,7 +423,7 @@ struct cache {
423423

424424
struct kobject kobj;
425425
struct block_device *bdev;
426-
struct bdev_handle *bdev_handle;
426+
struct file *bdev_file;
427427

428428
struct task_struct *alloc_thread;
429429

drivers/md/bcache/super.c

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1369,8 +1369,8 @@ static CLOSURE_CALLBACK(cached_dev_free)
13691369
if (dc->sb_disk)
13701370
put_page(virt_to_page(dc->sb_disk));
13711371

1372-
if (dc->bdev_handle)
1373-
bdev_release(dc->bdev_handle);
1372+
if (dc->bdev_file)
1373+
fput(dc->bdev_file);
13741374

13751375
wake_up(&unregister_wait);
13761376

@@ -1445,16 +1445,16 @@ static int cached_dev_init(struct cached_dev *dc, unsigned int block_size)
14451445
/* Cached device - bcache superblock */
14461446

14471447
static int register_bdev(struct cache_sb *sb, struct cache_sb_disk *sb_disk,
1448-
struct bdev_handle *bdev_handle,
1448+
struct file *bdev_file,
14491449
struct cached_dev *dc)
14501450
{
14511451
const char *err = "cannot allocate memory";
14521452
struct cache_set *c;
14531453
int ret = -ENOMEM;
14541454

14551455
memcpy(&dc->sb, sb, sizeof(struct cache_sb));
1456-
dc->bdev_handle = bdev_handle;
1457-
dc->bdev = bdev_handle->bdev;
1456+
dc->bdev_file = bdev_file;
1457+
dc->bdev = file_bdev(bdev_file);
14581458
dc->sb_disk = sb_disk;
14591459

14601460
if (cached_dev_init(dc, sb->block_size << 9))
@@ -2218,8 +2218,8 @@ void bch_cache_release(struct kobject *kobj)
22182218
if (ca->sb_disk)
22192219
put_page(virt_to_page(ca->sb_disk));
22202220

2221-
if (ca->bdev_handle)
2222-
bdev_release(ca->bdev_handle);
2221+
if (ca->bdev_file)
2222+
fput(ca->bdev_file);
22232223

22242224
kfree(ca);
22252225
module_put(THIS_MODULE);
@@ -2339,18 +2339,18 @@ static int cache_alloc(struct cache *ca)
23392339
}
23402340

23412341
static int register_cache(struct cache_sb *sb, struct cache_sb_disk *sb_disk,
2342-
struct bdev_handle *bdev_handle,
2342+
struct file *bdev_file,
23432343
struct cache *ca)
23442344
{
23452345
const char *err = NULL; /* must be set for any error case */
23462346
int ret = 0;
23472347

23482348
memcpy(&ca->sb, sb, sizeof(struct cache_sb));
2349-
ca->bdev_handle = bdev_handle;
2350-
ca->bdev = bdev_handle->bdev;
2349+
ca->bdev_file = bdev_file;
2350+
ca->bdev = file_bdev(bdev_file);
23512351
ca->sb_disk = sb_disk;
23522352

2353-
if (bdev_max_discard_sectors((bdev_handle->bdev)))
2353+
if (bdev_max_discard_sectors(file_bdev(bdev_file)))
23542354
ca->discard = CACHE_DISCARD(&ca->sb);
23552355

23562356
ret = cache_alloc(ca);
@@ -2361,20 +2361,20 @@ static int register_cache(struct cache_sb *sb, struct cache_sb_disk *sb_disk,
23612361
err = "cache_alloc(): cache device is too small";
23622362
else
23632363
err = "cache_alloc(): unknown error";
2364-
pr_notice("error %pg: %s\n", bdev_handle->bdev, err);
2364+
pr_notice("error %pg: %s\n", file_bdev(bdev_file), err);
23652365
/*
23662366
* If we failed here, it means ca->kobj is not initialized yet,
23672367
* kobject_put() won't be called and there is no chance to
2368-
* call bdev_release() to bdev in bch_cache_release(). So
2369-
* we explicitly call bdev_release() here.
2368+
* call fput() to bdev in bch_cache_release(). So
2369+
* we explicitly call fput() on the block device here.
23702370
*/
2371-
bdev_release(bdev_handle);
2371+
fput(bdev_file);
23722372
return ret;
23732373
}
23742374

2375-
if (kobject_add(&ca->kobj, bdev_kobj(bdev_handle->bdev), "bcache")) {
2375+
if (kobject_add(&ca->kobj, bdev_kobj(file_bdev(bdev_file)), "bcache")) {
23762376
pr_notice("error %pg: error calling kobject_add\n",
2377-
bdev_handle->bdev);
2377+
file_bdev(bdev_file));
23782378
ret = -ENOMEM;
23792379
goto out;
23802380
}
@@ -2388,7 +2388,7 @@ static int register_cache(struct cache_sb *sb, struct cache_sb_disk *sb_disk,
23882388
goto out;
23892389
}
23902390

2391-
pr_info("registered cache device %pg\n", ca->bdev_handle->bdev);
2391+
pr_info("registered cache device %pg\n", file_bdev(ca->bdev_file));
23922392

23932393
out:
23942394
kobject_put(&ca->kobj);
@@ -2446,7 +2446,7 @@ struct async_reg_args {
24462446
char *path;
24472447
struct cache_sb *sb;
24482448
struct cache_sb_disk *sb_disk;
2449-
struct bdev_handle *bdev_handle;
2449+
struct file *bdev_file;
24502450
void *holder;
24512451
};
24522452

@@ -2457,7 +2457,7 @@ static void register_bdev_worker(struct work_struct *work)
24572457
container_of(work, struct async_reg_args, reg_work.work);
24582458

24592459
mutex_lock(&bch_register_lock);
2460-
if (register_bdev(args->sb, args->sb_disk, args->bdev_handle,
2460+
if (register_bdev(args->sb, args->sb_disk, args->bdev_file,
24612461
args->holder) < 0)
24622462
fail = true;
24632463
mutex_unlock(&bch_register_lock);
@@ -2478,7 +2478,7 @@ static void register_cache_worker(struct work_struct *work)
24782478
container_of(work, struct async_reg_args, reg_work.work);
24792479

24802480
/* blkdev_put() will be called in bch_cache_release() */
2481-
if (register_cache(args->sb, args->sb_disk, args->bdev_handle,
2481+
if (register_cache(args->sb, args->sb_disk, args->bdev_file,
24822482
args->holder))
24832483
fail = true;
24842484

@@ -2516,7 +2516,7 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
25162516
char *path = NULL;
25172517
struct cache_sb *sb;
25182518
struct cache_sb_disk *sb_disk;
2519-
struct bdev_handle *bdev_handle, *bdev_handle2;
2519+
struct file *bdev_file, *bdev_file2;
25202520
void *holder = NULL;
25212521
ssize_t ret;
25222522
bool async_registration = false;
@@ -2549,15 +2549,15 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
25492549

25502550
ret = -EINVAL;
25512551
err = "failed to open device";
2552-
bdev_handle = bdev_open_by_path(strim(path), BLK_OPEN_READ, NULL, NULL);
2553-
if (IS_ERR(bdev_handle))
2552+
bdev_file = bdev_file_open_by_path(strim(path), BLK_OPEN_READ, NULL, NULL);
2553+
if (IS_ERR(bdev_file))
25542554
goto out_free_sb;
25552555

25562556
err = "failed to set blocksize";
2557-
if (set_blocksize(bdev_handle->bdev, 4096))
2557+
if (set_blocksize(file_bdev(bdev_file), 4096))
25582558
goto out_blkdev_put;
25592559

2560-
err = read_super(sb, bdev_handle->bdev, &sb_disk);
2560+
err = read_super(sb, file_bdev(bdev_file), &sb_disk);
25612561
if (err)
25622562
goto out_blkdev_put;
25632563

@@ -2569,13 +2569,13 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
25692569
}
25702570

25712571
/* Now reopen in exclusive mode with proper holder */
2572-
bdev_handle2 = bdev_open_by_dev(bdev_handle->bdev->bd_dev,
2572+
bdev_file2 = bdev_file_open_by_dev(file_bdev(bdev_file)->bd_dev,
25732573
BLK_OPEN_READ | BLK_OPEN_WRITE, holder, NULL);
2574-
bdev_release(bdev_handle);
2575-
bdev_handle = bdev_handle2;
2576-
if (IS_ERR(bdev_handle)) {
2577-
ret = PTR_ERR(bdev_handle);
2578-
bdev_handle = NULL;
2574+
fput(bdev_file);
2575+
bdev_file = bdev_file2;
2576+
if (IS_ERR(bdev_file)) {
2577+
ret = PTR_ERR(bdev_file);
2578+
bdev_file = NULL;
25792579
if (ret == -EBUSY) {
25802580
dev_t dev;
25812581

@@ -2610,7 +2610,7 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
26102610
args->path = path;
26112611
args->sb = sb;
26122612
args->sb_disk = sb_disk;
2613-
args->bdev_handle = bdev_handle;
2613+
args->bdev_file = bdev_file;
26142614
args->holder = holder;
26152615
register_device_async(args);
26162616
/* No wait and returns to user space */
@@ -2619,14 +2619,14 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
26192619

26202620
if (SB_IS_BDEV(sb)) {
26212621
mutex_lock(&bch_register_lock);
2622-
ret = register_bdev(sb, sb_disk, bdev_handle, holder);
2622+
ret = register_bdev(sb, sb_disk, bdev_file, holder);
26232623
mutex_unlock(&bch_register_lock);
26242624
/* blkdev_put() will be called in cached_dev_free() */
26252625
if (ret < 0)
26262626
goto out_free_sb;
26272627
} else {
26282628
/* blkdev_put() will be called in bch_cache_release() */
2629-
ret = register_cache(sb, sb_disk, bdev_handle, holder);
2629+
ret = register_cache(sb, sb_disk, bdev_file, holder);
26302630
if (ret)
26312631
goto out_free_sb;
26322632
}
@@ -2642,8 +2642,8 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
26422642
out_put_sb_page:
26432643
put_page(virt_to_page(sb_disk));
26442644
out_blkdev_put:
2645-
if (bdev_handle)
2646-
bdev_release(bdev_handle);
2645+
if (bdev_file)
2646+
fput(bdev_file);
26472647
out_free_sb:
26482648
kfree(sb);
26492649
out_free_path:

0 commit comments

Comments
 (0)