@@ -496,6 +496,14 @@ static int loop_validate_file(struct file *file, struct block_device *bdev)
496
496
return 0 ;
497
497
}
498
498
499
+ static void loop_assign_backing_file (struct loop_device * lo , struct file * file )
500
+ {
501
+ lo -> lo_backing_file = file ;
502
+ lo -> old_gfp_mask = mapping_gfp_mask (file -> f_mapping );
503
+ mapping_set_gfp_mask (file -> f_mapping ,
504
+ lo -> old_gfp_mask & ~(__GFP_IO | __GFP_FS ));
505
+ }
506
+
499
507
/*
500
508
* loop_change_fd switched the backing store of a loopback device to
501
509
* a new file. This is useful for operating system installers to free up
@@ -549,10 +557,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
549
557
disk_force_media_change (lo -> lo_disk );
550
558
memflags = blk_mq_freeze_queue (lo -> lo_queue );
551
559
mapping_set_gfp_mask (old_file -> f_mapping , lo -> old_gfp_mask );
552
- lo -> lo_backing_file = file ;
553
- lo -> old_gfp_mask = mapping_gfp_mask (file -> f_mapping );
554
- mapping_set_gfp_mask (file -> f_mapping ,
555
- lo -> old_gfp_mask & ~(__GFP_IO |__GFP_FS ));
560
+ loop_assign_backing_file (lo , file );
556
561
loop_update_dio (lo );
557
562
blk_mq_unfreeze_queue (lo -> lo_queue , memflags );
558
563
partscan = lo -> lo_flags & LO_FLAGS_PARTSCAN ;
@@ -943,7 +948,6 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
943
948
const struct loop_config * config )
944
949
{
945
950
struct file * file = fget (config -> fd );
946
- struct address_space * mapping ;
947
951
struct queue_limits lim ;
948
952
int error ;
949
953
loff_t size ;
@@ -979,8 +983,6 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
979
983
if (error )
980
984
goto out_unlock ;
981
985
982
- mapping = file -> f_mapping ;
983
-
984
986
if ((config -> info .lo_flags & ~LOOP_CONFIGURE_SETTABLE_FLAGS ) != 0 ) {
985
987
error = - EINVAL ;
986
988
goto out_unlock ;
@@ -1012,9 +1014,7 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
1012
1014
set_disk_ro (lo -> lo_disk , (lo -> lo_flags & LO_FLAGS_READ_ONLY ) != 0 );
1013
1015
1014
1016
lo -> lo_device = bdev ;
1015
- lo -> lo_backing_file = file ;
1016
- lo -> old_gfp_mask = mapping_gfp_mask (mapping );
1017
- mapping_set_gfp_mask (mapping , lo -> old_gfp_mask & ~(__GFP_IO |__GFP_FS ));
1017
+ loop_assign_backing_file (lo , file );
1018
1018
1019
1019
lim = queue_limits_start_update (lo -> lo_queue );
1020
1020
loop_update_limits (lo , & lim , config -> block_size );
0 commit comments