Whamcloud - gitweb
r=adilger
authorgreen <green>
Thu, 16 Sep 2004 18:13:48 +0000 (18:13 +0000)
committergreen <green>
Thu, 16 Sep 2004 18:13:48 +0000 (18:13 +0000)
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
lustre/kernel_patches/patches/vfs_intent-2.6-vanilla.patch

index f8781be..bff461f 100644 (file)
@@ -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)))
index 90c1223..592f0e2 100644 (file)
@@ -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)))