mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	[PATCH] switch mtd and dm-table to lookup_bdev()
No need to open-code it... Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
		
							parent
							
								
									a95164d979
								
							
						
					
					
						commit
						d5686b444f
					
				
					 3 changed files with 18 additions and 45 deletions
				
			
		|  | @ -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; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  |  | |||
|  | @ -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; | ||||
| 	} | ||||
| 	DEBUG(1, "MTDSB: lookup_bdev() returned 0\n"); | ||||
| 
 | ||||
| 	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; | ||||
| 	} | ||||
| 
 | ||||
| 	if (imajor(nd.path.dentry->d_inode) != MTD_BLOCK_MAJOR) | ||||
| 	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); | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Al Viro
						Al Viro