From 928dda1f9433f024ac48c3d97ae683bf83dd0e42 Mon Sep 17 00:00:00 2001 From: Yiwen Jiang Date: Fri, 4 Sep 2015 15:44:25 -0700 Subject: [PATCH] ocfs2: fix a tiny case that inode can not removed When running dirop_fileop_racer we found a case that inode can not removed. Two nodes, say Node A and Node B, mount the same ocfs2 volume. Create two dirs /race/1/ and /race/2/ in the filesystem. Node A Node B rm -r /race/2/ mv /race/1/ /race/2/ call ocfs2_unlink(), get the EX mode of /race/2/ wait for B unlock /race/2/ decrease i_nlink of /race/2/ to 0, and add inode of /race/2/ into orphan dir, unlock /race/2/ got EX mode of /race/2/. because /race/1/ is dir, so inc i_nlink of /race/2/ and update into disk, unlock /race/2/ because i_nlink of /race/2/ is not zero, this inode will always remain in orphan dir This patch fixes this case by test whether i_nlink of new dir is zero. Signed-off-by: Yiwen Jiang Reviewed-by: Mark Fasheh Cc: Joel Becker Cc: Joseph Qi Cc: Xue jiufei Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- Reading git-format-patch failed