summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorChristoph Lameter <clameter@engr.sgi.com>2006-03-14 19:50:19 -0800
committerLinus Torvalds <torvalds@g5.osdl.org>2006-03-14 21:43:02 -0800
commit4983da07f1e2e8dc81cb9d640fbf35b899cdbdf2 (patch)
tree9c238114f029d1d22bc55f47e8d95ef7335c540d /fs
parente843e280cbe218fc8387339806d344708dee348a (diff)
downloadlinux-3.10-4983da07f1e2e8dc81cb9d640fbf35b899cdbdf2.tar.gz
linux-3.10-4983da07f1e2e8dc81cb9d640fbf35b899cdbdf2.tar.bz2
linux-3.10-4983da07f1e2e8dc81cb9d640fbf35b899cdbdf2.zip
[PATCH] page migration: fail if page is in a vma flagged VM_LOCKED
page migration currently simply retries a couple of times if try_to_unmap() fails without inspecting the return code. However, SWAP_FAIL indicates that the page is in a vma that has the VM_LOCKED flag set (if ignore_refs ==1). We can check for that return code and avoid retrying the migration. migrate_page_remove_references() now needs to return a reason why the failure occured. So switch migrate_page_remove_references to use -Exx style error messages. Signed-off-by: Christoph Lameter <clameter@sgi.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs')
-rw-r--r--fs/buffer.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/buffer.c b/fs/buffer.c
index 62cfd17dc5f..a9b39940200 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -3060,6 +3060,7 @@ int buffer_migrate_page(struct page *newpage, struct page *page)
{
struct address_space *mapping = page->mapping;
struct buffer_head *bh, *head;
+ int rc;
if (!mapping)
return -EAGAIN;
@@ -3069,8 +3070,9 @@ int buffer_migrate_page(struct page *newpage, struct page *page)
head = page_buffers(page);
- if (migrate_page_remove_references(newpage, page, 3))
- return -EAGAIN;
+ rc = migrate_page_remove_references(newpage, page, 3);
+ if (rc)
+ return rc;
bh = head;
do {