Lines Matching refs:bdev

16 static int blkpg_do_ioctl(struct block_device *bdev,  in blkpg_do_ioctl()  argument
19 struct gendisk *disk = bdev->bd_disk; in blkpg_do_ioctl()
27 if (bdev_is_partition(bdev)) in blkpg_do_ioctl()
39 if (!IS_ALIGNED(p.start | p.length, bdev_logical_block_size(bdev))) in blkpg_do_ioctl()
55 static int blkpg_ioctl(struct block_device *bdev, in blkpg_ioctl() argument
64 return blkpg_do_ioctl(bdev, udata, op); in blkpg_ioctl()
75 static int compat_blkpg_ioctl(struct block_device *bdev, in compat_blkpg_ioctl() argument
84 return blkpg_do_ioctl(bdev, compat_ptr(udata), op); in compat_blkpg_ioctl()
88 static int blk_ioctl_discard(struct block_device *bdev, blk_mode_t mode, in blk_ioctl_discard() argument
93 struct inode *inode = bdev->bd_inode; in blk_ioctl_discard()
99 if (!bdev_max_discard_sectors(bdev)) in blk_ioctl_discard()
114 end > bdev_nr_bytes(bdev)) in blk_ioctl_discard()
118 err = truncate_bdev_range(bdev, mode, start, end - 1); in blk_ioctl_discard()
121 err = blkdev_issue_discard(bdev, start >> 9, len >> 9, GFP_KERNEL); in blk_ioctl_discard()
127 static int blk_ioctl_secure_erase(struct block_device *bdev, blk_mode_t mode, in blk_ioctl_secure_erase() argument
136 if (!bdev_max_secure_erase_sectors(bdev)) in blk_ioctl_secure_erase()
146 end > bdev_nr_bytes(bdev)) in blk_ioctl_secure_erase()
149 filemap_invalidate_lock(bdev->bd_inode->i_mapping); in blk_ioctl_secure_erase()
150 err = truncate_bdev_range(bdev, mode, start, end - 1); in blk_ioctl_secure_erase()
152 err = blkdev_issue_secure_erase(bdev, start >> 9, len >> 9, in blk_ioctl_secure_erase()
154 filemap_invalidate_unlock(bdev->bd_inode->i_mapping); in blk_ioctl_secure_erase()
159 static int blk_ioctl_zeroout(struct block_device *bdev, blk_mode_t mode, in blk_ioctl_zeroout() argument
164 struct inode *inode = bdev->bd_inode; in blk_ioctl_zeroout()
181 if (end >= (uint64_t)bdev_nr_bytes(bdev)) in blk_ioctl_zeroout()
188 err = truncate_bdev_range(bdev, mode, start, end); in blk_ioctl_zeroout()
192 err = blkdev_issue_zeroout(bdev, start >> 9, len >> 9, GFP_KERNEL, in blk_ioctl_zeroout()
248 int blkdev_compat_ptr_ioctl(struct block_device *bdev, blk_mode_t mode, in blkdev_compat_ptr_ioctl() argument
251 struct gendisk *disk = bdev->bd_disk; in blkdev_compat_ptr_ioctl()
254 return disk->fops->ioctl(bdev, mode, cmd, in blkdev_compat_ptr_ioctl()
262 static bool blkdev_pr_allowed(struct block_device *bdev, blk_mode_t mode) in blkdev_pr_allowed() argument
265 if (bdev_is_partition(bdev)) in blkdev_pr_allowed()
277 static int blkdev_pr_register(struct block_device *bdev, blk_mode_t mode, in blkdev_pr_register() argument
280 const struct pr_ops *ops = bdev->bd_disk->fops->pr_ops; in blkdev_pr_register()
283 if (!blkdev_pr_allowed(bdev, mode)) in blkdev_pr_register()
292 return ops->pr_register(bdev, reg.old_key, reg.new_key, reg.flags); in blkdev_pr_register()
295 static int blkdev_pr_reserve(struct block_device *bdev, blk_mode_t mode, in blkdev_pr_reserve() argument
298 const struct pr_ops *ops = bdev->bd_disk->fops->pr_ops; in blkdev_pr_reserve()
301 if (!blkdev_pr_allowed(bdev, mode)) in blkdev_pr_reserve()
310 return ops->pr_reserve(bdev, rsv.key, rsv.type, rsv.flags); in blkdev_pr_reserve()
313 static int blkdev_pr_release(struct block_device *bdev, blk_mode_t mode, in blkdev_pr_release() argument
316 const struct pr_ops *ops = bdev->bd_disk->fops->pr_ops; in blkdev_pr_release()
319 if (!blkdev_pr_allowed(bdev, mode)) in blkdev_pr_release()
328 return ops->pr_release(bdev, rsv.key, rsv.type); in blkdev_pr_release()
331 static int blkdev_pr_preempt(struct block_device *bdev, blk_mode_t mode, in blkdev_pr_preempt() argument
334 const struct pr_ops *ops = bdev->bd_disk->fops->pr_ops; in blkdev_pr_preempt()
337 if (!blkdev_pr_allowed(bdev, mode)) in blkdev_pr_preempt()
346 return ops->pr_preempt(bdev, p.old_key, p.new_key, p.type, abort); in blkdev_pr_preempt()
349 static int blkdev_pr_clear(struct block_device *bdev, blk_mode_t mode, in blkdev_pr_clear() argument
352 const struct pr_ops *ops = bdev->bd_disk->fops->pr_ops; in blkdev_pr_clear()
355 if (!blkdev_pr_allowed(bdev, mode)) in blkdev_pr_clear()
364 return ops->pr_clear(bdev, c.key); in blkdev_pr_clear()
367 static int blkdev_flushbuf(struct block_device *bdev, unsigned cmd, in blkdev_flushbuf() argument
373 mutex_lock(&bdev->bd_holder_lock); in blkdev_flushbuf()
374 if (bdev->bd_holder_ops && bdev->bd_holder_ops->sync) in blkdev_flushbuf()
375 bdev->bd_holder_ops->sync(bdev); in blkdev_flushbuf()
377 sync_blockdev(bdev); in blkdev_flushbuf()
378 mutex_unlock(&bdev->bd_holder_lock); in blkdev_flushbuf()
380 invalidate_bdev(bdev); in blkdev_flushbuf()
384 static int blkdev_roset(struct block_device *bdev, unsigned cmd, in blkdev_roset() argument
394 if (bdev->bd_disk->fops->set_read_only) { in blkdev_roset()
395 ret = bdev->bd_disk->fops->set_read_only(bdev, n); in blkdev_roset()
399 bdev->bd_read_only = n; in blkdev_roset()
403 static int blkdev_getgeo(struct block_device *bdev, in blkdev_getgeo() argument
406 struct gendisk *disk = bdev->bd_disk; in blkdev_getgeo()
420 geo.start = get_start_sect(bdev); in blkdev_getgeo()
421 ret = disk->fops->getgeo(bdev, &geo); in blkdev_getgeo()
437 static int compat_hdio_getgeo(struct block_device *bdev, in compat_hdio_getgeo() argument
440 struct gendisk *disk = bdev->bd_disk; in compat_hdio_getgeo()
454 geo.start = get_start_sect(bdev); in compat_hdio_getgeo()
455 ret = disk->fops->getgeo(bdev, &geo); in compat_hdio_getgeo()
469 static int blkdev_bszset(struct block_device *bdev, blk_mode_t mode, in blkdev_bszset() argument
482 return set_blocksize(bdev, n); in blkdev_bszset()
484 if (IS_ERR(blkdev_get_by_dev(bdev->bd_dev, mode, &bdev, NULL))) in blkdev_bszset()
486 ret = set_blocksize(bdev, n); in blkdev_bszset()
487 blkdev_put(bdev, &bdev); in blkdev_bszset()
497 static int blkdev_common_ioctl(struct block_device *bdev, blk_mode_t mode, in blkdev_common_ioctl() argument
505 return blkdev_flushbuf(bdev, cmd, arg); in blkdev_common_ioctl()
507 return blkdev_roset(bdev, cmd, arg); in blkdev_common_ioctl()
509 return blk_ioctl_discard(bdev, mode, arg); in blkdev_common_ioctl()
511 return blk_ioctl_secure_erase(bdev, mode, argp); in blkdev_common_ioctl()
513 return blk_ioctl_zeroout(bdev, mode, arg); in blkdev_common_ioctl()
515 return put_u64(argp, bdev->bd_disk->diskseq); in blkdev_common_ioctl()
517 return blkdev_report_zones_ioctl(bdev, cmd, arg); in blkdev_common_ioctl()
522 return blkdev_zone_mgmt_ioctl(bdev, mode, cmd, arg); in blkdev_common_ioctl()
524 return put_uint(argp, bdev_zone_sectors(bdev)); in blkdev_common_ioctl()
526 return put_uint(argp, bdev_nr_zones(bdev)); in blkdev_common_ioctl()
528 return put_int(argp, bdev_read_only(bdev) != 0); in blkdev_common_ioctl()
530 return put_int(argp, bdev_logical_block_size(bdev)); in blkdev_common_ioctl()
532 return put_uint(argp, bdev_physical_block_size(bdev)); in blkdev_common_ioctl()
534 return put_uint(argp, bdev_io_min(bdev)); in blkdev_common_ioctl()
536 return put_uint(argp, bdev_io_opt(bdev)); in blkdev_common_ioctl()
538 return put_int(argp, bdev_alignment_offset(bdev)); in blkdev_common_ioctl()
543 queue_max_sectors(bdev_get_queue(bdev))); in blkdev_common_ioctl()
546 return put_ushort(argp, !bdev_nonrot(bdev)); in blkdev_common_ioctl()
551 bdev->bd_disk->bdi->ra_pages = (arg * 512) / PAGE_SIZE; in blkdev_common_ioctl()
556 if (bdev_is_partition(bdev)) in blkdev_common_ioctl()
558 return disk_scan_partitions(bdev->bd_disk, mode); in blkdev_common_ioctl()
562 return blk_trace_ioctl(bdev, cmd, argp); in blkdev_common_ioctl()
564 return blkdev_pr_register(bdev, mode, argp); in blkdev_common_ioctl()
566 return blkdev_pr_reserve(bdev, mode, argp); in blkdev_common_ioctl()
568 return blkdev_pr_release(bdev, mode, argp); in blkdev_common_ioctl()
570 return blkdev_pr_preempt(bdev, mode, argp, false); in blkdev_common_ioctl()
572 return blkdev_pr_preempt(bdev, mode, argp, true); in blkdev_common_ioctl()
574 return blkdev_pr_clear(bdev, mode, argp); in blkdev_common_ioctl()
588 struct block_device *bdev = I_BDEV(file->f_mapping->host); in blkdev_ioctl() local
596 return blkdev_getgeo(bdev, argp); in blkdev_ioctl()
598 return blkpg_ioctl(bdev, argp); in blkdev_ioctl()
606 (bdev->bd_disk->bdi->ra_pages * PAGE_SIZE) / 512); in blkdev_ioctl()
608 if (bdev_nr_sectors(bdev) > ~0UL) in blkdev_ioctl()
610 return put_ulong(argp, bdev_nr_sectors(bdev)); in blkdev_ioctl()
614 return put_int(argp, block_size(bdev)); in blkdev_ioctl()
616 return blkdev_bszset(bdev, mode, argp); in blkdev_ioctl()
618 return put_u64(argp, bdev_nr_bytes(bdev)); in blkdev_ioctl()
622 return blk_trace_ioctl(bdev, cmd, argp); in blkdev_ioctl()
627 ret = blkdev_common_ioctl(bdev, mode, cmd, arg, argp); in blkdev_ioctl()
631 if (!bdev->bd_disk->fops->ioctl) in blkdev_ioctl()
633 return bdev->bd_disk->fops->ioctl(bdev, mode, cmd, arg); in blkdev_ioctl()
649 struct block_device *bdev = I_BDEV(file->f_mapping->host); in compat_blkdev_ioctl() local
650 struct gendisk *disk = bdev->bd_disk; in compat_blkdev_ioctl()
656 return compat_hdio_getgeo(bdev, argp); in compat_blkdev_ioctl()
658 return compat_blkpg_ioctl(bdev, argp); in compat_blkdev_ioctl()
666 (bdev->bd_disk->bdi->ra_pages * PAGE_SIZE) / 512); in compat_blkdev_ioctl()
668 if (bdev_nr_sectors(bdev) > ~(compat_ulong_t)0) in compat_blkdev_ioctl()
670 return compat_put_ulong(argp, bdev_nr_sectors(bdev)); in compat_blkdev_ioctl()
674 return put_int(argp, bdev_logical_block_size(bdev)); in compat_blkdev_ioctl()
676 return blkdev_bszset(bdev, mode, argp); in compat_blkdev_ioctl()
678 return put_u64(argp, bdev_nr_bytes(bdev)); in compat_blkdev_ioctl()
682 return blk_trace_ioctl(bdev, cmd, argp); in compat_blkdev_ioctl()
687 ret = blkdev_common_ioctl(bdev, mode, cmd, arg, argp); in compat_blkdev_ioctl()
689 ret = disk->fops->compat_ioctl(bdev, mode, cmd, arg); in compat_blkdev_ioctl()