Patch from Maneesh Soni <maneesh@in.ibm.com>

The following patch should enable smalldevfs to work with dcache_rcu. The
locking problem is because smalldevfs is written keeping fastwalk
in mind where as dcache_rcu backs out fastwalk code to 2.5.10 level.



 devfs/base.c |   13 +++++--------
 1 files changed, 5 insertions(+), 8 deletions(-)

diff -puN fs/devfs/base.c~smalldevfs-dcache_rcu-fix fs/devfs/base.c
--- 25/fs/devfs/base.c~smalldevfs-dcache_rcu-fix	2003-02-20 01:15:23.000000000 -0800
+++ 25-akpm/fs/devfs/base.c	2003-02-20 01:15:23.000000000 -0800
@@ -60,8 +60,7 @@ static int walk_parents_mkdir(const char
 		memcpy(buf, *path, len);
 		buf[len] = '\0';
 
-		spin_lock(&dcache_lock);
-		err = link_path_walk(buf, nd); /* releases dcache_lock */
+		err = link_path_walk(buf, nd); 
 
 		if (err)
 			return err;
@@ -101,14 +100,13 @@ static int devfs_decode(devfs_handle_t d
 
 	memset(&nd, 0, sizeof(nd));
 	nd.flags = LOOKUP_PARENT;
-	nd.mnt = devfs_vfsmount;
-	nd.dentry = dir;
+	nd.mnt = mntget(devfs_vfsmount);
+	nd.dentry = dget(dir);
 
 	err = walk_parents_mkdir(&name, &nd, is_dir);
 	if (err)
 		return err;
 
-	spin_lock(&dcache_lock);
 	err = link_path_walk(name, &nd);
 	if (err)
 		return err;
@@ -247,10 +245,9 @@ void devfs_remove(const char *fmt, ...)
 	buf[sizeof(buf)-1] = '\0';
 
 	memset(&nd, 0, sizeof(nd));
-	nd.mnt = devfs_vfsmount;
-	nd.dentry = devfs_vfsmount->mnt_sb->s_root;
+	nd.mnt = mntget(devfs_vfsmount);
+	nd.dentry = dget(devfs_vfsmount->mnt_sb->s_root);
 
-	spin_lock(&dcache_lock);
 	err = link_path_walk(buf, &nd);
 	if (!err) {
 		devfs_unregister(nd.dentry);

_