@@ -25,17 +25,17 @@ bl_free_device(struct pnfs_block_dev *dev)
2525 } else {
2626 if (dev -> pr_registered ) {
2727 const struct pr_ops * ops =
28- dev -> bdev -> bd_disk -> fops -> pr_ops ;
28+ dev -> bdev_handle -> bdev -> bd_disk -> fops -> pr_ops ;
2929 int error ;
3030
31- error = ops -> pr_register (dev -> bdev , dev -> pr_key , 0 ,
32- false);
31+ error = ops -> pr_register (dev -> bdev_handle -> bdev ,
32+ dev -> pr_key , 0 , false);
3333 if (error )
3434 pr_err ("failed to unregister PR key.\n" );
3535 }
3636
37- if (dev -> bdev )
38- blkdev_put (dev -> bdev , NULL );
37+ if (dev -> bdev_handle )
38+ bdev_release (dev -> bdev_handle );
3939 }
4040}
4141
@@ -169,7 +169,7 @@ static bool bl_map_simple(struct pnfs_block_dev *dev, u64 offset,
169169 map -> start = dev -> start ;
170170 map -> len = dev -> len ;
171171 map -> disk_offset = dev -> disk_offset ;
172- map -> bdev = dev -> bdev ;
172+ map -> bdev = dev -> bdev_handle -> bdev ;
173173 return true;
174174}
175175
@@ -236,28 +236,26 @@ bl_parse_simple(struct nfs_server *server, struct pnfs_block_dev *d,
236236 struct pnfs_block_volume * volumes , int idx , gfp_t gfp_mask )
237237{
238238 struct pnfs_block_volume * v = & volumes [idx ];
239- struct block_device * bdev ;
239+ struct bdev_handle * bdev_handle ;
240240 dev_t dev ;
241241
242242 dev = bl_resolve_deviceid (server , v , gfp_mask );
243243 if (!dev )
244244 return - EIO ;
245245
246- bdev = blkdev_get_by_dev (dev , BLK_OPEN_READ | BLK_OPEN_WRITE , NULL ,
247- NULL );
248- if (IS_ERR (bdev )) {
246+ bdev_handle = bdev_open_by_dev (dev , BLK_OPEN_READ | BLK_OPEN_WRITE ,
247+ NULL , NULL );
248+ if (IS_ERR (bdev_handle )) {
249249 printk (KERN_WARNING "pNFS: failed to open device %d:%d (%ld)\n" ,
250- MAJOR (dev ), MINOR (dev ), PTR_ERR (bdev ));
251- return PTR_ERR (bdev );
250+ MAJOR (dev ), MINOR (dev ), PTR_ERR (bdev_handle ));
251+ return PTR_ERR (bdev_handle );
252252 }
253- d -> bdev = bdev ;
254-
255-
256- d -> len = bdev_nr_bytes (d -> bdev );
253+ d -> bdev_handle = bdev_handle ;
254+ d -> len = bdev_nr_bytes (bdev_handle -> bdev );
257255 d -> map = bl_map_simple ;
258256
259257 printk (KERN_INFO "pNFS: using block device %s\n" ,
260- d -> bdev -> bd_disk -> disk_name );
258+ bdev_handle -> bdev -> bd_disk -> disk_name );
261259 return 0 ;
262260}
263261
@@ -302,34 +300,34 @@ bl_validate_designator(struct pnfs_block_volume *v)
302300 }
303301}
304302
305- static struct block_device *
303+ static struct bdev_handle *
306304bl_open_path (struct pnfs_block_volume * v , const char * prefix )
307305{
308- struct block_device * bdev ;
306+ struct bdev_handle * bdev_handle ;
309307 const char * devname ;
310308
311309 devname = kasprintf (GFP_KERNEL , "/dev/disk/by-id/%s%*phN" ,
312310 prefix , v -> scsi .designator_len , v -> scsi .designator );
313311 if (!devname )
314312 return ERR_PTR (- ENOMEM );
315313
316- bdev = blkdev_get_by_path (devname , BLK_OPEN_READ | BLK_OPEN_WRITE , NULL ,
317- NULL );
318- if (IS_ERR (bdev )) {
314+ bdev_handle = bdev_open_by_path (devname , BLK_OPEN_READ | BLK_OPEN_WRITE ,
315+ NULL , NULL );
316+ if (IS_ERR (bdev_handle )) {
319317 pr_warn ("pNFS: failed to open device %s (%ld)\n" ,
320- devname , PTR_ERR (bdev ));
318+ devname , PTR_ERR (bdev_handle ));
321319 }
322320
323321 kfree (devname );
324- return bdev ;
322+ return bdev_handle ;
325323}
326324
327325static int
328326bl_parse_scsi (struct nfs_server * server , struct pnfs_block_dev * d ,
329327 struct pnfs_block_volume * volumes , int idx , gfp_t gfp_mask )
330328{
331329 struct pnfs_block_volume * v = & volumes [idx ];
332- struct block_device * bdev ;
330+ struct bdev_handle * bdev_handle ;
333331 const struct pr_ops * ops ;
334332 int error ;
335333
@@ -342,40 +340,40 @@ bl_parse_scsi(struct nfs_server *server, struct pnfs_block_dev *d,
342340 * On other distributions like Debian, the default SCSI by-id path will
343341 * point to the dm-multipath device if one exists.
344342 */
345- bdev = bl_open_path (v , "dm-uuid-mpath-0x" );
346- if (IS_ERR (bdev ))
347- bdev = bl_open_path (v , "wwn-0x" );
348- if (IS_ERR (bdev ))
349- return PTR_ERR (bdev );
350- d -> bdev = bdev ;
351-
352- d -> len = bdev_nr_bytes (d -> bdev );
343+ bdev_handle = bl_open_path (v , "dm-uuid-mpath-0x" );
344+ if (IS_ERR (bdev_handle ))
345+ bdev_handle = bl_open_path (v , "wwn-0x" );
346+ if (IS_ERR (bdev_handle ))
347+ return PTR_ERR (bdev_handle );
348+ d -> bdev_handle = bdev_handle ;
349+
350+ d -> len = bdev_nr_bytes (d -> bdev_handle -> bdev );
353351 d -> map = bl_map_simple ;
354352 d -> pr_key = v -> scsi .pr_key ;
355353
356354 pr_info ("pNFS: using block device %s (reservation key 0x%llx)\n" ,
357- d -> bdev -> bd_disk -> disk_name , d -> pr_key );
355+ d -> bdev_handle -> bdev -> bd_disk -> disk_name , d -> pr_key );
358356
359- ops = d -> bdev -> bd_disk -> fops -> pr_ops ;
357+ ops = d -> bdev_handle -> bdev -> bd_disk -> fops -> pr_ops ;
360358 if (!ops ) {
361359 pr_err ("pNFS: block device %s does not support reservations." ,
362- d -> bdev -> bd_disk -> disk_name );
360+ d -> bdev_handle -> bdev -> bd_disk -> disk_name );
363361 error = - EINVAL ;
364362 goto out_blkdev_put ;
365363 }
366364
367- error = ops -> pr_register (d -> bdev , 0 , d -> pr_key , true);
365+ error = ops -> pr_register (d -> bdev_handle -> bdev , 0 , d -> pr_key , true);
368366 if (error ) {
369367 pr_err ("pNFS: failed to register key for block device %s." ,
370- d -> bdev -> bd_disk -> disk_name );
368+ d -> bdev_handle -> bdev -> bd_disk -> disk_name );
371369 goto out_blkdev_put ;
372370 }
373371
374372 d -> pr_registered = true;
375373 return 0 ;
376374
377375out_blkdev_put :
378- blkdev_put (d -> bdev , NULL );
376+ bdev_release (d -> bdev_handle );
379377 return error ;
380378}
381379
0 commit comments