[Ocfs2-devel] [PATCH 1/2] ocfs2: dlmfs: not clear USER_LOCK_ATTACHED when destroy lock
Junxiao Bi
junxiao.bi at oracle.com
Fri May 13 16:27:25 UTC 2022
On 5/12/22 7:05 PM, Joseph Qi wrote:
>
> 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?
Good catch, that's a typo, should be 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.
Sorry, i didn't get this. Can you elaborate this?
Thanks,
Junxiao.
>
> 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