@@ -426,11 +426,10 @@ static void reset_bdev(struct zram *zram)
426
426
if (!zram -> backing_dev )
427
427
return ;
428
428
429
- fput (zram -> bdev_file );
430
429
/* hope filp_close flush all of IO */
431
430
filp_close (zram -> backing_dev , NULL );
432
431
zram -> backing_dev = NULL ;
433
- zram -> bdev_file = NULL ;
432
+ zram -> bdev = NULL ;
434
433
zram -> disk -> fops = & zram_devops ;
435
434
kvfree (zram -> bitmap );
436
435
zram -> bitmap = NULL ;
@@ -473,10 +472,8 @@ static ssize_t backing_dev_store(struct device *dev,
473
472
size_t sz ;
474
473
struct file * backing_dev = NULL ;
475
474
struct inode * inode ;
476
- struct address_space * mapping ;
477
475
unsigned int bitmap_sz ;
478
476
unsigned long nr_pages , * bitmap = NULL ;
479
- struct file * bdev_file = NULL ;
480
477
int err ;
481
478
struct zram * zram = dev_to_zram (dev );
482
479
@@ -497,30 +494,21 @@ static ssize_t backing_dev_store(struct device *dev,
497
494
if (sz > 0 && file_name [sz - 1 ] == '\n' )
498
495
file_name [sz - 1 ] = 0x00 ;
499
496
500
- backing_dev = filp_open (file_name , O_RDWR | O_LARGEFILE , 0 );
497
+ backing_dev = filp_open (file_name , O_RDWR | O_LARGEFILE | O_EXCL , 0 );
501
498
if (IS_ERR (backing_dev )) {
502
499
err = PTR_ERR (backing_dev );
503
500
backing_dev = NULL ;
504
501
goto out ;
505
502
}
506
503
507
- mapping = backing_dev -> f_mapping ;
508
- inode = mapping -> host ;
504
+ inode = backing_dev -> f_mapping -> host ;
509
505
510
506
/* Support only block device in this moment */
511
507
if (!S_ISBLK (inode -> i_mode )) {
512
508
err = - ENOTBLK ;
513
509
goto out ;
514
510
}
515
511
516
- bdev_file = bdev_file_open_by_dev (inode -> i_rdev ,
517
- BLK_OPEN_READ | BLK_OPEN_WRITE , zram , NULL );
518
- if (IS_ERR (bdev_file )) {
519
- err = PTR_ERR (bdev_file );
520
- bdev_file = NULL ;
521
- goto out ;
522
- }
523
-
524
512
nr_pages = i_size_read (inode ) >> PAGE_SHIFT ;
525
513
bitmap_sz = BITS_TO_LONGS (nr_pages ) * sizeof (long );
526
514
bitmap = kvzalloc (bitmap_sz , GFP_KERNEL );
@@ -531,7 +519,7 @@ static ssize_t backing_dev_store(struct device *dev,
531
519
532
520
reset_bdev (zram );
533
521
534
- zram -> bdev_file = bdev_file ;
522
+ zram -> bdev = I_BDEV ( inode ) ;
535
523
zram -> backing_dev = backing_dev ;
536
524
zram -> bitmap = bitmap ;
537
525
zram -> nr_pages = nr_pages ;
@@ -544,9 +532,6 @@ static ssize_t backing_dev_store(struct device *dev,
544
532
out :
545
533
kvfree (bitmap );
546
534
547
- if (bdev_file )
548
- fput (bdev_file );
549
-
550
535
if (backing_dev )
551
536
filp_close (backing_dev , NULL );
552
537
@@ -587,7 +572,7 @@ static void read_from_bdev_async(struct zram *zram, struct page *page,
587
572
{
588
573
struct bio * bio ;
589
574
590
- bio = bio_alloc (file_bdev ( zram -> bdev_file ) , 1 , parent -> bi_opf , GFP_NOIO );
575
+ bio = bio_alloc (zram -> bdev , 1 , parent -> bi_opf , GFP_NOIO );
591
576
bio -> bi_iter .bi_sector = entry * (PAGE_SIZE >> 9 );
592
577
__bio_add_page (bio , page , PAGE_SIZE , 0 );
593
578
bio_chain (bio , parent );
@@ -703,7 +688,7 @@ static ssize_t writeback_store(struct device *dev,
703
688
continue ;
704
689
}
705
690
706
- bio_init (& bio , file_bdev ( zram -> bdev_file ) , & bio_vec , 1 ,
691
+ bio_init (& bio , zram -> bdev , & bio_vec , 1 ,
707
692
REQ_OP_WRITE | REQ_SYNC );
708
693
bio .bi_iter .bi_sector = blk_idx * (PAGE_SIZE >> 9 );
709
694
__bio_add_page (& bio , page , PAGE_SIZE , 0 );
@@ -785,7 +770,7 @@ static void zram_sync_read(struct work_struct *work)
785
770
struct bio_vec bv ;
786
771
struct bio bio ;
787
772
788
- bio_init (& bio , file_bdev ( zw -> zram -> bdev_file ) , & bv , 1 , REQ_OP_READ );
773
+ bio_init (& bio , zw -> zram -> bdev , & bv , 1 , REQ_OP_READ );
789
774
bio .bi_iter .bi_sector = zw -> entry * (PAGE_SIZE >> 9 );
790
775
__bio_add_page (& bio , zw -> page , PAGE_SIZE , 0 );
791
776
zw -> error = submit_bio_wait (& bio );
0 commit comments