[Ocfs2-devel] [PATCH 1/1] OCFS2: add spin lock when accessing inode->i_nlink.
Sunil Mushran
sunil.mushran at oracle.com
Mon Sep 22 14:18:46 PDT 2008
NAK
Firstly ip_lock does not protect inode. Secondly, the field is
protected by inode_lock. Follow the code:
iput (inode_lock taken) => iput_final ==> ocfs2_drop_inode (inode_lock
still held).
void iput(struct inode *inode)
{
....
if (atomic_dec_and_lock(&inode->i_count, &inode_lock))
iput_final(inode);
}
static inline void iput_final(struct inode *inode)
{
struct super_operations *op = inode->i_sb->s_op;
void (*drop)(struct inode *) = generic_drop_inode;
if (op && op->drop_inode)
drop = op->drop_inode;
drop(inode);
}
wangang wang wrote:
> add spin lock when accessing inode->i_nlink in ocfs2_drop_inode().
>
> the patch is against 1.2 svn.
>
> Signed-off-by: Wengang wang <wen.gang.wang at oracle.com>
> --
> Index: fs/ocfs2/inode.c
> ===================================================================
> --- fs/ocfs2/inode.c (revision 3101)
> +++ fs/ocfs2/inode.c (working copy)
> @@ -991,10 +991,12 @@
> /* Testing ip_orphaned_slot here wouldn't work because we may
> * not have gotten a delete_inode vote from any other nodes
> * yet. */
> + spin_lock(&oi->ip_lock);
> if (oi->ip_flags & OCFS2_INODE_MAYBE_ORPHANED) {
> mlog(0, "Inode was orphaned on another node, clearing nlink.\n");
> inode->i_nlink = 0;
> }
> + spin_unlock(&oi->ip_lock);
>
> generic_drop_inode(inode);
>
>
> _______________________________________________
> 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