From: Henry C Chang Date: Tue, 1 Jun 2010 18:31:08 +0000 (-0700) Subject: ceph: fix d_subdirs ordering problem X-Git-Tag: upstream/snapshot3+hdmi~14002^2~7 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=13a4214cd9ec14d7b77e98bd3ee51f60f868a6e5;p=platform%2Fadaptation%2Frenesas_rcar%2Frenesas_kernel.git ceph: fix d_subdirs ordering problem We misused list_move_tail() to order the dentry in d_subdirs. This will screw up the d_subdirs order. This bug can be reliably reproduced by: 1. mount ceph fs. 2. on ceph fs, git clone git://ceph.newdream.net/git/ceph.git 3. Run autogen.sh in ceph directory. (Note: Errors only occur at the first time you run autogen.sh.) Signed-off-by: Henry C Chang Signed-off-by: Sage Weil --- diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c index 226f5a5..ab47f46 100644 --- a/fs/ceph/inode.c +++ b/fs/ceph/inode.c @@ -827,7 +827,7 @@ static void ceph_set_dentry_offset(struct dentry *dn) spin_lock(&dcache_lock); spin_lock(&dn->d_lock); - list_move_tail(&dir->d_subdirs, &dn->d_u.d_child); + list_move(&dn->d_u.d_child, &dir->d_subdirs); dout("set_dentry_offset %p %lld (%p %p)\n", dn, di->offset, dn->d_u.d_child.prev, dn->d_u.d_child.next); spin_unlock(&dn->d_lock);