diff options
| -rw-r--r-- | block/ioctl.c | 38 | ||||
| -rw-r--r-- | fs/block_dev.c | 28 | ||||
| -rw-r--r-- | include/linux/fs.h | 3 | ||||
| -rw-r--r-- | include/uapi/linux/fs.h | 1 |
4 files changed, 0 insertions, 70 deletions
diff --git a/block/ioctl.c b/block/ioctl.c index 77f5d17779d6..d8996bbd7f12 100644 --- a/block/ioctl.c +++ b/block/ioctl.c | |||
| @@ -434,42 +434,6 @@ bool blkdev_dax_capable(struct block_device *bdev) | |||
| 434 | 434 | ||
| 435 | return true; | 435 | return true; |
| 436 | } | 436 | } |
| 437 | |||
| 438 | static int blkdev_daxset(struct block_device *bdev, unsigned long argp) | ||
| 439 | { | ||
| 440 | unsigned long arg; | ||
| 441 | int rc = 0; | ||
| 442 | |||
| 443 | if (!capable(CAP_SYS_ADMIN)) | ||
| 444 | return -EACCES; | ||
| 445 | |||
| 446 | if (get_user(arg, (int __user *)(argp))) | ||
| 447 | return -EFAULT; | ||
| 448 | arg = !!arg; | ||
| 449 | if (arg == !!(bdev->bd_inode->i_flags & S_DAX)) | ||
| 450 | return 0; | ||
| 451 | |||
| 452 | if (arg) | ||
| 453 | arg = S_DAX; | ||
| 454 | |||
| 455 | if (arg && !blkdev_dax_capable(bdev)) | ||
| 456 | return -ENOTTY; | ||
| 457 | |||
| 458 | inode_lock(bdev->bd_inode); | ||
| 459 | if (bdev->bd_map_count == 0) | ||
| 460 | inode_set_flags(bdev->bd_inode, arg, S_DAX); | ||
| 461 | else | ||
| 462 | rc = -EBUSY; | ||
| 463 | inode_unlock(bdev->bd_inode); | ||
| 464 | return rc; | ||
| 465 | } | ||
| 466 | #else | ||
| 467 | static int blkdev_daxset(struct block_device *bdev, int arg) | ||
| 468 | { | ||
| 469 | if (arg) | ||
| 470 | return -ENOTTY; | ||
| 471 | return 0; | ||
| 472 | } | ||
| 473 | #endif | 437 | #endif |
| 474 | 438 | ||
| 475 | static int blkdev_flushbuf(struct block_device *bdev, fmode_t mode, | 439 | static int blkdev_flushbuf(struct block_device *bdev, fmode_t mode, |
| @@ -634,8 +598,6 @@ int blkdev_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd, | |||
| 634 | case BLKTRACESETUP: | 598 | case BLKTRACESETUP: |
| 635 | case BLKTRACETEARDOWN: | 599 | case BLKTRACETEARDOWN: |
| 636 | return blk_trace_ioctl(bdev, cmd, argp); | 600 | return blk_trace_ioctl(bdev, cmd, argp); |
| 637 | case BLKDAXSET: | ||
| 638 | return blkdev_daxset(bdev, arg); | ||
| 639 | case BLKDAXGET: | 601 | case BLKDAXGET: |
| 640 | return put_int(arg, !!(bdev->bd_inode->i_flags & S_DAX)); | 602 | return put_int(arg, !!(bdev->bd_inode->i_flags & S_DAX)); |
| 641 | break; | 603 | break; |
diff --git a/fs/block_dev.c b/fs/block_dev.c index 7b9cd49622b1..afb437484362 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c | |||
| @@ -1736,37 +1736,13 @@ static int blkdev_dax_pmd_fault(struct vm_area_struct *vma, unsigned long addr, | |||
| 1736 | return __dax_pmd_fault(vma, addr, pmd, flags, blkdev_get_block, NULL); | 1736 | return __dax_pmd_fault(vma, addr, pmd, flags, blkdev_get_block, NULL); |
| 1737 | } | 1737 | } |
| 1738 | 1738 | ||
| 1739 | static void blkdev_vm_open(struct vm_area_struct *vma) | ||
| 1740 | { | ||
| 1741 | struct inode *bd_inode = bdev_file_inode(vma->vm_file); | ||
| 1742 | struct block_device *bdev = I_BDEV(bd_inode); | ||
| 1743 | |||
| 1744 | inode_lock(bd_inode); | ||
| 1745 | bdev->bd_map_count++; | ||
| 1746 | inode_unlock(bd_inode); | ||
| 1747 | } | ||
| 1748 | |||
| 1749 | static void blkdev_vm_close(struct vm_area_struct *vma) | ||
| 1750 | { | ||
| 1751 | struct inode *bd_inode = bdev_file_inode(vma->vm_file); | ||
| 1752 | struct block_device *bdev = I_BDEV(bd_inode); | ||
| 1753 | |||
| 1754 | inode_lock(bd_inode); | ||
| 1755 | bdev->bd_map_count--; | ||
| 1756 | inode_unlock(bd_inode); | ||
| 1757 | } | ||
| 1758 | |||
| 1759 | static const struct vm_operations_struct blkdev_dax_vm_ops = { | 1739 | static const struct vm_operations_struct blkdev_dax_vm_ops = { |
| 1760 | .open = blkdev_vm_open, | ||
| 1761 | .close = blkdev_vm_close, | ||
| 1762 | .fault = blkdev_dax_fault, | 1740 | .fault = blkdev_dax_fault, |
| 1763 | .pmd_fault = blkdev_dax_pmd_fault, | 1741 | .pmd_fault = blkdev_dax_pmd_fault, |
| 1764 | .pfn_mkwrite = blkdev_dax_fault, | 1742 | .pfn_mkwrite = blkdev_dax_fault, |
| 1765 | }; | 1743 | }; |
| 1766 | 1744 | ||
| 1767 | static const struct vm_operations_struct blkdev_default_vm_ops = { | 1745 | static const struct vm_operations_struct blkdev_default_vm_ops = { |
| 1768 | .open = blkdev_vm_open, | ||
| 1769 | .close = blkdev_vm_close, | ||
| 1770 | .fault = filemap_fault, | 1746 | .fault = filemap_fault, |
| 1771 | .map_pages = filemap_map_pages, | 1747 | .map_pages = filemap_map_pages, |
| 1772 | }; | 1748 | }; |
| @@ -1774,18 +1750,14 @@ static const struct vm_operations_struct blkdev_default_vm_ops = { | |||
| 1774 | static int blkdev_mmap(struct file *file, struct vm_area_struct *vma) | 1750 | static int blkdev_mmap(struct file *file, struct vm_area_struct *vma) |
| 1775 | { | 1751 | { |
| 1776 | struct inode *bd_inode = bdev_file_inode(file); | 1752 | struct inode *bd_inode = bdev_file_inode(file); |
| 1777 | struct block_device *bdev = I_BDEV(bd_inode); | ||
| 1778 | 1753 | ||
| 1779 | file_accessed(file); | 1754 | file_accessed(file); |
| 1780 | inode_lock(bd_inode); | ||
| 1781 | bdev->bd_map_count++; | ||
| 1782 | if (IS_DAX(bd_inode)) { | 1755 | if (IS_DAX(bd_inode)) { |
| 1783 | vma->vm_ops = &blkdev_dax_vm_ops; | 1756 | vma->vm_ops = &blkdev_dax_vm_ops; |
| 1784 | vma->vm_flags |= VM_MIXEDMAP | VM_HUGEPAGE; | 1757 | vma->vm_flags |= VM_MIXEDMAP | VM_HUGEPAGE; |
| 1785 | } else { | 1758 | } else { |
| 1786 | vma->vm_ops = &blkdev_default_vm_ops; | 1759 | vma->vm_ops = &blkdev_default_vm_ops; |
| 1787 | } | 1760 | } |
| 1788 | inode_unlock(bd_inode); | ||
| 1789 | 1761 | ||
| 1790 | return 0; | 1762 | return 0; |
| 1791 | } | 1763 | } |
diff --git a/include/linux/fs.h b/include/linux/fs.h index b10002d4a5f5..ae681002100a 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -484,9 +484,6 @@ struct block_device { | |||
| 484 | int bd_fsfreeze_count; | 484 | int bd_fsfreeze_count; |
| 485 | /* Mutex for freeze */ | 485 | /* Mutex for freeze */ |
| 486 | struct mutex bd_fsfreeze_mutex; | 486 | struct mutex bd_fsfreeze_mutex; |
| 487 | #ifdef CONFIG_FS_DAX | ||
| 488 | int bd_map_count; | ||
| 489 | #endif | ||
| 490 | }; | 487 | }; |
| 491 | 488 | ||
| 492 | /* | 489 | /* |
diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h index 41e0433b4a83..149bec83a907 100644 --- a/include/uapi/linux/fs.h +++ b/include/uapi/linux/fs.h | |||
| @@ -222,7 +222,6 @@ struct fsxattr { | |||
| 222 | #define BLKSECDISCARD _IO(0x12,125) | 222 | #define BLKSECDISCARD _IO(0x12,125) |
| 223 | #define BLKROTATIONAL _IO(0x12,126) | 223 | #define BLKROTATIONAL _IO(0x12,126) |
| 224 | #define BLKZEROOUT _IO(0x12,127) | 224 | #define BLKZEROOUT _IO(0x12,127) |
| 225 | #define BLKDAXSET _IO(0x12,128) | ||
| 226 | #define BLKDAXGET _IO(0x12,129) | 225 | #define BLKDAXGET _IO(0x12,129) |
| 227 | 226 | ||
| 228 | #define BMAP_IOCTL 1 /* obsolete - kept for compatibility */ | 227 | #define BMAP_IOCTL 1 /* obsolete - kept for compatibility */ |
