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 | ||
