[PATCH] switch mtd and dm-table to lookup_bdev()
authorAl Viro <viro@zeniv.linux.org.uk>
Fri, 1 Aug 2008 09:00:11 +0000 (05:00 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 1 Aug 2008 15:25:31 +0000 (11:25 -0400)
No need to open-code it...

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/md/dm-table.c
drivers/mtd/mtdsuper.c
fs/block_dev.c

index 798e468..61f4414 100644 (file)
@@ -316,29 +316,12 @@ static inline int check_space(struct dm_table *t)
  */
 static int lookup_device(const char *path, dev_t *dev)
 {
-       int r;
-       struct nameidata nd;
-       struct inode *inode;
-
-       if ((r = path_lookup(path, LOOKUP_FOLLOW, &nd)))
-               return r;
-
-       inode = nd.path.dentry->d_inode;
-       if (!inode) {
-               r = -ENOENT;
-               goto out;
-       }
-
-       if (!S_ISBLK(inode->i_mode)) {
-               r = -ENOTBLK;
-               goto out;
-       }
-
-       *dev = inode->i_rdev;
-
- out:
-       path_put(&nd.path);
-       return r;
+       struct block_device *bdev = lookup_bdev(path);
+       if (IS_ERR(bdev))
+               return PTR_ERR(bdev);
+       *dev = bdev->bd_dev;
+       bdput(bdev);
+       return 0;
 }
 
 /*
index 28cc678..9b6af7e 100644 (file)
@@ -125,7 +125,7 @@ int get_sb_mtd(struct file_system_type *fs_type, int flags,
               int (*fill_super)(struct super_block *, void *, int),
               struct vfsmount *mnt)
 {
-       struct nameidata nd;
+       struct block_device *bdev;
        int mtdnr, ret;
 
        if (!dev_name)
@@ -181,29 +181,20 @@ int get_sb_mtd(struct file_system_type *fs_type, int flags,
        /* try the old way - the hack where we allowed users to mount
         * /dev/mtdblock$(n) but didn't actually _use_ the blockdev
         */
-       ret = path_lookup(dev_name, LOOKUP_FOLLOW, &nd);
-
-       DEBUG(1, "MTDSB: path_lookup() returned %d, inode %p\n",
-             ret, nd.path.dentry ? nd.path.dentry->d_inode : NULL);
-
-       if (ret)
+       bdev = lookup_bdev(dev_name);
+       if (IS_ERR(bdev)) {
+               ret = PTR_ERR(bdev);
+               DEBUG(1, "MTDSB: lookup_bdev() returned %d\n", ret);
                return ret;
-
-       ret = -EINVAL;
-
-       if (!S_ISBLK(nd.path.dentry->d_inode->i_mode))
-               goto out;
-
-       if (nd.path.mnt->mnt_flags & MNT_NODEV) {
-               ret = -EACCES;
-               goto out;
        }
+       DEBUG(1, "MTDSB: lookup_bdev() returned 0\n");
 
-       if (imajor(nd.path.dentry->d_inode) != MTD_BLOCK_MAJOR)
+       ret = -EINVAL;
+       if (MAJOR(bdev->bd_dev) != MTD_BLOCK_MAJOR)
                goto not_an_MTD_device;
 
-       mtdnr = iminor(nd.path.dentry->d_inode);
-       path_put(&nd.path);
+       mtdnr = MINOR(bdev->bd_dev);
+       bdput(bdev);
 
        return get_sb_mtd_nr(fs_type, flags, dev_name, data, mtdnr, fill_super,
                             mnt);
@@ -213,10 +204,8 @@ not_an_MTD_device:
                printk(KERN_NOTICE
                       "MTD: Attempt to mount non-MTD device \"%s\"\n",
                       dev_name);
-out:
-       path_put(&nd.path);
+       bdput(bdev);
        return ret;
-
 }
 
 EXPORT_SYMBOL_GPL(get_sb_mtd);
index e664b0b..aff5421 100644 (file)
@@ -1236,6 +1236,7 @@ fail:
        bdev = ERR_PTR(error);
        goto out;
 }
+EXPORT_SYMBOL(lookup_bdev);
 
 /**
  * open_bdev_excl  -  open a block device by name and set it up for use