[Ocfs2-devel] [PATCH v2 1/2] ocfs2: dlmfs: not clear USER_LOCK_ATTACHED when destroy lock
Joseph Qi
joseph.qi at linux.alibaba.com
Thu May 19 01:59:33 UTC 2022
On 5/19/22 7:52 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_ast() and
> only the following function will clear it.
>
> 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.
>
> 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;
> }
> ...
> }
>
> V1 discussion with Joseph:
> https://lore.kernel.org/all/7b620c53-0c45-da2c-829e-26195cbe7d4e@linux.alibaba.com/T/
>
> Signed-off-by: Junxiao Bi <junxiao.bi at oracle.com>
Reviewed-by: Joseph Qi <joseph.qi at linux.alibaba.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