Re: linux-next: manual merge of the vfs-scale tree with the v9fs tree

From: Aneesh Kumar K. V
Date: Tue Jan 11 2011 - 03:15:05 EST


On Mon, 10 Jan 2011 15:49:37 -0600, Eric Van Hensbergen <ericvh@xxxxxxxxx> wrote:
> Hmm...
>
> I've merged up our for-next patch series with Linus' tree which now
> has the vfs-scalability patches in it.
> Unfortunately, it seems something has been introduced which changes
> underlying assumptions in the v9fs code causing certain operations to
> fail with a segfault in the dentry code. We are digging into now and
> will keep folks apprised of the situation. Some quick checks have
> shown that the problem wasn't there in 2.6.37 but are in linus' tree
> as of today. I'm in the process of bisecting further -- it may not be
> the fault of the concerns below, but I figured I should post and let
> folks know about the problem.
>
> For what its worth, here's the failure we see:
> sh-2.05b# mount -t 9p 10.0.2.2 /mnt -o port=5670
> [ 49.044605] mount used greatest stack depth: 4664 bytes left
> sh-2.05b# ls /mnt
> bin dev initrd.img.old lost+found n1 opt selinux usr
> boot etc lib media n2 proc srv var
> cdrom home lib32 mnt nas root sys vmlinuz
> csrv initrd.img lib64 n0 net sbin tmp vmlinuz.old
> sh-2.05b# ls /mnt/tmp
> cscope.9130 error.txt ns.ericvh.:1 orbit-gdm pulse-PKdhtXMmr18n
> sh-2.05b# cd /mnt/tmp
> sh-2.05b# ls -l
> total 1
> drwx------ 1 501 266594 0 Jan 7 14:54 cscope.9130
> -rw-r--r-- 1 501 266594 806 Jan 7 15:03 error.txt
> drwx------ 1 501 266594 0 Jan 6 21:19 ns.ericvh.:1
> drwx------ 1 114 124 0 Jan 6 21:24 orbit-gdm
> drwx------ 1 114 124 0 Jan 6 21:09 pulse-PKdhtXMmr18n
> sh-2.05b# mkdir test
> [ 61.764123] ------------[ cut here ]------------
> [ 61.765045] kernel BUG at /home/ericvh/src/linux/v9fs-devel/fs/dcache.c:1358!
> [ 61.765045] invalid opcode: 0000 [#1] SMP
> [ 61.765045] last sysfs file:
> [ 61.765045] CPU 0
> [ 61.765045] Pid: 853, comm: mkdir Not tainted 2.6.37+ #124 /Bochs
> [ 61.765045] RIP: 0010:[<ffffffff8111dda8>] [<ffffffff8111dda8>]
> d_set_d_op+0xb/0x58
> [ 61.765045] RSP: 0000:ffff880016a0bdb8 EFLAGS: 00010282
> [ 61.765045] RAX: ffff880016d43440 RBX: ffff880016d4a9c0 RCX: ffff880017b23880
> [ 61.765045] RDX: 0000000000000000 RSI: ffffffff81636d40 RDI: ffff880016d4a9c0
> [ 61.765045] RBP: ffff880016a0bdb8 R08: 0000000000004000 R09: ffff880016a0bcf8
> [ 61.765045] R10: 0000000000000004 R11: ffff880017925d30 R12: ffff880016946d80
> [ 61.765045] R13: ffff880016946de0 R14: 0000000000000000 R15: ffff880016a0c400
> [ 61.765045] FS: 0000000000000000(0000) GS:ffff880017c00000(0000)
> knlGS:0000000000000000
> [ 61.765045] CS: 0010 DS: 002b ES: 002b CR0: 000000008005003b
> [ 61.765045] CR2: 00000000f76f23c0 CR3: 0000000016814000 CR4: 00000000000006f0
> [ 61.765045] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> [ 61.765045] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
> [ 61.765045] Process mkdir (pid: 853, threadinfo ffff880016a0a000,
> task ffff88001695a490)
> [ 61.765045] Stack:
> [ 61.765045] ffff880016a0be28 ffffffff812071bc ffff880016d43440
> 800001ed00000000
> [ 61.765045] 0000000000000000 ffff880016d42fc0 0000000000000000
> ffff880016d4a9f8
> [ 61.765045] 0000000000000000 ffff880016d42fc0 ffff880016d4a9c0
> ffff880016a0c400
> [ 61.765045] Call Trace:
> [ 61.765045] [<ffffffff812071bc>] v9fs_create+0x21e/0x273
> [ 61.765045] [<ffffffff812075a5>] v9fs_vfs_mkdir+0x77/0x9a
> [ 61.765045] [<ffffffff81117b68>] vfs_mkdir+0x5a/0x96
> [ 61.765045] [<ffffffff81119c7c>] sys_mkdirat+0x91/0xe2
> [ 61.765045] [<ffffffff81119ce0>] sys_mkdir+0x13/0x15
> [ 61.765045] [<ffffffff810599b3>] ia32_sysret+0x0/0x5
> [ 61.765045] Code: cc 39 53 20 0f 84 4a ff ff ff eb e5 31 db 48 83
> c4 48 48 89 d8 5b 41 5c 41 5d 41 5e 41 5f c9 c3 48 83 7f 60 00 55 48
> 89 e5 74 04 <0f> 0b eb fe 66 f7 07 00 f0 74 04 0f 0b eb fe 48 85 f6 48
> 89 77
> [ 61.765045] RIP [<ffffffff8111dda8>] d_set_d_op+0xb/0x58
> [ 61.765045] RSP <ffff880016a0bdb8>
> [ 61.802265] ---[ end trace af62980550ad7d9c ]---
> Segmentation fault
>
>

This should fix

commit 69da74b14b1e6f9a69e02fada08a1df932907d65
Author: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx>
Date: Tue Jan 11 13:42:28 2011 +0530

fs/9p: Don't set dentry->d_op in create routines

We do set dentry->d_op in lookup even in case of EOENT entries.
That implies we should have dentry->d_op already set when
create/mkdir/mknod/link/symlink routines are called

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx>

diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
index 3923586..5076eeb 100644
--- a/fs/9p/vfs_inode.c
+++ b/fs/9p/vfs_inode.c
@@ -537,12 +537,6 @@ v9fs_create(struct v9fs_session_info *v9ses, struct inode *dir,
P9_DPRINTK(P9_DEBUG_VFS, "inode creation failed %d\n", err);
goto error;
}
-
- if (v9ses->cache)
- d_set_d_op(dentry, &v9fs_cached_dentry_operations);
- else
- d_set_d_op(dentry, &v9fs_dentry_operations);
-
d_instantiate(dentry, inode);
err = v9fs_fid_add(dentry, fid);
if (err < 0)
diff --git a/fs/9p/vfs_inode_dotl.c b/fs/9p/vfs_inode_dotl.c
index b7f8dcb..8cb1eb8 100644
--- a/fs/9p/vfs_inode_dotl.c
+++ b/fs/9p/vfs_inode_dotl.c
@@ -211,11 +211,6 @@ v9fs_vfs_create_dotl(struct inode *dir, struct dentry *dentry, int omode,
P9_DPRINTK(P9_DEBUG_VFS, "inode creation failed %d\n", err);
goto error;
}
- if (v9ses->cache)
- dentry->d_op = &v9fs_cached_dentry_operations;
- else
- dentry->d_op = &v9fs_dentry_operations;
-
d_instantiate(dentry, inode);
err = v9fs_fid_add(dentry, fid);
if (err < 0)
@@ -312,7 +307,6 @@ static int v9fs_vfs_mkdir_dotl(struct inode *dir,
err);
goto error;
}
- d_set_d_op(dentry, &v9fs_cached_dentry_operations);
d_instantiate(dentry, inode);
err = v9fs_fid_add(dentry, fid);
if (err < 0)
@@ -329,7 +323,6 @@ static int v9fs_vfs_mkdir_dotl(struct inode *dir,
err = PTR_ERR(inode);
goto error;
}
- d_set_d_op(dentry, &v9fs_dentry_operations);
d_instantiate(dentry, inode);
}
/* Now set the ACL based on the default value */
@@ -560,7 +553,6 @@ v9fs_vfs_symlink_dotl(struct inode *dir, struct dentry *dentry,
err);
goto error;
}
- d_set_d_op(dentry, &v9fs_cached_dentry_operations);
d_instantiate(dentry, inode);
err = v9fs_fid_add(dentry, fid);
if (err < 0)
@@ -573,7 +565,6 @@ v9fs_vfs_symlink_dotl(struct inode *dir, struct dentry *dentry,
err = PTR_ERR(inode);
goto error;
}
- d_set_d_op(dentry, &v9fs_dentry_operations);
d_instantiate(dentry, inode);
}

@@ -648,8 +639,6 @@ v9fs_vfs_link_dotl(struct dentry *old_dentry, struct inode *dir,
*/
ihold(old_dentry->d_inode);
}
-
- d_set_d_op(dentry, old_dentry->d_op);
d_instantiate(dentry, old_dentry->d_inode);

return err;
@@ -728,7 +717,6 @@ v9fs_vfs_mknod_dotl(struct inode *dir, struct dentry *dentry, int omode,
err);
goto error;
}
- d_set_d_op(dentry, &v9fs_cached_dentry_operations);
d_instantiate(dentry, inode);
err = v9fs_fid_add(dentry, fid);
if (err < 0)
@@ -744,7 +732,6 @@ v9fs_vfs_mknod_dotl(struct inode *dir, struct dentry *dentry, int omode,
err = PTR_ERR(inode);
goto error;
}
- d_set_d_op(dentry, &v9fs_dentry_operations);
d_instantiate(dentry, inode);
}
/* Now set the ACL based on the default value */
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/