Kill of the final user of bdev_direct_access() and struct blk_dax_ctl.
Unified · Split
| @@ -788,35 +788,43 @@ EXPORT_SYMBOL(bdev_dax_pgoff); · 787 unmodified lines | |||
| 788 | */ | 788 | */ |
| 789 | int bdev_dax_supported(struct super_block *sb, int blocksize) | 789 | int bdev_dax_supported(struct super_block *sb, int blocksize) |
| 790 | { | 790 | { |
| 791 | struct blk_dax_ctl dax = { | 791 | struct block_device *bdev = sb->s_bdev; |
| 792 | .sector = 0, | 792 | struct dax_device *dax_dev; |
| 793 | .size = PAGE_SIZE, | 793 | pgoff_t pgoff; |
| 794 | }; | 794 | int err, id; |
| 795 | int err; | 795 | void *kaddr; |
| 796 | pfn_t pfn; | ||
| 797 | long len; | ||
| 796 | 798 | ||
| 797 | if (blocksize != PAGE_SIZE) { | 799 | if (blocksize != PAGE_SIZE) { |
| 798 | vfs_msg(sb, KERN_ERR, "error: unsupported blocksize for dax"); | 800 | vfs_msg(sb, KERN_ERR, "error: unsupported blocksize for dax"); |
| 799 | return -EINVAL; | 801 | return -EINVAL; |
| 800 | } | 802 | } |
| 801 | 803 | ||
| 802 | err = bdev_direct_access(sb->s_bdev, &dax); | 804 | err = bdev_dax_pgoff(bdev, 0, PAGE_SIZE, &pgoff); |
| 803 | if (err < 0) { | 805 | if (err) { |
| 804 | switch (err) { | 806 | vfs_msg(sb, KERN_ERR, "error: unaligned partition for dax"); |
| 805 | case -EOPNOTSUPP: | ||
| 806 | vfs_msg(sb, KERN_ERR, | ||
| 807 | "error: device does not support dax"); | ||
| 808 | break; | ||
| 809 | case -EINVAL: | ||
| 810 | vfs_msg(sb, KERN_ERR, | ||
| 811 | "error: unaligned partition for dax"); | ||
| 812 | break; | ||
| 813 | default: | ||
| 814 | vfs_msg(sb, KERN_ERR, | ||
| 815 | "error: dax access failed (%d)", err); | ||
| 816 | } | ||
| 817 | return err; | 807 | return err; |
| 818 | } | 808 | } |
| 819 | 809 | ||
| 810 | dax_dev = dax_get_by_host(bdev->bd_disk->disk_name); | ||
| 811 | if (!dax_dev) { | ||
| 812 | vfs_msg(sb, KERN_ERR, "error: device does not support dax"); | ||
| 813 | return -EOPNOTSUPP; | ||
| 814 | } | ||
| 815 | |||
| 816 | id = dax_read_lock(); | ||
| 817 | len = dax_direct_access(dax_dev, pgoff, 1, &kaddr, &pfn); | ||
| 818 | dax_read_unlock(id); | ||
| 819 | |||
| 820 | put_dax(dax_dev); | ||
| 821 | |||
| 822 | if (len < 1) { | ||
| 823 | vfs_msg(sb, KERN_ERR, | ||
| 824 | "error: dax access failed (%d)", len); | ||
| 825 | return len < 0 ? len : -EIO; | ||
| 826 | } | ||
| 827 | |||
| 820 | return 0; | 828 | return 0; |
| 821 | } | 829 | } |
| 822 | EXPORT_SYMBOL_GPL(bdev_dax_supported); | 830 | EXPORT_SYMBOL_GPL(bdev_dax_supported); |