diff options
| author | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2010-02-24 14:31:04 -0500 |
|---|---|---|
| committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2010-02-24 14:33:45 -0500 |
| commit | 109d28152b6e9d5de64cd23e3bc08885ccb3d1ef (patch) | |
| tree | b7b8863faa05254781acfb85cc41da3eef467c6b /mm/migrate.c | |
| parent | 168cf9af699e87d5a6f44b684583714ecabb8e71 (diff) | |
| parent | 60b341b778cc2929df16c0a504c91621b3c6a4ad (diff) | |
Merge tag 'v2.6.33' for its firewire changes since last branch point
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'mm/migrate.c')
| -rw-r--r-- | mm/migrate.c | 39 |
1 files changed, 18 insertions, 21 deletions
diff --git a/mm/migrate.c b/mm/migrate.c index efddbf0926b2..880bd592d38e 100644 --- a/mm/migrate.c +++ b/mm/migrate.c | |||
| @@ -912,6 +912,9 @@ static int do_pages_move(struct mm_struct *mm, struct task_struct *task, | |||
| 912 | goto out_pm; | 912 | goto out_pm; |
| 913 | 913 | ||
| 914 | err = -ENODEV; | 914 | err = -ENODEV; |
| 915 | if (node < 0 || node >= MAX_NUMNODES) | ||
| 916 | goto out_pm; | ||
| 917 | |||
| 915 | if (!node_state(node, N_HIGH_MEMORY)) | 918 | if (!node_state(node, N_HIGH_MEMORY)) |
| 916 | goto out_pm; | 919 | goto out_pm; |
| 917 | 920 | ||
| @@ -999,33 +1002,27 @@ static int do_pages_stat(struct mm_struct *mm, unsigned long nr_pages, | |||
| 999 | #define DO_PAGES_STAT_CHUNK_NR 16 | 1002 | #define DO_PAGES_STAT_CHUNK_NR 16 |
| 1000 | const void __user *chunk_pages[DO_PAGES_STAT_CHUNK_NR]; | 1003 | const void __user *chunk_pages[DO_PAGES_STAT_CHUNK_NR]; |
| 1001 | int chunk_status[DO_PAGES_STAT_CHUNK_NR]; | 1004 | int chunk_status[DO_PAGES_STAT_CHUNK_NR]; |
| 1002 | unsigned long i, chunk_nr = DO_PAGES_STAT_CHUNK_NR; | ||
| 1003 | int err; | ||
| 1004 | 1005 | ||
| 1005 | for (i = 0; i < nr_pages; i += chunk_nr) { | 1006 | while (nr_pages) { |
| 1006 | if (chunk_nr > nr_pages - i) | 1007 | unsigned long chunk_nr; |
| 1007 | chunk_nr = nr_pages - i; | ||
| 1008 | 1008 | ||
| 1009 | err = copy_from_user(chunk_pages, &pages[i], | 1009 | chunk_nr = nr_pages; |
| 1010 | chunk_nr * sizeof(*chunk_pages)); | 1010 | if (chunk_nr > DO_PAGES_STAT_CHUNK_NR) |
| 1011 | if (err) { | 1011 | chunk_nr = DO_PAGES_STAT_CHUNK_NR; |
| 1012 | err = -EFAULT; | 1012 | |
| 1013 | goto out; | 1013 | if (copy_from_user(chunk_pages, pages, chunk_nr * sizeof(*chunk_pages))) |
| 1014 | } | 1014 | break; |
| 1015 | 1015 | ||
| 1016 | do_pages_stat_array(mm, chunk_nr, chunk_pages, chunk_status); | 1016 | do_pages_stat_array(mm, chunk_nr, chunk_pages, chunk_status); |
| 1017 | 1017 | ||
| 1018 | err = copy_to_user(&status[i], chunk_status, | 1018 | if (copy_to_user(status, chunk_status, chunk_nr * sizeof(*status))) |
| 1019 | chunk_nr * sizeof(*chunk_status)); | 1019 | break; |
| 1020 | if (err) { | ||
| 1021 | err = -EFAULT; | ||
| 1022 | goto out; | ||
| 1023 | } | ||
| 1024 | } | ||
| 1025 | err = 0; | ||
| 1026 | 1020 | ||
| 1027 | out: | 1021 | pages += chunk_nr; |
| 1028 | return err; | 1022 | status += chunk_nr; |
| 1023 | nr_pages -= chunk_nr; | ||
| 1024 | } | ||
| 1025 | return nr_pages ? -EFAULT : 0; | ||
| 1029 | } | 1026 | } |
| 1030 | 1027 | ||
| 1031 | /* | 1028 | /* |
