From: Christoph Lameter <clameter@sgi.com>
To: linux-kernel@vger.kernel.org
Cc: Christoph Lameter <clameter@sgi.com>, lhms-devel@lists.sourceforge.net
Subject: [PATCH 1/8] Direct Migration V3: Swap migration patchset fixes
Date: Fri, 11 Nov 2005 14:36:37 -0800 (PST) [thread overview]
Message-ID: <20051111223637.21716.94084.sendpatchset@schroedinger.engr.sgi.com> (raw)
In-Reply-To: <20051111223632.21716.49021.sendpatchset@schroedinger.engr.sgi.com>
Fixes to swap migration patch V5
- Fix comment for isolate_lru_page().
- migrate_page_add: check for mapping == NULL
- check_range: Its okay if the first vma has the flag VM_RESERVED set if the
MPOL_MF_DISCONTIG_OK flag was specified by the caller.
- Change the permission check to use comparisons instead of XORs.
Revise the comments.
- Only include move_to_lru and putback_lru_pages() if CONFIG_MIGRATION is set.
(this may be the 0.5k codesize that Andrew was worrying about)
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Index: linux-2.6.14-mm2/mm/vmscan.c
===================================================================
--- linux-2.6.14-mm2.orig/mm/vmscan.c 2005-11-11 12:26:58.000000000 -0800
+++ linux-2.6.14-mm2/mm/vmscan.c 2005-11-11 12:42:13.000000000 -0800
@@ -572,6 +572,39 @@ keep:
}
#ifdef CONFIG_MIGRATION
+static inline void move_to_lru(struct page *page)
+{
+ list_del(&page->lru);
+ if (PageActive(page)) {
+ /*
+ * lru_cache_add_active checks that
+ * the PG_active bit is off.
+ */
+ ClearPageActive(page);
+ lru_cache_add_active(page);
+ } else
+ lru_cache_add(page);
+ put_page(page);
+}
+
+/*
+ * Add isolated pages on the list back to the LRU
+ *
+ * returns the number of pages put back.
+ */
+int putback_lru_pages(struct list_head *l)
+{
+ struct page *page;
+ struct page *page2;
+ int count = 0;
+
+ list_for_each_entry_safe(page, page2, l, lru) {
+ move_to_lru(page);
+ count++;
+ }
+ return count;
+}
+
/*
* swapout a single page
* page is locked upon entry, unlocked on exit
@@ -782,7 +815,7 @@ static void lru_add_drain_per_cpu(void *
* Result:
* 0 = page not on LRU list
* 1 = page removed from LRU list and added to the specified list.
- * -1 = page is being freed elsewhere.
+ * -ENOENT = page is being freed elsewhere.
*/
int isolate_lru_page(struct page *page)
{
@@ -868,39 +901,6 @@ done:
pagevec_release(&pvec);
}
-static inline void move_to_lru(struct page *page)
-{
- list_del(&page->lru);
- if (PageActive(page)) {
- /*
- * lru_cache_add_active checks that
- * the PG_active bit is off.
- */
- ClearPageActive(page);
- lru_cache_add_active(page);
- } else
- lru_cache_add(page);
- put_page(page);
-}
-
-/*
- * Add isolated pages on the list back to the LRU
- *
- * returns the number of pages put back.
- */
-int putback_lru_pages(struct list_head *l)
-{
- struct page *page;
- struct page *page2;
- int count = 0;
-
- list_for_each_entry_safe(page, page2, l, lru) {
- move_to_lru(page);
- count++;
- }
- return count;
-}
-
/*
* This moves pages from the active list to the inactive list.
*
Index: linux-2.6.14-mm2/mm/mempolicy.c
===================================================================
--- linux-2.6.14-mm2.orig/mm/mempolicy.c 2005-11-11 12:29:04.000000000 -0800
+++ linux-2.6.14-mm2/mm/mempolicy.c 2005-11-11 12:29:06.000000000 -0800
@@ -217,6 +217,7 @@ static void migrate_page_add(struct vm_a
* Avoid migrating a page that is shared by others and not writable.
*/
if ((flags & MPOL_MF_MOVE_ALL) ||
+ !page->mapping ||
PageAnon(page) ||
mapping_writably_mapped(page->mapping) ||
single_mm_mapping(vma->vm_mm, page->mapping)
@@ -359,7 +360,8 @@ check_range(struct mm_struct *mm, unsign
first = find_vma(mm, start);
if (!first)
return ERR_PTR(-EFAULT);
- if (first->vm_flags & VM_RESERVED)
+ if (first->vm_flags & VM_RESERVED &&
+ !(flags & MPOL_MF_DISCONTIG_OK))
return ERR_PTR(-EACCES);
prev = NULL;
for (vma = first; vma && vma->vm_start < end; vma = vma->vm_next) {
@@ -790,18 +792,13 @@ asmlinkage long sys_migrate_pages(pid_t
return -EINVAL;
/*
- * We only allow a process to move the pages of another
- * if the process issuing sys_migrate has the right to send a kill
- * signal to the process to be moved. Moving another processes
- * memory may impact the performance of that process. If the
- * process issuing sys_migrate_pages has the right to kill the
- * target process then obviously that process has the right to
- * impact the performance of the target process.
- *
- * The permission check was taken from check_kill_permission()
+ * Check if this process has the right to modify the specified
+ * process. The right exists if the process has administrative
+ * capabilities, superuser priviledges or the same
+ * userid as the target process.
*/
- if ((current->euid ^ task->suid) && (current->euid ^ task->uid) &&
- (current->uid ^ task->suid) && (current->uid ^ task->uid) &&
+ if ((current->euid != task->suid) && (current->euid != task->uid) &&
+ (current->uid != task->suid) && (current->uid != task->uid) &&
!capable(CAP_SYS_ADMIN)) {
err = -EPERM;
goto out;
next prev parent reply other threads:[~2005-11-11 22:36 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-11 22:36 [PATCH 0/8] Direct Migration V3: Overview Christoph Lameter
2005-11-11 22:36 ` Christoph Lameter [this message]
2005-11-11 22:36 ` [PATCH 2/8] Direct Migration V3: PageSwapCache checks Christoph Lameter
2005-11-11 22:36 ` [PATCH 3/8] Direct Migration V3: migrate_pages() extension Christoph Lameter
2005-11-11 22:36 ` [PATCH 4/8] Direct Migration V3: remove_from_swap() to remove swap ptes Christoph Lameter
2005-11-11 22:36 ` [PATCH 5/8] Direct Migration V3: upgrade MPOL_MF_MOVE and sys_migrate_pages() Christoph Lameter
2005-11-11 22:37 ` [PATCH 6/8] Direct Migration V3: Avoid writeback / page_migrate() method Christoph Lameter
2005-11-11 22:37 ` [PATCH 7/8] Direct Migration V3: add_to_swap() with additional gfp_t parameter Christoph Lameter
2005-11-11 22:37 ` [PATCH 8/8] Direct Migration V3: SWAP_REFERENCE for try_to_unmap() Christoph Lameter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20051111223637.21716.94084.sendpatchset@schroedinger.engr.sgi.com \
--to=clameter@sgi.com \
--cc=lhms-devel@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®