@@ -458,9 +458,11 @@ static int dm_blk_getgeo(struct block_device *bdev, struct hd_geometry *geo)
458
458
return dm_get_geometry (md , geo );
459
459
}
460
460
461
- static int dm_grab_bdev_for_ioctl (struct mapped_device * md ,
462
- struct block_device * * bdev ,
463
- fmode_t * mode )
461
+ static char * _dm_claim_ptr = "I belong to device-mapper" ;
462
+
463
+ static int dm_get_bdev_for_ioctl (struct mapped_device * md ,
464
+ struct block_device * * bdev ,
465
+ fmode_t * mode )
464
466
{
465
467
struct dm_target * tgt ;
466
468
struct dm_table * map ;
@@ -490,6 +492,10 @@ static int dm_grab_bdev_for_ioctl(struct mapped_device *md,
490
492
goto out ;
491
493
492
494
bdgrab (* bdev );
495
+ r = blkdev_get (* bdev , * mode , _dm_claim_ptr );
496
+ if (r < 0 )
497
+ goto out ;
498
+
493
499
dm_put_live_table (md , srcu_idx );
494
500
return r ;
495
501
@@ -508,7 +514,7 @@ static int dm_blk_ioctl(struct block_device *bdev, fmode_t mode,
508
514
struct mapped_device * md = bdev -> bd_disk -> private_data ;
509
515
int r ;
510
516
511
- r = dm_grab_bdev_for_ioctl (md , & bdev , & mode );
517
+ r = dm_get_bdev_for_ioctl (md , & bdev , & mode );
512
518
if (r < 0 )
513
519
return r ;
514
520
@@ -528,7 +534,7 @@ static int dm_blk_ioctl(struct block_device *bdev, fmode_t mode,
528
534
529
535
r = __blkdev_driver_ioctl (bdev , mode , cmd , arg );
530
536
out :
531
- bdput (bdev );
537
+ blkdev_put (bdev , mode );
532
538
return r ;
533
539
}
534
540
@@ -708,14 +714,13 @@ static void dm_put_live_table_fast(struct mapped_device *md) __releases(RCU)
708
714
static int open_table_device (struct table_device * td , dev_t dev ,
709
715
struct mapped_device * md )
710
716
{
711
- static char * _claim_ptr = "I belong to device-mapper" ;
712
717
struct block_device * bdev ;
713
718
714
719
int r ;
715
720
716
721
BUG_ON (td -> dm_dev .bdev );
717
722
718
- bdev = blkdev_get_by_dev (dev , td -> dm_dev .mode | FMODE_EXCL , _claim_ptr );
723
+ bdev = blkdev_get_by_dev (dev , td -> dm_dev .mode | FMODE_EXCL , _dm_claim_ptr );
719
724
if (IS_ERR (bdev ))
720
725
return PTR_ERR (bdev );
721
726
@@ -3011,7 +3016,7 @@ static int dm_pr_reserve(struct block_device *bdev, u64 key, enum pr_type type,
3011
3016
fmode_t mode ;
3012
3017
int r ;
3013
3018
3014
- r = dm_grab_bdev_for_ioctl (md , & bdev , & mode );
3019
+ r = dm_get_bdev_for_ioctl (md , & bdev , & mode );
3015
3020
if (r < 0 )
3016
3021
return r ;
3017
3022
@@ -3021,7 +3026,7 @@ static int dm_pr_reserve(struct block_device *bdev, u64 key, enum pr_type type,
3021
3026
else
3022
3027
r = - EOPNOTSUPP ;
3023
3028
3024
- bdput (bdev );
3029
+ blkdev_put (bdev , mode );
3025
3030
return r ;
3026
3031
}
3027
3032
@@ -3032,7 +3037,7 @@ static int dm_pr_release(struct block_device *bdev, u64 key, enum pr_type type)
3032
3037
fmode_t mode ;
3033
3038
int r ;
3034
3039
3035
- r = dm_grab_bdev_for_ioctl (md , & bdev , & mode );
3040
+ r = dm_get_bdev_for_ioctl (md , & bdev , & mode );
3036
3041
if (r < 0 )
3037
3042
return r ;
3038
3043
@@ -3042,7 +3047,7 @@ static int dm_pr_release(struct block_device *bdev, u64 key, enum pr_type type)
3042
3047
else
3043
3048
r = - EOPNOTSUPP ;
3044
3049
3045
- bdput (bdev );
3050
+ blkdev_put (bdev , mode );
3046
3051
return r ;
3047
3052
}
3048
3053
@@ -3054,7 +3059,7 @@ static int dm_pr_preempt(struct block_device *bdev, u64 old_key, u64 new_key,
3054
3059
fmode_t mode ;
3055
3060
int r ;
3056
3061
3057
- r = dm_grab_bdev_for_ioctl (md , & bdev , & mode );
3062
+ r = dm_get_bdev_for_ioctl (md , & bdev , & mode );
3058
3063
if (r < 0 )
3059
3064
return r ;
3060
3065
@@ -3064,7 +3069,7 @@ static int dm_pr_preempt(struct block_device *bdev, u64 old_key, u64 new_key,
3064
3069
else
3065
3070
r = - EOPNOTSUPP ;
3066
3071
3067
- bdput (bdev );
3072
+ blkdev_put (bdev , mode );
3068
3073
return r ;
3069
3074
}
3070
3075
@@ -3075,7 +3080,7 @@ static int dm_pr_clear(struct block_device *bdev, u64 key)
3075
3080
fmode_t mode ;
3076
3081
int r ;
3077
3082
3078
- r = dm_grab_bdev_for_ioctl (md , & bdev , & mode );
3083
+ r = dm_get_bdev_for_ioctl (md , & bdev , & mode );
3079
3084
if (r < 0 )
3080
3085
return r ;
3081
3086
@@ -3085,7 +3090,7 @@ static int dm_pr_clear(struct block_device *bdev, u64 key)
3085
3090
else
3086
3091
r = - EOPNOTSUPP ;
3087
3092
3088
- bdput (bdev );
3093
+ blkdev_put (bdev , mode );
3089
3094
return r ;
3090
3095
}
3091
3096
0 commit comments