Messages in this thread | | | Date | Tue, 09 Apr 2013 18:00:34 -0400 | From | Naoya Horiguchi <> | Subject | Re: [PATCH v3 3/3] hugetlbfs: add swap entry check in follow_hugetlb_page() |
| |
On Mon, Apr 08, 2013 at 04:57:44PM -0400, KOSAKI Motohiro wrote: > > - if (absent || > > + /* > > + * is_swap_pte test covers both is_hugetlb_entry_hwpoisoned > > + * and hugepages under migration in which case > > + * hugetlb_fault waits for the migration and bails out > > + * properly for HWPosined pages. > > + */ > > + if (absent || is_swap_pte(huge_ptep_get(pte)) || > > ((flags & FOLL_WRITE) && !pte_write(huge_ptep_get(pte)))) { > > int ret; > > Your comment describe what the code is. However we want the comment describe > why. In migration case, calling hugetlb_fault() is natural. but in > hwpoison case, it is > needed more explanation.
We should call hugetlb_fault() when we encounter any kind of swap type entry. It's consistent with handling of normal pages.
> Why can't we call is_hugetlb_hwpoisoned() directly?
We can use it, but I like to make code simple.
I rewrite the comment here, how about this?
- if (absent || + /* + * We need call hugetlb_fault for both hugepages under migration + * (in which case hugetlb_fault waits for the migration,) and + * hwpoisoned hugepages (in which case we need to prevent the + * caller from accessing to them.) In order to do this, we use + * here is_swap_pte instead of is_hugetlb_entry_migration and + * is_hugetlb_entry_hwpoisoned. This is because it simply covers + * both cases, and because we can't follow correct pages directly + * from any kind of swap entries. + */ + if (absent || is_swap_pte(huge_ptep_get(pte)) || ((flags & FOLL_WRITE) && !pte_write(huge_ptep_get(pte)))) { int ret;
Thanks, Naoya
| |