@@ -426,11 +426,10 @@ static void reset_bdev(struct zram *zram)
426426 if (!zram -> backing_dev )
427427 return ;
428428
429- fput (zram -> bdev_file );
430429 /* hope filp_close flush all of IO */
431430 filp_close (zram -> backing_dev , NULL );
432431 zram -> backing_dev = NULL ;
433- zram -> bdev_file = NULL ;
432+ zram -> bdev = NULL ;
434433 zram -> disk -> fops = & zram_devops ;
435434 kvfree (zram -> bitmap );
436435 zram -> bitmap = NULL ;
@@ -473,10 +472,8 @@ static ssize_t backing_dev_store(struct device *dev,
473472 size_t sz ;
474473 struct file * backing_dev = NULL ;
475474 struct inode * inode ;
476- struct address_space * mapping ;
477475 unsigned int bitmap_sz ;
478476 unsigned long nr_pages , * bitmap = NULL ;
479- struct file * bdev_file = NULL ;
480477 int err ;
481478 struct zram * zram = dev_to_zram (dev );
482479
@@ -497,30 +494,21 @@ static ssize_t backing_dev_store(struct device *dev,
497494 if (sz > 0 && file_name [sz - 1 ] == '\n' )
498495 file_name [sz - 1 ] = 0x00 ;
499496
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 );
501498 if (IS_ERR (backing_dev )) {
502499 err = PTR_ERR (backing_dev );
503500 backing_dev = NULL ;
504501 goto out ;
505502 }
506503
507- mapping = backing_dev -> f_mapping ;
508- inode = mapping -> host ;
504+ inode = backing_dev -> f_mapping -> host ;
509505
510506 /* Support only block device in this moment */
511507 if (!S_ISBLK (inode -> i_mode )) {
512508 err = - ENOTBLK ;
513509 goto out ;
514510 }
515511
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-
524512 nr_pages = i_size_read (inode ) >> PAGE_SHIFT ;
525513 bitmap_sz = BITS_TO_LONGS (nr_pages ) * sizeof (long );
526514 bitmap = kvzalloc (bitmap_sz , GFP_KERNEL );
@@ -531,7 +519,7 @@ static ssize_t backing_dev_store(struct device *dev,
531519
532520 reset_bdev (zram );
533521
534- zram -> bdev_file = bdev_file ;
522+ zram -> bdev = I_BDEV ( inode ) ;
535523 zram -> backing_dev = backing_dev ;
536524 zram -> bitmap = bitmap ;
537525 zram -> nr_pages = nr_pages ;
@@ -544,9 +532,6 @@ static ssize_t backing_dev_store(struct device *dev,
544532out :
545533 kvfree (bitmap );
546534
547- if (bdev_file )
548- fput (bdev_file );
549-
550535 if (backing_dev )
551536 filp_close (backing_dev , NULL );
552537
@@ -587,7 +572,7 @@ static void read_from_bdev_async(struct zram *zram, struct page *page,
587572{
588573 struct bio * bio ;
589574
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 );
591576 bio -> bi_iter .bi_sector = entry * (PAGE_SIZE >> 9 );
592577 __bio_add_page (bio , page , PAGE_SIZE , 0 );
593578 bio_chain (bio , parent );
@@ -703,7 +688,7 @@ static ssize_t writeback_store(struct device *dev,
703688 continue ;
704689 }
705690
706- bio_init (& bio , file_bdev ( zram -> bdev_file ) , & bio_vec , 1 ,
691+ bio_init (& bio , zram -> bdev , & bio_vec , 1 ,
707692 REQ_OP_WRITE | REQ_SYNC );
708693 bio .bi_iter .bi_sector = blk_idx * (PAGE_SIZE >> 9 );
709694 __bio_add_page (& bio , page , PAGE_SIZE , 0 );
@@ -785,7 +770,7 @@ static void zram_sync_read(struct work_struct *work)
785770 struct bio_vec bv ;
786771 struct bio bio ;
787772
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 );
789774 bio .bi_iter .bi_sector = zw -> entry * (PAGE_SIZE >> 9 );
790775 __bio_add_page (& bio , zw -> page , PAGE_SIZE , 0 );
791776 zw -> error = submit_bio_wait (& bio );
0 commit comments