When !start_pte is true, the branch for "start_pte" in "out_ptl" label section is surely false, and "ptl != pml" must be true since "ptl" is NULL in this case. It means both branches in "out_ptl" are redundant, only one thing to be done is to unlock "pml", make it directly unlock "pml" and return in this case. Signed-off-by: I Hsin Cheng <richard120310@xxxxxxxxx> --- mm/pt_reclaim.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mm/pt_reclaim.c b/mm/pt_reclaim.c index 7e9455a18aae..f5d5c42a4679 100644 --- a/mm/pt_reclaim.c +++ b/mm/pt_reclaim.c @@ -42,8 +42,10 @@ void try_to_free_pte(struct mm_struct *mm, pmd_t *pmd, unsigned long addr, pml = pmd_lock(mm, pmd); start_pte = pte_offset_map_rw_nolock(mm, pmd, addr, &pmdval, &ptl); - if (!start_pte) - goto out_ptl; + if (!start_pte) { + spin_unlock(pml); + return; + } if (ptl != pml) spin_lock_nested(ptl, SINGLE_DEPTH_NESTING); -- 2.43.0