From 1bb39b8908dfc455d3bf7eb74c3ae50047bceacf Mon Sep 17 00:00:00 2001 From: green Date: Thu, 16 Sep 2004 18:13:48 +0000 Subject: [PATCH] r=adilger Patch from SuSE: revalidate_special() is called from link_path_walk as the last path component is (".."). In revalidate_special() we called real_lookup(dentry->d_parent,&dentry->d_name, nd), which called cifs_lookup(). which doesnot initialises dentry->d_op pointer if there is no corresponding inode to the dentry. cifs_lookup() returned NULL dentry with d_op() as NULL. so, in the second iteration of the loop in revalidate_special() we have d_op as NULL and hence the crash in if (!dentry->d_op->d_revalidate(dentry, nd)) { --- lustre/kernel_patches/patches/vfs_intent-2.6-suse.patch | 2 +- lustre/kernel_patches/patches/vfs_intent-2.6-vanilla.patch | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lustre/kernel_patches/patches/vfs_intent-2.6-suse.patch b/lustre/kernel_patches/patches/vfs_intent-2.6-suse.patch index f8781be..bff461f 100644 --- a/lustre/kernel_patches/patches/vfs_intent-2.6-suse.patch +++ b/lustre/kernel_patches/patches/vfs_intent-2.6-suse.patch @@ -101,9 +101,9 @@ Index: linux-2.6.5-12.1/fs/namei.c + struct dentry *dentry = nd->dentry; + int err, counter = 0; + ++ revalidate_again: + if (!dentry->d_op || !dentry->d_op->d_revalidate) + return 0; -+ revalidate_again: + if (!dentry->d_op->d_revalidate(dentry, nd)) { + struct dentry *new; + if ((err = permission(dentry->d_parent->d_inode, MAY_EXEC,nd))) diff --git a/lustre/kernel_patches/patches/vfs_intent-2.6-vanilla.patch b/lustre/kernel_patches/patches/vfs_intent-2.6-vanilla.patch index 90c1223..592f0e2 100644 --- a/lustre/kernel_patches/patches/vfs_intent-2.6-vanilla.patch +++ b/lustre/kernel_patches/patches/vfs_intent-2.6-vanilla.patch @@ -101,9 +101,9 @@ Index: linux-2.6.6-vanilla/fs/namei.c + struct dentry *dentry = nd->dentry; + int err, counter = 0; + ++ revalidate_again: + if (!dentry->d_op || !dentry->d_op->d_revalidate) + return 0; -+ revalidate_again: + if (!dentry->d_op->d_revalidate(dentry, nd)) { + struct dentry *new; + if ((err = permission(dentry->d_parent->d_inode, MAY_EXEC, nd))) -- 1.8.3.1