[Ocfs2-devel] [PATCH] ocfs2: Optimization of code while free dead locks.

Joseph Qi jiangqi903 at gmail.com
Sun Nov 27 22:17:06 PST 2016



On 16/11/28 14:06, Eric Ren wrote:
> Hi,
>
> On 11/26/2016 08:15 PM, Guozhonghua wrote:
>> The three loops can be optimized into one loop and its sub loops, so as small code can do the same work.
>> The patch is based on the linux-4.9-rc6.
>>
>> Signed-off-by: Guozhonghua <guozhonghua at h3c.com>
>>
>>
>> --- ocfs2.orig/dlm/dlmrecovery.c        2016-11-26 19:13:04.833023242 +0800
>> +++ ocfs2/dlm/dlmrecovery.c     2016-11-26 19:24:03.982552497 +0800
> I don't think this patch could be applied cleanly:
> ------
> zhen at desktop:~/linux> git am ~/patches/temp/\[PATCH\]\ ocfs2\:\ Optimization\ of\ code\
> while\ free\ dead\ locks..eml
> Applying: ocfs2: Optimization of code while free dead locks.
> .git/rebase-apply/patch:7: trailing whitespace.
>          struct list_head *queue = NULL;
> .git/rebase-apply/patch:8: trailing whitespace.
>          int i;
> fatal: corrupt patch at line 9
> Patch failed at 0001 ocfs2: Optimization of code while free dead locks.
> ------
>
> Please go through the docs below:
> [1] https://kernelnewbies.org/FirstKernelPatch
>
> The file path (ocfs2/dlm/dlmrecovery.c ) is weird.  It should be like:
>
>                     diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
>
>> @@ -2268,6 +2268,8 @@ static void dlm_free_dead_locks(struct d
>>    {
>>           struct dlm_lock *lock, *next;
>>           unsigned int freed = 0;
>> +       struct list_head *queue = NULL;
>> +       int i;
>>
>>           /* this node is the lockres master:
>>            * 1) remove any stale locks for the dead node
>> @@ -2280,33 +2282,19 @@ static void dlm_free_dead_locks(struct d
>>            * to force the DLM_UNLOCK_FREE_LOCK action so as to free the locks */
>>
>>           /* TODO: check pending_asts, pending_basts here */
>> -       list_for_each_entry_safe(lock, next, &res->granted, list) {
>> -               if (lock->ml.node == dead_node) {
>> -                       list_del_init(&lock->list);
>> -                       dlm_lock_put(lock);
>> -                       /* Can't schedule DLM_UNLOCK_FREE_LOCK - do manually */
>> -                       dlm_lock_put(lock);
>> -                       freed++;
>> +       for (i = DLM_BLOCKED_LIST; i >= DLM_GRANTED_LIST; i--) {
> Is it right to loop the lists in a reversed order to the original?
>
> Eric
We have to keep the traverse order from granted to blocked.

Thanks,
Joseph
>> +               queue = dlm_list_idx_to_ptr(res, i);
>> +               list_for_each_entry_safe(lock, next, queue, list) {
>> +                       if (lock->ml.node == dead_node) {
>> +                               list_del_init(&lock->list);
>> +                               dlm_lock_put(lock);
>> +
>> +                               /* Can't schedule DLM_UNLOCK_FREE_LOCK - do manually */
>> +                               dlm_lock_put(lock);
>> +                               freed++;
>> +                       }
>>                   }
>> -       }
>> -       list_for_each_entry_safe(lock, next, &res->converting, list) {
>> -               if (lock->ml.node == dead_node) {
>> -                       list_del_init(&lock->list);
>> -                       dlm_lock_put(lock);
>> -                       /* Can't schedule DLM_UNLOCK_FREE_LOCK - do manually */
>> -                       dlm_lock_put(lock);
>> -                       freed++;
>> -               }
>> -       }
>> -       list_for_each_entry_safe(lock, next, &res->blocked, list) {
>> -               if (lock->ml.node == dead_node) {
>> -                       list_del_init(&lock->list);
>> -                       dlm_lock_put(lock);
>> -                       /* Can't schedule DLM_UNLOCK_FREE_LOCK - do manually */
>> -                       dlm_lock_put(lock);
>> -                       freed++;
>> -               }
>> -       }
>> +       }
>>
>>           if (freed) {
>>                   mlog(0, "%s:%.*s: freed %u locks for dead node %u, "
>>
>> -------------------------------------------------------------------------------------------------------------------------------------
>> 本邮件及其附件含有杭州华三通信技术有限公司的保密信息,仅限于发送给上面地址中列出
>> 的个人或群组。禁止任何其他人以任何形式使用(包括但不限于全部或部分地泄露、复制、
>> 或散发)本邮件中的信息。如果您错收了本邮件,请您立即电话或邮件通知发件人并删除本
>> 邮件!
>> This e-mail and its attachments contain confidential information from H3C, which is
>> intended only for the person or entity whose address is listed above. Any use of the
>> information contained herein in any way (including, but not limited to, total or partial
>> disclosure, reproduction, or dissemination) by persons other than the intended
>> recipient(s) is prohibited. If you receive this e-mail in error, please notify the sender
>> by phone or email immediately and delete it!
>
>
> _______________________________________________
> Ocfs2-devel mailing list
> Ocfs2-devel at oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/ocfs2-devel




More information about the Ocfs2-devel mailing list