[Ocfs2-devel] [PATCH 1/2] ocfs2: dlmfs: not clear USER_LOCK_ATTACHED when destroy lock

Joseph Qi joseph.qi at linux.alibaba.com
Fri May 13 02:05:04 UTC 2022



On 5/11/22 7:22 AM, Junxiao Bi wrote:
> The following function is the only place that check USER_LOCK_ATTACHED,
> this flag is set when lock request is granted through user_bast() and
> only the following function will clear it.
> 
user_ast?

> Checking of this flag here is to make sure ocfs2_dlm_unlock is not
> issued if this lock is never granted. For example, lock file is created
> and then get removed, open file never happens.
> 
> Clearing the flag here is not necessary because this is the only function
> that checks it, if another flow is executing user_dlm_destroy_lock(), it
> will bail out at the beginning because of USER_LOCK_IN_TEARDOWN and never
> check USER_LOCK_ATTACHED.
> Drop the clear, so we don't need take care it for the following
> error handling patch.
> 
Seems it depends on initializing lockres every time, but it seems this
is not true for directory now.

Thanks,
Joseph

> int user_dlm_destroy_lock(struct user_lock_res *lockres)
> {
>     ...
> 
>     status = 0;
>     if (!(lockres->l_flags & USER_LOCK_ATTACHED)) {
>         spin_unlock(&lockres->l_lock);
>         goto bail;
>     }
> 
>     lockres->l_flags &= ~USER_LOCK_ATTACHED;
>     lockres->l_flags |= USER_LOCK_BUSY;
>     spin_unlock(&lockres->l_lock);
> 
> 	status = ocfs2_dlm_unlock(conn, &lockres->l_lksb, DLM_LKF_VALBLK);
>     if (status) {
>         user_log_dlm_error("ocfs2_dlm_unlock", status, lockres);
>         goto bail;
>     }
> 	...
> }
> 
> Cc: <stable at vger.kernel.org>
> Signed-off-by: Junxiao Bi <junxiao.bi at oracle.com>
> ---
>  fs/ocfs2/dlmfs/userdlm.c | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/fs/ocfs2/dlmfs/userdlm.c b/fs/ocfs2/dlmfs/userdlm.c
> index 29f183a15798..af0be612589c 100644
> --- a/fs/ocfs2/dlmfs/userdlm.c
> +++ b/fs/ocfs2/dlmfs/userdlm.c
> @@ -619,7 +619,6 @@ int user_dlm_destroy_lock(struct user_lock_res *lockres)
>  		goto bail;
>  	}
>  
> -	lockres->l_flags &= ~USER_LOCK_ATTACHED;
>  	lockres->l_flags |= USER_LOCK_BUSY;
>  	spin_unlock(&lockres->l_lock);
>  



More information about the Ocfs2-devel mailing list