diff options
author | Matthew Wilcox <matthew.r.wilcox@intel.com> | 2015-02-16 18:59:12 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-16 20:56:03 -0500 |
commit | e748dcd095ddee50e7a7deda2e26247715318a2e (patch) | |
tree | fc76626987c4caa57a1511f671bc105a179d583e | |
parent | 95ec8daba310b44302d2977dd54b16886527b681 (diff) |
vfs: remove get_xip_mem
All callers of get_xip_mem() are now gone. Remove checks for it,
initialisers of it, documentation of it and the only implementation of it.
Also remove mm/filemap_xip.c as it is now empty. Also remove
documentation of the long-gone get_xip_page().
Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
Cc: Andreas Dilger <andreas.dilger@intel.com>
Cc: Boaz Harrosh <boaz@plexistor.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Randy Dunlap <rdunlap@infradead.org>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
Cc: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | Documentation/filesystems/Locking | 3 | ||||
-rw-r--r-- | Documentation/filesystems/vfs.txt | 7 | ||||
-rw-r--r-- | fs/exofs/inode.c | 1 | ||||
-rw-r--r-- | fs/ext2/inode.c | 1 | ||||
-rw-r--r-- | fs/ext2/xip.c | 45 | ||||
-rw-r--r-- | fs/ext2/xip.h | 3 | ||||
-rw-r--r-- | fs/open.c | 5 | ||||
-rw-r--r-- | include/linux/fs.h | 2 | ||||
-rw-r--r-- | include/linux/rmap.h | 2 | ||||
-rw-r--r-- | mm/Makefile | 1 | ||||
-rw-r--r-- | mm/fadvise.c | 6 | ||||
-rw-r--r-- | mm/filemap_xip.c | 24 | ||||
-rw-r--r-- | mm/madvise.c | 2 |
13 files changed, 7 insertions, 95 deletions
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index b30753cbf431..2ca3d17eee56 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking | |||
@@ -199,8 +199,6 @@ prototypes: | |||
199 | int (*releasepage) (struct page *, int); | 199 | int (*releasepage) (struct page *, int); |
200 | void (*freepage)(struct page *); | 200 | void (*freepage)(struct page *); |
201 | int (*direct_IO)(int, struct kiocb *, struct iov_iter *iter, loff_t offset); | 201 | int (*direct_IO)(int, struct kiocb *, struct iov_iter *iter, loff_t offset); |
202 | int (*get_xip_mem)(struct address_space *, pgoff_t, int, void **, | ||
203 | unsigned long *); | ||
204 | int (*migratepage)(struct address_space *, struct page *, struct page *); | 202 | int (*migratepage)(struct address_space *, struct page *, struct page *); |
205 | int (*launder_page)(struct page *); | 203 | int (*launder_page)(struct page *); |
206 | int (*is_partially_uptodate)(struct page *, unsigned long, unsigned long); | 204 | int (*is_partially_uptodate)(struct page *, unsigned long, unsigned long); |
@@ -225,7 +223,6 @@ invalidatepage: yes | |||
225 | releasepage: yes | 223 | releasepage: yes |
226 | freepage: yes | 224 | freepage: yes |
227 | direct_IO: | 225 | direct_IO: |
228 | get_xip_mem: maybe | ||
229 | migratepage: yes (both) | 226 | migratepage: yes (both) |
230 | launder_page: yes | 227 | launder_page: yes |
231 | is_partially_uptodate: yes | 228 | is_partially_uptodate: yes |
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index 43ce0507ee25..966b22829f3b 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt | |||
@@ -591,8 +591,6 @@ struct address_space_operations { | |||
591 | int (*releasepage) (struct page *, int); | 591 | int (*releasepage) (struct page *, int); |
592 | void (*freepage)(struct page *); | 592 | void (*freepage)(struct page *); |
593 | ssize_t (*direct_IO)(int, struct kiocb *, struct iov_iter *iter, loff_t offset); | 593 | ssize_t (*direct_IO)(int, struct kiocb *, struct iov_iter *iter, loff_t offset); |
594 | struct page* (*get_xip_page)(struct address_space *, sector_t, | ||
595 | int); | ||
596 | /* migrate the contents of a page to the specified target */ | 594 | /* migrate the contents of a page to the specified target */ |
597 | int (*migratepage) (struct page *, struct page *); | 595 | int (*migratepage) (struct page *, struct page *); |
598 | int (*launder_page) (struct page *); | 596 | int (*launder_page) (struct page *); |
@@ -748,11 +746,6 @@ struct address_space_operations { | |||
748 | and transfer data directly between the storage and the | 746 | and transfer data directly between the storage and the |
749 | application's address space. | 747 | application's address space. |
750 | 748 | ||
751 | get_xip_page: called by the VM to translate a block number to a page. | ||
752 | The page is valid until the corresponding filesystem is unmounted. | ||
753 | Filesystems that want to use execute-in-place (XIP) need to implement | ||
754 | it. An example implementation can be found in fs/ext2/xip.c. | ||
755 | |||
756 | migrate_page: This is used to compact the physical memory usage. | 749 | migrate_page: This is used to compact the physical memory usage. |
757 | If the VM wants to relocate a page (maybe off a memory card | 750 | If the VM wants to relocate a page (maybe off a memory card |
758 | that is signalling imminent failure) it will pass a new page | 751 | that is signalling imminent failure) it will pass a new page |
diff --git a/fs/exofs/inode.c b/fs/exofs/inode.c index 6fc91df99ff8..a198e94813fe 100644 --- a/fs/exofs/inode.c +++ b/fs/exofs/inode.c | |||
@@ -985,7 +985,6 @@ const struct address_space_operations exofs_aops = { | |||
985 | .direct_IO = exofs_direct_IO, | 985 | .direct_IO = exofs_direct_IO, |
986 | 986 | ||
987 | /* With these NULL has special meaning or default is not exported */ | 987 | /* With these NULL has special meaning or default is not exported */ |
988 | .get_xip_mem = NULL, | ||
989 | .migratepage = NULL, | 988 | .migratepage = NULL, |
990 | .launder_page = NULL, | 989 | .launder_page = NULL, |
991 | .is_partially_uptodate = NULL, | 990 | .is_partially_uptodate = NULL, |
diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c index 5ac0a3461b3c..59d6c7d43740 100644 --- a/fs/ext2/inode.c +++ b/fs/ext2/inode.c | |||
@@ -894,7 +894,6 @@ const struct address_space_operations ext2_aops = { | |||
894 | 894 | ||
895 | const struct address_space_operations ext2_aops_xip = { | 895 | const struct address_space_operations ext2_aops_xip = { |
896 | .bmap = ext2_bmap, | 896 | .bmap = ext2_bmap, |
897 | .get_xip_mem = ext2_get_xip_mem, | ||
898 | .direct_IO = ext2_direct_IO, | 897 | .direct_IO = ext2_direct_IO, |
899 | }; | 898 | }; |
900 | 899 | ||
diff --git a/fs/ext2/xip.c b/fs/ext2/xip.c index 8cfca3a4cd58..132d4daf98c4 100644 --- a/fs/ext2/xip.c +++ b/fs/ext2/xip.c | |||
@@ -13,35 +13,6 @@ | |||
13 | #include "ext2.h" | 13 | #include "ext2.h" |
14 | #include "xip.h" | 14 | #include "xip.h" |
15 | 15 | ||
16 | static inline long __inode_direct_access(struct inode *inode, sector_t block, | ||
17 | void **kaddr, unsigned long *pfn, long size) | ||
18 | { | ||
19 | struct block_device *bdev = inode->i_sb->s_bdev; | ||
20 | sector_t sector = block * (PAGE_SIZE / 512); | ||
21 | return bdev_direct_access(bdev, sector, kaddr, pfn, size); | ||
22 | } | ||
23 | |||
24 | static inline int | ||
25 | __ext2_get_block(struct inode *inode, pgoff_t pgoff, int create, | ||
26 | sector_t *result) | ||
27 | { | ||
28 | struct buffer_head tmp; | ||
29 | int rc; | ||
30 | |||
31 | memset(&tmp, 0, sizeof(struct buffer_head)); | ||
32 | tmp.b_size = 1 << inode->i_blkbits; | ||
33 | rc = ext2_get_block(inode, pgoff, &tmp, create); | ||
34 | *result = tmp.b_blocknr; | ||
35 | |||
36 | /* did we get a sparse block (hole in the file)? */ | ||
37 | if (!tmp.b_blocknr && !rc) { | ||
38 | BUG_ON(create); | ||
39 | rc = -ENODATA; | ||
40 | } | ||
41 | |||
42 | return rc; | ||
43 | } | ||
44 | |||
45 | void ext2_xip_verify_sb(struct super_block *sb) | 16 | void ext2_xip_verify_sb(struct super_block *sb) |
46 | { | 17 | { |
47 | struct ext2_sb_info *sbi = EXT2_SB(sb); | 18 | struct ext2_sb_info *sbi = EXT2_SB(sb); |
@@ -54,19 +25,3 @@ void ext2_xip_verify_sb(struct super_block *sb) | |||
54 | "not supported by bdev"); | 25 | "not supported by bdev"); |
55 | } | 26 | } |
56 | } | 27 | } |
57 | |||
58 | int ext2_get_xip_mem(struct address_space *mapping, pgoff_t pgoff, int create, | ||
59 | void **kmem, unsigned long *pfn) | ||
60 | { | ||
61 | long rc; | ||
62 | sector_t block; | ||
63 | |||
64 | /* first, retrieve the sector number */ | ||
65 | rc = __ext2_get_block(mapping->host, pgoff, create, &block); | ||
66 | if (rc) | ||
67 | return rc; | ||
68 | |||
69 | /* retrieve address of the target data */ | ||
70 | rc = __inode_direct_access(mapping->host, block, kmem, pfn, PAGE_SIZE); | ||
71 | return (rc < 0) ? rc : 0; | ||
72 | } | ||
diff --git a/fs/ext2/xip.h b/fs/ext2/xip.h index b2592f2f3c9d..e7b9f0a2cc54 100644 --- a/fs/ext2/xip.h +++ b/fs/ext2/xip.h | |||
@@ -12,10 +12,7 @@ static inline int ext2_use_xip (struct super_block *sb) | |||
12 | struct ext2_sb_info *sbi = EXT2_SB(sb); | 12 | struct ext2_sb_info *sbi = EXT2_SB(sb); |
13 | return (sbi->s_mount_opt & EXT2_MOUNT_XIP); | 13 | return (sbi->s_mount_opt & EXT2_MOUNT_XIP); |
14 | } | 14 | } |
15 | int ext2_get_xip_mem(struct address_space *, pgoff_t, int, | ||
16 | void **, unsigned long *); | ||
17 | #else | 15 | #else |
18 | #define ext2_xip_verify_sb(sb) do { } while (0) | 16 | #define ext2_xip_verify_sb(sb) do { } while (0) |
19 | #define ext2_use_xip(sb) 0 | 17 | #define ext2_use_xip(sb) 0 |
20 | #define ext2_get_xip_mem NULL | ||
21 | #endif | 18 | #endif |
@@ -667,11 +667,8 @@ int open_check_o_direct(struct file *f) | |||
667 | { | 667 | { |
668 | /* NB: we're sure to have correct a_ops only after f_op->open */ | 668 | /* NB: we're sure to have correct a_ops only after f_op->open */ |
669 | if (f->f_flags & O_DIRECT) { | 669 | if (f->f_flags & O_DIRECT) { |
670 | if (!f->f_mapping->a_ops || | 670 | if (!f->f_mapping->a_ops || !f->f_mapping->a_ops->direct_IO) |
671 | ((!f->f_mapping->a_ops->direct_IO) && | ||
672 | (!f->f_mapping->a_ops->get_xip_mem))) { | ||
673 | return -EINVAL; | 671 | return -EINVAL; |
674 | } | ||
675 | } | 672 | } |
676 | return 0; | 673 | return 0; |
677 | } | 674 | } |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 2c8f9055af38..9772d655f444 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -362,8 +362,6 @@ struct address_space_operations { | |||
362 | int (*releasepage) (struct page *, gfp_t); | 362 | int (*releasepage) (struct page *, gfp_t); |
363 | void (*freepage)(struct page *); | 363 | void (*freepage)(struct page *); |
364 | ssize_t (*direct_IO)(int, struct kiocb *, struct iov_iter *iter, loff_t offset); | 364 | ssize_t (*direct_IO)(int, struct kiocb *, struct iov_iter *iter, loff_t offset); |
365 | int (*get_xip_mem)(struct address_space *, pgoff_t, int, | ||
366 | void **, unsigned long *); | ||
367 | /* | 365 | /* |
368 | * migrate the contents of a page to the specified target. If | 366 | * migrate the contents of a page to the specified target. If |
369 | * migrate_mode is MIGRATE_ASYNC, it must not block. | 367 | * migrate_mode is MIGRATE_ASYNC, it must not block. |
diff --git a/include/linux/rmap.h b/include/linux/rmap.h index b38f559130d5..c4c559a45dc8 100644 --- a/include/linux/rmap.h +++ b/include/linux/rmap.h | |||
@@ -198,7 +198,7 @@ int page_referenced(struct page *, int is_locked, | |||
198 | int try_to_unmap(struct page *, enum ttu_flags flags); | 198 | int try_to_unmap(struct page *, enum ttu_flags flags); |
199 | 199 | ||
200 | /* | 200 | /* |
201 | * Called from mm/filemap_xip.c to unmap empty zero page | 201 | * Used by uprobes to replace a userspace page safely |
202 | */ | 202 | */ |
203 | pte_t *__page_check_address(struct page *, struct mm_struct *, | 203 | pte_t *__page_check_address(struct page *, struct mm_struct *, |
204 | unsigned long, spinlock_t **, int); | 204 | unsigned long, spinlock_t **, int); |
diff --git a/mm/Makefile b/mm/Makefile index 088c68e9ec35..3c1caa2693bd 100644 --- a/mm/Makefile +++ b/mm/Makefile | |||
@@ -55,7 +55,6 @@ obj-$(CONFIG_KMEMCHECK) += kmemcheck.o | |||
55 | obj-$(CONFIG_KASAN) += kasan/ | 55 | obj-$(CONFIG_KASAN) += kasan/ |
56 | obj-$(CONFIG_FAILSLAB) += failslab.o | 56 | obj-$(CONFIG_FAILSLAB) += failslab.o |
57 | obj-$(CONFIG_MEMORY_HOTPLUG) += memory_hotplug.o | 57 | obj-$(CONFIG_MEMORY_HOTPLUG) += memory_hotplug.o |
58 | obj-$(CONFIG_FS_XIP) += filemap_xip.o | ||
59 | obj-$(CONFIG_MIGRATION) += migrate.o | 58 | obj-$(CONFIG_MIGRATION) += migrate.o |
60 | obj-$(CONFIG_QUICKLIST) += quicklist.o | 59 | obj-$(CONFIG_QUICKLIST) += quicklist.o |
61 | obj-$(CONFIG_TRANSPARENT_HUGEPAGE) += huge_memory.o | 60 | obj-$(CONFIG_TRANSPARENT_HUGEPAGE) += huge_memory.o |
diff --git a/mm/fadvise.c b/mm/fadvise.c index fac23ecf8d72..4a3907cf79f8 100644 --- a/mm/fadvise.c +++ b/mm/fadvise.c | |||
@@ -28,6 +28,7 @@ | |||
28 | SYSCALL_DEFINE4(fadvise64_64, int, fd, loff_t, offset, loff_t, len, int, advice) | 28 | SYSCALL_DEFINE4(fadvise64_64, int, fd, loff_t, offset, loff_t, len, int, advice) |
29 | { | 29 | { |
30 | struct fd f = fdget(fd); | 30 | struct fd f = fdget(fd); |
31 | struct inode *inode; | ||
31 | struct address_space *mapping; | 32 | struct address_space *mapping; |
32 | struct backing_dev_info *bdi; | 33 | struct backing_dev_info *bdi; |
33 | loff_t endbyte; /* inclusive */ | 34 | loff_t endbyte; /* inclusive */ |
@@ -39,7 +40,8 @@ SYSCALL_DEFINE4(fadvise64_64, int, fd, loff_t, offset, loff_t, len, int, advice) | |||
39 | if (!f.file) | 40 | if (!f.file) |
40 | return -EBADF; | 41 | return -EBADF; |
41 | 42 | ||
42 | if (S_ISFIFO(file_inode(f.file)->i_mode)) { | 43 | inode = file_inode(f.file); |
44 | if (S_ISFIFO(inode->i_mode)) { | ||
43 | ret = -ESPIPE; | 45 | ret = -ESPIPE; |
44 | goto out; | 46 | goto out; |
45 | } | 47 | } |
@@ -50,7 +52,7 @@ SYSCALL_DEFINE4(fadvise64_64, int, fd, loff_t, offset, loff_t, len, int, advice) | |||
50 | goto out; | 52 | goto out; |
51 | } | 53 | } |
52 | 54 | ||
53 | if (mapping->a_ops->get_xip_mem) { | 55 | if (IS_DAX(inode)) { |
54 | switch (advice) { | 56 | switch (advice) { |
55 | case POSIX_FADV_NORMAL: | 57 | case POSIX_FADV_NORMAL: |
56 | case POSIX_FADV_RANDOM: | 58 | case POSIX_FADV_RANDOM: |
diff --git a/mm/filemap_xip.c b/mm/filemap_xip.c deleted file mode 100644 index 8e3f99b61959..000000000000 --- a/mm/filemap_xip.c +++ /dev/null | |||
@@ -1,24 +0,0 @@ | |||
1 | /* | ||
2 | * linux/mm/filemap_xip.c | ||
3 | * | ||
4 | * Copyright (C) 2005 IBM Corporation | ||
5 | * Author: Carsten Otte <cotte@de.ibm.com> | ||
6 | * | ||
7 | * derived from linux/mm/filemap.c - Copyright (C) Linus Torvalds | ||
8 | * | ||
9 | */ | ||
10 | |||
11 | #include <linux/fs.h> | ||
12 | #include <linux/backing-dev.h> | ||
13 | #include <linux/pagemap.h> | ||
14 | #include <linux/export.h> | ||
15 | #include <linux/uio.h> | ||
16 | #include <linux/rmap.h> | ||
17 | #include <linux/mmu_notifier.h> | ||
18 | #include <linux/sched.h> | ||
19 | #include <linux/seqlock.h> | ||
20 | #include <linux/mutex.h> | ||
21 | #include <linux/gfp.h> | ||
22 | #include <asm/tlbflush.h> | ||
23 | #include <asm/io.h> | ||
24 | |||
diff --git a/mm/madvise.c b/mm/madvise.c index 1077cbdc8b52..d551475517bf 100644 --- a/mm/madvise.c +++ b/mm/madvise.c | |||
@@ -239,7 +239,7 @@ static long madvise_willneed(struct vm_area_struct *vma, | |||
239 | return -EBADF; | 239 | return -EBADF; |
240 | #endif | 240 | #endif |
241 | 241 | ||
242 | if (file->f_mapping->a_ops->get_xip_mem) { | 242 | if (IS_DAX(file_inode(file))) { |
243 | /* no bad return value, but ignore advice */ | 243 | /* no bad return value, but ignore advice */ |
244 | return 0; | 244 | return 0; |
245 | } | 245 | } |