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

Reply via email to