[Ocfs2-devel] [PATCH 1/1] OCFS2: unhash all dentries on a inode.
Sunil Mushran
sunil.mushran at oracle.com
Mon Sep 22 14:46:04 PDT 2008
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