@@ -819,6 +819,7 @@ copy_present_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
819
819
820
820
static int copy_pte_range (struct mm_struct * dst_mm , struct mm_struct * src_mm ,
821
821
pmd_t * dst_pmd , pmd_t * src_pmd , struct vm_area_struct * vma ,
822
+ struct vm_area_struct * new ,
822
823
unsigned long addr , unsigned long end )
823
824
{
824
825
pte_t * orig_src_pte , * orig_dst_pte ;
@@ -889,6 +890,7 @@ static int copy_pte_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
889
890
890
891
static inline int copy_pmd_range (struct mm_struct * dst_mm , struct mm_struct * src_mm ,
891
892
pud_t * dst_pud , pud_t * src_pud , struct vm_area_struct * vma ,
893
+ struct vm_area_struct * new ,
892
894
unsigned long addr , unsigned long end )
893
895
{
894
896
pmd_t * src_pmd , * dst_pmd ;
@@ -915,14 +917,15 @@ static inline int copy_pmd_range(struct mm_struct *dst_mm, struct mm_struct *src
915
917
if (pmd_none_or_clear_bad (src_pmd ))
916
918
continue ;
917
919
if (copy_pte_range (dst_mm , src_mm , dst_pmd , src_pmd ,
918
- vma , addr , next ))
920
+ vma , new , addr , next ))
919
921
return - ENOMEM ;
920
922
} while (dst_pmd ++ , src_pmd ++ , addr = next , addr != end );
921
923
return 0 ;
922
924
}
923
925
924
926
static inline int copy_pud_range (struct mm_struct * dst_mm , struct mm_struct * src_mm ,
925
927
p4d_t * dst_p4d , p4d_t * src_p4d , struct vm_area_struct * vma ,
928
+ struct vm_area_struct * new ,
926
929
unsigned long addr , unsigned long end )
927
930
{
928
931
pud_t * src_pud , * dst_pud ;
@@ -949,14 +952,15 @@ static inline int copy_pud_range(struct mm_struct *dst_mm, struct mm_struct *src
949
952
if (pud_none_or_clear_bad (src_pud ))
950
953
continue ;
951
954
if (copy_pmd_range (dst_mm , src_mm , dst_pud , src_pud ,
952
- vma , addr , next ))
955
+ vma , new , addr , next ))
953
956
return - ENOMEM ;
954
957
} while (dst_pud ++ , src_pud ++ , addr = next , addr != end );
955
958
return 0 ;
956
959
}
957
960
958
961
static inline int copy_p4d_range (struct mm_struct * dst_mm , struct mm_struct * src_mm ,
959
962
pgd_t * dst_pgd , pgd_t * src_pgd , struct vm_area_struct * vma ,
963
+ struct vm_area_struct * new ,
960
964
unsigned long addr , unsigned long end )
961
965
{
962
966
p4d_t * src_p4d , * dst_p4d ;
@@ -971,14 +975,14 @@ static inline int copy_p4d_range(struct mm_struct *dst_mm, struct mm_struct *src
971
975
if (p4d_none_or_clear_bad (src_p4d ))
972
976
continue ;
973
977
if (copy_pud_range (dst_mm , src_mm , dst_p4d , src_p4d ,
974
- vma , addr , next ))
978
+ vma , new , addr , next ))
975
979
return - ENOMEM ;
976
980
} while (dst_p4d ++ , src_p4d ++ , addr = next , addr != end );
977
981
return 0 ;
978
982
}
979
983
980
984
int copy_page_range (struct mm_struct * dst_mm , struct mm_struct * src_mm ,
981
- struct vm_area_struct * vma )
985
+ struct vm_area_struct * vma , struct vm_area_struct * new )
982
986
{
983
987
pgd_t * src_pgd , * dst_pgd ;
984
988
unsigned long next ;
@@ -1033,7 +1037,7 @@ int copy_page_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
1033
1037
if (pgd_none_or_clear_bad (src_pgd ))
1034
1038
continue ;
1035
1039
if (unlikely (copy_p4d_range (dst_mm , src_mm , dst_pgd , src_pgd ,
1036
- vma , addr , next ))) {
1040
+ vma , new , addr , next ))) {
1037
1041
ret = - ENOMEM ;
1038
1042
break ;
1039
1043
}
0 commit comments