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