aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Wilcox <matthew.r.wilcox@intel.com>2015-02-16 18:59:12 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2015-02-16 20:56:03 -0500
commite748dcd095ddee50e7a7deda2e26247715318a2e (patch)
treefc76626987c4caa57a1511f671bc105a179d583e
parent95ec8daba310b44302d2977dd54b16886527b681 (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/Locking3
-rw-r--r--Documentation/filesystems/vfs.txt7
-rw-r--r--fs/exofs/inode.c1
-rw-r--r--fs/ext2/inode.c1
-rw-r--r--fs/ext2/xip.c45
-rw-r--r--fs/ext2/xip.h3
-rw-r--r--fs/open.c5
-rw-r--r--include/linux/fs.h2
-rw-r--r--include/linux/rmap.h2
-rw-r--r--mm/Makefile1
-rw-r--r--mm/fadvise.c6
-rw-r--r--mm/filemap_xip.c24
-rw-r--r--mm/madvise.c2
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
225releasepage: yes 223releasepage: yes
226freepage: yes 224freepage: yes
227direct_IO: 225direct_IO:
228get_xip_mem: maybe
229migratepage: yes (both) 226migratepage: yes (both)
230launder_page: yes 227launder_page: yes
231is_partially_uptodate: yes 228is_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
895const struct address_space_operations ext2_aops_xip = { 895const 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
16static 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
24static 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
45void ext2_xip_verify_sb(struct super_block *sb) 16void 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
58int 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}
15int 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
diff --git a/fs/open.c b/fs/open.c
index 813be037b412..a293c2020676 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -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,
198int try_to_unmap(struct page *, enum ttu_flags flags); 198int 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 */
203pte_t *__page_check_address(struct page *, struct mm_struct *, 203pte_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
55obj-$(CONFIG_KASAN) += kasan/ 55obj-$(CONFIG_KASAN) += kasan/
56obj-$(CONFIG_FAILSLAB) += failslab.o 56obj-$(CONFIG_FAILSLAB) += failslab.o
57obj-$(CONFIG_MEMORY_HOTPLUG) += memory_hotplug.o 57obj-$(CONFIG_MEMORY_HOTPLUG) += memory_hotplug.o
58obj-$(CONFIG_FS_XIP) += filemap_xip.o
59obj-$(CONFIG_MIGRATION) += migrate.o 58obj-$(CONFIG_MIGRATION) += migrate.o
60obj-$(CONFIG_QUICKLIST) += quicklist.o 59obj-$(CONFIG_QUICKLIST) += quicklist.o
61obj-$(CONFIG_TRANSPARENT_HUGEPAGE) += huge_memory.o 60obj-$(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 @@
28SYSCALL_DEFINE4(fadvise64_64, int, fd, loff_t, offset, loff_t, len, int, advice) 28SYSCALL_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 }