[Ocfs2-devel] [PATCH 1/1] OCFS2: unhash all dentries on a inode.

Sunil Mushran sunil.mushran at oracle.com
Mon Sep 22 21:47:08 PDT 2008


If so, won't that be a bug?

wengang wang wrote:
> Sunil,
>
> d_prune_aliases() unhashes dentries that has 0 reference count, 
> dentries with non-zero ref count won't be unhashed.
> My code unhashes all no matter there reference counts are 0 or not.
>
> regards,
> wengang.
>
> Sunil Mushran wrote:
>> NAK.
>>
>> I fail to understand your logic. The code you've added is pretty
>> much what d_prune_aliases() does (the call you have deleted).
>>
>> wangang wang wrote:
>>> In ocfs2_process_delete_request(), we should unhash all dentries on 
>>> the inode.
>>> --not only the ones with 0 referrence count. so that it's possible 
>>> for dput()
>>> to drop the stale inode.
>>>
>>> the patch is against 1.2 svn.
>>>
>>> Signed-off-by: Wengang wang <wen.gang.wang at oracle.com>
>>> -- 
>>>
>>> Index: fs/ocfs2/vote.c
>>> ===================================================================
>>> --- fs/ocfs2/vote.c    (revision 3101)
>>> +++ fs/ocfs2/vote.c    (working copy)
>>> @@ -176,6 +176,7 @@
>>>                      int deleting_node)
>>>  {
>>>      int response = OCFS2_RESPONSE_BUSY;
>>> +    struct list_head *tmp, *head;
>>>  
>>>      mlog(0, "DELETE vote on inode %lu, read lnk_cnt = %u, slot = 
>>> %d\n",
>>>           inode->i_ino, inode->i_nlink, *orphaned_slot);
>>> @@ -253,9 +254,19 @@
>>>      ocfs2_mark_inode_remotely_deleted(inode, deleting_node);
>>>      spin_unlock(&OCFS2_I(inode)->ip_lock);
>>>  
>>> -    /* Not sure this is necessary anymore. */
>>> -    d_prune_aliases(inode);
>>> +    /* unhash all dentries on this inode */
>>> +    spin_lock(&dcache_lock);
>>> +    head = &inode->i_dentry;
>>> +    tmp = head;
>>>  
>>> +    while ((tmp = tmp->next) != head) {
>>> +        struct dentry *dentry = list_entry(tmp, struct dentry, 
>>> d_alias);
>>> +        spin_lock(&dentry->d_lock);
>>> +        __d_drop(dentry);
>>> +        spin_unlock(&dentry->d_lock);
>>> +    }
>>> +    spin_unlock(&dcache_lock);
>>> +
>>>      /* If we get here, then we're voting 'yes', so commit the
>>>       * delete on our side. */
>>>      response = OCFS2_RESPONSE_OK;
>>>
>>> _______________________________________________
>>> Ocfs2-devel mailing list
>>> Ocfs2-devel at oss.oracle.com
>>> http://oss.oracle.com/mailman/listinfo/ocfs2-devel
>>>   
>>
>




More information about the Ocfs2-devel mailing list