aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--block/ioctl.c38
-rw-r--r--fs/block_dev.c28
-rw-r--r--include/linux/fs.h3
-rw-r--r--include/uapi/linux/fs.h1
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
438static 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
467static 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
475static int blkdev_flushbuf(struct block_device *bdev, fmode_t mode, 439static 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
1739static 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
1749static 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
1759static const struct vm_operations_struct blkdev_dax_vm_ops = { 1739static 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
1767static const struct vm_operations_struct blkdev_default_vm_ops = { 1745static 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 = {
1774static int blkdev_mmap(struct file *file, struct vm_area_struct *vma) 1750static 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 */