在 2020/11/9 下午8:07, Matthew Wilcox 写道: > On Mon, Nov 09, 2020 at 07:47:16PM +0800, Alex Shi wrote: >> Go through the context I found the exit_swap_address_space(p->type) >> shouldn't be used in good result path. So just move it to error path. > > But ... it's not used in the success path. There's a 'goto' right > before it. Does this really fix your problem? > The trick thing is. It do fix my problem on my centos 7 with gcc 8.3.1... I am getting headache on this problem... >> @@ -3339,7 +3339,8 @@ static bool swap_discardable(struct swap_info_struct *si) >> error = inode_drain_writes(inode); >> if (error) { >> inode->i_flags &= ~S_SWAPFILE; >> - goto free_swap_address_space; >> + exit_swap_address_space(p->type); >> + goto bad_swap_unlock_inode; >> } >> >> mutex_lock(&swapon_mutex); >> @@ -3364,8 +3365,6 @@ static bool swap_discardable(struct swap_info_struct *si) >> >> error = 0; >> goto out; >> -free_swap_address_space: >> - exit_swap_address_space(p->type); >> bad_swap_unlock_inode: >> inode_unlock(inode); >> bad_swap: >> -- >> 1.8.3.1 >> >>