summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorHenry C Chang <henry_c_chang@tcloudcomputing.com>2010-06-01 20:31:08 +0200
committerSage Weil <sage@newdream.net>2010-06-02 01:55:55 +0200
commit13a4214cd9ec14d7b77e98bd3ee51f60f868a6e5 (patch)
treebaf741b4b80b169994591870106a39a885b55a68 /fs
parentLinux 2.6.35-rc1 (diff)
downloadlinux-13a4214cd9ec14d7b77e98bd3ee51f60f868a6e5.tar.xz
linux-13a4214cd9ec14d7b77e98bd3ee51f60f868a6e5.zip
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 <henry_c_chang@tcloudcomputing.com> Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs')
-rw-r--r--fs/ceph/inode.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
index 226f5a50d362..ab47f46ca282 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);