@@ -493,6 +493,14 @@ static int loop_validate_file(struct file *file, struct block_device *bdev)
493
493
return 0 ;
494
494
}
495
495
496
+ static void loop_assign_backing_file (struct loop_device * lo , struct file * file )
497
+ {
498
+ lo -> lo_backing_file = file ;
499
+ lo -> old_gfp_mask = mapping_gfp_mask (file -> f_mapping );
500
+ mapping_set_gfp_mask (file -> f_mapping ,
501
+ lo -> old_gfp_mask & ~(__GFP_IO | __GFP_FS ));
502
+ }
503
+
496
504
/*
497
505
* loop_change_fd switched the backing store of a loopback device to
498
506
* a new file. This is useful for operating system installers to free up
@@ -545,10 +553,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
545
553
disk_force_media_change (lo -> lo_disk );
546
554
blk_mq_freeze_queue (lo -> lo_queue );
547
555
mapping_set_gfp_mask (old_file -> f_mapping , lo -> old_gfp_mask );
548
- lo -> lo_backing_file = file ;
549
- lo -> old_gfp_mask = mapping_gfp_mask (file -> f_mapping );
550
- mapping_set_gfp_mask (file -> f_mapping ,
551
- lo -> old_gfp_mask & ~(__GFP_IO |__GFP_FS ));
556
+ loop_assign_backing_file (lo , file );
552
557
loop_update_dio (lo );
553
558
blk_mq_unfreeze_queue (lo -> lo_queue );
554
559
partscan = lo -> lo_flags & LO_FLAGS_PARTSCAN ;
@@ -940,7 +945,6 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
940
945
const struct loop_config * config )
941
946
{
942
947
struct file * file = fget (config -> fd );
943
- struct address_space * mapping ;
944
948
struct queue_limits lim ;
945
949
int error ;
946
950
loff_t size ;
@@ -976,8 +980,6 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
976
980
if (error )
977
981
goto out_unlock ;
978
982
979
- mapping = file -> f_mapping ;
980
-
981
983
if ((config -> info .lo_flags & ~LOOP_CONFIGURE_SETTABLE_FLAGS ) != 0 ) {
982
984
error = - EINVAL ;
983
985
goto out_unlock ;
@@ -1009,9 +1011,7 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
1009
1011
1010
1012
lo -> use_dio = lo -> lo_flags & LO_FLAGS_DIRECT_IO ;
1011
1013
lo -> lo_device = bdev ;
1012
- lo -> lo_backing_file = file ;
1013
- lo -> old_gfp_mask = mapping_gfp_mask (mapping );
1014
- mapping_set_gfp_mask (mapping , lo -> old_gfp_mask & ~(__GFP_IO |__GFP_FS ));
1014
+ loop_assign_backing_file (lo , file );
1015
1015
1016
1016
lim = queue_limits_start_update (lo -> lo_queue );
1017
1017
loop_update_limits (lo , & lim , config -> block_size );
0 commit comments