fs/jffs2/super.c |   30 +++++++++++++++++-------------
 1 files changed, 17 insertions(+), 13 deletions(-)

diff -puN fs/jffs2/super.c~KD34-jffs2-B5 fs/jffs2/super.c
--- 25/fs/jffs2/super.c~KD34-jffs2-B5	2003-09-21 22:35:13.000000000 -0700
+++ 25-akpm/fs/jffs2/super.c	2003-09-21 22:35:13.000000000 -0700
@@ -173,7 +173,6 @@ static struct super_block *jffs2_get_sb(
 	int err;
 	struct nameidata nd;
 	int mtdnr;
-	dev_t dev;
 
 	if (!dev_name)
 		return ERR_PTR(-EINVAL);
@@ -227,26 +226,31 @@ static struct super_block *jffs2_get_sb(
 	if (err)
 		return ERR_PTR(err);
 
-	if (!S_ISBLK(nd.dentry->d_inode->i_mode)) {
-		path_release(&nd);
-		return ERR_PTR(-EINVAL);
-	}
+	err = -EINVAL;
+
+	if (!S_ISBLK(nd.dentry->d_inode->i_mode))
+		goto out;
+
 	if (nd.mnt->mnt_flags & MNT_NODEV) {
-		path_release(&nd);
-		return ERR_PTR(-EACCES);
+		err = -EACCES;
+		goto out;
 	}
 
-	dev = nd.dentry->d_inode->i_rdev;
-	path_release(&nd);
-
-	if (MAJOR(dev) != MTD_BLOCK_MAJOR) {
+	if (imajor(nd.dentry->d_inode) != MTD_BLOCK_MAJOR) {
 		if (!(flags & MS_VERBOSE)) /* Yes I mean this. Strangely */
 			printk(KERN_NOTICE "Attempt to mount non-MTD device \"%s\" as JFFS2\n",
 			       dev_name);
-		return ERR_PTR(-EINVAL);
+		goto out;
 	}
 
-	return jffs2_get_sb_mtdnr(fs_type, flags, dev_name, data, MINOR(dev));
+	mtdnr = iminor(nd.dentry->d_inode);
+	path_release(&nd);
+
+	return jffs2_get_sb_mtdnr(fs_type, flags, dev_name, data, mtdnr);
+
+out:
+	path_release(&nd);
+	return ERR_PTR(err);
 }
 
 

_