aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Piggin <npiggin@suse.de>2008-04-28 05:12:10 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-04-28 11:58:18 -0400
commit3c18ddd160d1fcd46d1131d9ad6c594dd8e9af99 (patch)
tree7307ba1ae4bdb99d1363eb59b1ebefcf5295c8ef
parent4d3d5b41a72b52555d43efbfc4ccde6ba6e5444f (diff)
mm: remove nopage
Nothing in the tree uses nopage any more. Remove support for it in the core mm code and documentation (and a few stray references to it in comments). Signed-off-by: Nick Piggin <npiggin@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--Documentation/feature-removal-schedule.txt9
-rw-r--r--Documentation/filesystems/Locking3
-rw-r--r--drivers/media/video/vino.c2
-rw-r--r--drivers/video/vermilion/vermilion.c5
-rw-r--r--fs/gfs2/ops_address.c2
-rw-r--r--include/linux/mm.h8
-rw-r--r--mm/memory.c22
-rw-r--r--mm/mincore.c2
-rw-r--r--mm/rmap.c1
9 files changed, 11 insertions, 43 deletions
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt
index 448729fcaeb1..599fe55bf297 100644
--- a/Documentation/feature-removal-schedule.txt
+++ b/Documentation/feature-removal-schedule.txt
@@ -128,15 +128,6 @@ Who: Arjan van de Ven <arjan@linux.intel.com>
128 128
129--------------------------- 129---------------------------
130 130
131What: vm_ops.nopage
132When: Soon, provided in-kernel callers have been converted
133Why: This interface is replaced by vm_ops.fault, but it has been around
134 forever, is used by a lot of drivers, and doesn't cost much to
135 maintain.
136Who: Nick Piggin <npiggin@suse.de>
137
138---------------------------
139
140What: PHYSDEVPATH, PHYSDEVBUS, PHYSDEVDRIVER in the uevent environment 131What: PHYSDEVPATH, PHYSDEVBUS, PHYSDEVDRIVER in the uevent environment
141When: October 2008 132When: October 2008
142Why: The stacking of class devices makes these values misleading and 133Why: The stacking of class devices makes these values misleading and
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking
index 42d4b30b1045..c2992bc54f2f 100644
--- a/Documentation/filesystems/Locking
+++ b/Documentation/filesystems/Locking
@@ -511,7 +511,6 @@ prototypes:
511 void (*open)(struct vm_area_struct*); 511 void (*open)(struct vm_area_struct*);
512 void (*close)(struct vm_area_struct*); 512 void (*close)(struct vm_area_struct*);
513 int (*fault)(struct vm_area_struct*, struct vm_fault *); 513 int (*fault)(struct vm_area_struct*, struct vm_fault *);
514 struct page *(*nopage)(struct vm_area_struct*, unsigned long, int *);
515 int (*page_mkwrite)(struct vm_area_struct *, struct page *); 514 int (*page_mkwrite)(struct vm_area_struct *, struct page *);
516 515
517locking rules: 516locking rules:
@@ -519,7 +518,6 @@ locking rules:
519open: no yes 518open: no yes
520close: no yes 519close: no yes
521fault: no yes 520fault: no yes
522nopage: no yes
523page_mkwrite: no yes no 521page_mkwrite: no yes no
524 522
525 ->page_mkwrite() is called when a previously read-only page is 523 ->page_mkwrite() is called when a previously read-only page is
@@ -537,4 +535,3 @@ NULL.
537 535
538ipc/shm.c::shm_delete() - may need BKL. 536ipc/shm.c::shm_delete() - may need BKL.
539->read() and ->write() in many drivers are (probably) missing BKL. 537->read() and ->write() in many drivers are (probably) missing BKL.
540drivers/sgi/char/graphics.c::sgi_graphics_nopage() - may need BKL.
diff --git a/drivers/media/video/vino.c b/drivers/media/video/vino.c
index d545c98dd5e7..01ea99c9bc1a 100644
--- a/drivers/media/video/vino.c
+++ b/drivers/media/video/vino.c
@@ -13,7 +13,7 @@
13/* 13/*
14 * TODO: 14 * TODO:
15 * - remove "mark pages reserved-hacks" from memory allocation code 15 * - remove "mark pages reserved-hacks" from memory allocation code
16 * and implement nopage() 16 * and implement fault()
17 * - check decimation, calculating and reporting image size when 17 * - check decimation, calculating and reporting image size when
18 * using decimation 18 * using decimation
19 * - implement read(), user mode buffers and overlay (?) 19 * - implement read(), user mode buffers and overlay (?)
diff --git a/drivers/video/vermilion/vermilion.c b/drivers/video/vermilion/vermilion.c
index 2aa71eb67c2b..c18f1884b550 100644
--- a/drivers/video/vermilion/vermilion.c
+++ b/drivers/video/vermilion/vermilion.c
@@ -112,8 +112,9 @@ static int vmlfb_alloc_vram_area(struct vram_area *va, unsigned max_order,
112 112
113 /* 113 /*
114 * It seems like __get_free_pages only ups the usage count 114 * It seems like __get_free_pages only ups the usage count
115 * of the first page. This doesn't work with nopage mapping, so 115 * of the first page. This doesn't work with fault mapping, so
116 * up the usage count once more. 116 * up the usage count once more (XXX: should use split_page or
117 * compound page).
117 */ 118 */
118 119
119 memset((void *)va->logical, 0x00, va->size); 120 memset((void *)va->logical, 0x00, va->size);
diff --git a/fs/gfs2/ops_address.c b/fs/gfs2/ops_address.c
index 90a04a6e3789..f55394e57cb2 100644
--- a/fs/gfs2/ops_address.c
+++ b/fs/gfs2/ops_address.c
@@ -438,7 +438,7 @@ static int stuffed_readpage(struct gfs2_inode *ip, struct page *page)
438 int error; 438 int error;
439 439
440 /* 440 /*
441 * Due to the order of unstuffing files and ->nopage(), we can be 441 * Due to the order of unstuffing files and ->fault(), we can be
442 * asked for a zero page in the case of a stuffed file being extended, 442 * asked for a zero page in the case of a stuffed file being extended,
443 * so we need to supply one here. It doesn't happen often. 443 * so we need to supply one here. It doesn't happen often.
444 */ 444 */
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 286d31521605..ca973359fe5f 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -164,8 +164,6 @@ struct vm_operations_struct {
164 void (*open)(struct vm_area_struct * area); 164 void (*open)(struct vm_area_struct * area);
165 void (*close)(struct vm_area_struct * area); 165 void (*close)(struct vm_area_struct * area);
166 int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf); 166 int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf);
167 struct page *(*nopage)(struct vm_area_struct *area,
168 unsigned long address, int *type);
169 unsigned long (*nopfn)(struct vm_area_struct *area, 167 unsigned long (*nopfn)(struct vm_area_struct *area,
170 unsigned long address); 168 unsigned long address);
171 169
@@ -649,12 +647,6 @@ static inline int page_mapped(struct page *page)
649} 647}
650 648
651/* 649/*
652 * Error return values for the *_nopage functions
653 */
654#define NOPAGE_SIGBUS (NULL)
655#define NOPAGE_OOM ((struct page *) (-1))
656
657/*
658 * Error return values for the *_nopfn functions 650 * Error return values for the *_nopfn functions
659 */ 651 */
660#define NOPFN_SIGBUS ((unsigned long) -1) 652#define NOPFN_SIGBUS ((unsigned long) -1)
diff --git a/mm/memory.c b/mm/memory.c
index 0d14d1e58a5f..46958fb97c2d 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -1057,8 +1057,7 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
1057 if (pages) 1057 if (pages)
1058 foll_flags |= FOLL_GET; 1058 foll_flags |= FOLL_GET;
1059 if (!write && !(vma->vm_flags & VM_LOCKED) && 1059 if (!write && !(vma->vm_flags & VM_LOCKED) &&
1060 (!vma->vm_ops || (!vma->vm_ops->nopage && 1060 (!vma->vm_ops || !vma->vm_ops->fault))
1061 !vma->vm_ops->fault)))
1062 foll_flags |= FOLL_ANON; 1061 foll_flags |= FOLL_ANON;
1063 1062
1064 do { 1063 do {
@@ -2199,20 +2198,9 @@ static int __do_fault(struct mm_struct *mm, struct vm_area_struct *vma,
2199 2198
2200 BUG_ON(vma->vm_flags & VM_PFNMAP); 2199 BUG_ON(vma->vm_flags & VM_PFNMAP);
2201 2200
2202 if (likely(vma->vm_ops->fault)) { 2201 ret = vma->vm_ops->fault(vma, &vmf);
2203 ret = vma->vm_ops->fault(vma, &vmf); 2202 if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE)))
2204 if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE))) 2203 return ret;
2205 return ret;
2206 } else {
2207 /* Legacy ->nopage path */
2208 ret = 0;
2209 vmf.page = vma->vm_ops->nopage(vma, address & PAGE_MASK, &ret);
2210 /* no page was available -- either SIGBUS or OOM */
2211 if (unlikely(vmf.page == NOPAGE_SIGBUS))
2212 return VM_FAULT_SIGBUS;
2213 else if (unlikely(vmf.page == NOPAGE_OOM))
2214 return VM_FAULT_OOM;
2215 }
2216 2204
2217 /* 2205 /*
2218 * For consistency in subsequent calls, make the faulted page always 2206 * For consistency in subsequent calls, make the faulted page always
@@ -2458,7 +2446,7 @@ static inline int handle_pte_fault(struct mm_struct *mm,
2458 if (!pte_present(entry)) { 2446 if (!pte_present(entry)) {
2459 if (pte_none(entry)) { 2447 if (pte_none(entry)) {
2460 if (vma->vm_ops) { 2448 if (vma->vm_ops) {
2461 if (vma->vm_ops->fault || vma->vm_ops->nopage) 2449 if (likely(vma->vm_ops->fault))
2462 return do_linear_fault(mm, vma, address, 2450 return do_linear_fault(mm, vma, address,
2463 pte, pmd, write_access, entry); 2451 pte, pmd, write_access, entry);
2464 if (unlikely(vma->vm_ops->nopfn)) 2452 if (unlikely(vma->vm_ops->nopfn))
diff --git a/mm/mincore.c b/mm/mincore.c
index 5efe0ded69b1..5178800bc129 100644
--- a/mm/mincore.c
+++ b/mm/mincore.c
@@ -33,7 +33,7 @@ static unsigned char mincore_page(struct address_space *mapping, pgoff_t pgoff)
33 * When tmpfs swaps out a page from a file, any process mapping that 33 * When tmpfs swaps out a page from a file, any process mapping that
34 * file will not get a swp_entry_t in its pte, but rather it is like 34 * file will not get a swp_entry_t in its pte, but rather it is like
35 * any other file mapping (ie. marked !present and faulted in with 35 * any other file mapping (ie. marked !present and faulted in with
36 * tmpfs's .nopage). So swapped out tmpfs mappings are tested here. 36 * tmpfs's .fault). So swapped out tmpfs mappings are tested here.
37 * 37 *
38 * However when tmpfs moves the page from pagecache and into swapcache, 38 * However when tmpfs moves the page from pagecache and into swapcache,
39 * it is still in core, but the find_get_page below won't find it. 39 * it is still in core, but the find_get_page below won't find it.
diff --git a/mm/rmap.c b/mm/rmap.c
index e9bb6b1093f6..bf0a5b7cfb8e 100644
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -662,7 +662,6 @@ void page_remove_rmap(struct page *page, struct vm_area_struct *vma)
662 printk (KERN_EMERG " page->mapping = %p\n", page->mapping); 662 printk (KERN_EMERG " page->mapping = %p\n", page->mapping);
663 print_symbol (KERN_EMERG " vma->vm_ops = %s\n", (unsigned long)vma->vm_ops); 663 print_symbol (KERN_EMERG " vma->vm_ops = %s\n", (unsigned long)vma->vm_ops);
664 if (vma->vm_ops) { 664 if (vma->vm_ops) {
665 print_symbol (KERN_EMERG " vma->vm_ops->nopage = %s\n", (unsigned long)vma->vm_ops->nopage);
666 print_symbol (KERN_EMERG " vma->vm_ops->fault = %s\n", (unsigned long)vma->vm_ops->fault); 665 print_symbol (KERN_EMERG " vma->vm_ops->fault = %s\n", (unsigned long)vma->vm_ops->fault);
667 } 666 }
668 if (vma->vm_file && vma->vm_file->f_op) 667 if (vma->vm_file && vma->vm_file->f_op)