int err;
struct nameidata nd;
int mtdnr;
- dev_t dev;
if (!dev_name)
return ERR_PTR(-EINVAL);
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);
}