Message ID | 1580144268-79620-1-git-send-email-yang.shi@linux.alibaba.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v3] mm: move_pages: report the number of non-attempted pages | expand |
> @@ -1627,8 +1627,18 @@ static int do_pages_move(struct mm_struct *mm, nodemask_t task_nodes, > start = i; > } else if (node != current_node) { > err = do_move_pages_to_node(mm, &pagelist, current_node); > - if (err) > + if (err) { > + /* > + * Possitive err means the number of failed "positive" > + * pages to migrate. Since we are going to > + * abort and return the number of non-migrated > + * pages, so need incude the rest of the "need to include" > + * nr_pages that have not attempted as well. "have not been attempted" > @@ -1674,6 +1687,13 @@ static int do_pages_move(struct mm_struct *mm, nodemask_t task_nodes, > > /* Make sure we do not overwrite the existing error */ > err1 = do_move_pages_to_node(mm, &pagelist, current_node); > + /* > + * Don't have to report non-attempted pages here since: > + * - If the above loop is done gracefully there is not non-attempted "all pages have been attempted" > + * page. > + * - If the above loop is aborted to it means more fatal error s/to// s/more/a/ > + * happened, should return err. > + */ I'd also be tempted to rename "err" to "ret" since it has meanings beyond "error" now.
On 1/27/20 11:35 AM, Matthew Wilcox wrote: >> @@ -1627,8 +1627,18 @@ static int do_pages_move(struct mm_struct *mm, nodemask_t task_nodes, >> start = i; >> } else if (node != current_node) { >> err = do_move_pages_to_node(mm, &pagelist, current_node); >> - if (err) >> + if (err) { >> + /* >> + * Possitive err means the number of failed > "positive" > >> + * pages to migrate. Since we are going to >> + * abort and return the number of non-migrated >> + * pages, so need incude the rest of the > "need to include" > >> + * nr_pages that have not attempted as well. > "have not been attempted" > >> @@ -1674,6 +1687,13 @@ static int do_pages_move(struct mm_struct *mm, nodemask_t task_nodes, >> >> /* Make sure we do not overwrite the existing error */ >> err1 = do_move_pages_to_node(mm, &pagelist, current_node); >> + /* >> + * Don't have to report non-attempted pages here since: >> + * - If the above loop is done gracefully there is not non-attempted > "all pages have been attempted" > >> + * page. >> + * - If the above loop is aborted to it means more fatal error > s/to// s/more/a/ > >> + * happened, should return err. >> + */ > I'd also be tempted to rename "err" to "ret" since it has meanings beyond > "error" now. Thanks for catching these problems. Will fix in v4. >
Btw. please do not forget to update the man page as well. Thanks!
On 1/29/20 2:12 AM, Michal Hocko wrote: > Btw. please do not forget to update the man page as well. > Thanks! Sure.
diff --git a/mm/migrate.c b/mm/migrate.c index 86873b6..9b8eb5d 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -1627,8 +1627,18 @@ static int do_pages_move(struct mm_struct *mm, nodemask_t task_nodes, start = i; } else if (node != current_node) { err = do_move_pages_to_node(mm, &pagelist, current_node); - if (err) + if (err) { + /* + * Possitive err means the number of failed + * pages to migrate. Since we are going to + * abort and return the number of non-migrated + * pages, so need incude the rest of the + * nr_pages that have not attempted as well. + */ + if (err > 0) + err += nr_pages - i - 1; goto out; + } err = store_status(status, start, current_node, i - start); if (err) goto out; @@ -1659,8 +1669,11 @@ static int do_pages_move(struct mm_struct *mm, nodemask_t task_nodes, goto out_flush; err = do_move_pages_to_node(mm, &pagelist, current_node); - if (err) + if (err) { + if (err > 0) + err += nr_pages - i - 1; goto out; + } if (i > start) { err = store_status(status, start, current_node, i - start); if (err) @@ -1674,6 +1687,13 @@ static int do_pages_move(struct mm_struct *mm, nodemask_t task_nodes, /* Make sure we do not overwrite the existing error */ err1 = do_move_pages_to_node(mm, &pagelist, current_node); + /* + * Don't have to report non-attempted pages here since: + * - If the above loop is done gracefully there is not non-attempted + * page. + * - If the above loop is aborted to it means more fatal error + * happened, should return err. + */ if (!err1) err1 = store_status(status, start, current_node, i - start); if (!err)