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? > @@ -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 > >