logfs get_sb, part 3
take logfs_get_sb_device() calls to logfs_get_sb() itself Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
		
					parent
					
						
							
								0d85c79962
							
						
					
				
			
			
				commit
				
					
						7d945a3aa7
					
				
			
		
					 4 changed files with 29 additions and 39 deletions
				
			
		|  | @ -9,7 +9,6 @@ | |||
| #include <linux/bio.h> | ||||
| #include <linux/blkdev.h> | ||||
| #include <linux/buffer_head.h> | ||||
| #include <linux/slab.h> | ||||
| #include <linux/gfp.h> | ||||
| 
 | ||||
| #define PAGE_OFS(ofs) ((ofs) & (PAGE_SIZE-1)) | ||||
|  | @ -321,27 +320,23 @@ static const struct logfs_device_ops bd_devops = { | |||
| 	.put_device	= bdev_put_device, | ||||
| }; | ||||
| 
 | ||||
| int logfs_get_sb_bdev(struct logfs_super *p, | ||||
| 		struct file_system_type *type, int flags, | ||||
| 		const char *devname, struct vfsmount *mnt) | ||||
| int logfs_get_sb_bdev(struct logfs_super *p, struct file_system_type *type, | ||||
| 		const char *devname) | ||||
| { | ||||
| 	struct block_device *bdev; | ||||
| 
 | ||||
| 	bdev = open_bdev_exclusive(devname, FMODE_READ|FMODE_WRITE, type); | ||||
| 	if (IS_ERR(bdev)) { | ||||
| 		kfree(p); | ||||
| 	if (IS_ERR(bdev)) | ||||
| 		return PTR_ERR(bdev); | ||||
| 	} | ||||
| 
 | ||||
| 	if (MAJOR(bdev->bd_dev) == MTD_BLOCK_MAJOR) { | ||||
| 		int mtdnr = MINOR(bdev->bd_dev); | ||||
| 		close_bdev_exclusive(bdev, FMODE_READ|FMODE_WRITE); | ||||
| 		return logfs_get_sb_mtd(p, type, flags, mtdnr, mnt); | ||||
| 		return logfs_get_sb_mtd(p, mtdnr); | ||||
| 	} | ||||
| 
 | ||||
| 	p->s_bdev = bdev; | ||||
| 	p->s_mtd = NULL; | ||||
| 	p->s_devops = &bd_devops; | ||||
| 
 | ||||
| 	return logfs_get_sb_device(p, type, flags, mnt); | ||||
| 	return 0; | ||||
| } | ||||
|  |  | |||
|  | @ -265,18 +265,14 @@ static const struct logfs_device_ops mtd_devops = { | |||
| 	.put_device	= mtd_put_device, | ||||
| }; | ||||
| 
 | ||||
| int logfs_get_sb_mtd(struct logfs_super *s, | ||||
| 		struct file_system_type *type, int flags, | ||||
| 		int mtdnr, struct vfsmount *mnt) | ||||
| int logfs_get_sb_mtd(struct logfs_super *s, int mtdnr) | ||||
| { | ||||
| 	struct mtd_info *mtd = get_mtd_device(NULL, mtdnr); | ||||
| 	if (IS_ERR(mtd)) { | ||||
| 		kfree(s); | ||||
| 	if (IS_ERR(mtd)) | ||||
| 		return PTR_ERR(mtd); | ||||
| 	} | ||||
| 
 | ||||
| 	s->s_bdev = NULL; | ||||
| 	s->s_mtd = mtd; | ||||
| 	s->s_devops = &mtd_devops; | ||||
| 	return logfs_get_sb_device(s, type, flags, mnt); | ||||
| 	return 0; | ||||
| } | ||||
|  |  | |||
|  | @ -472,29 +472,23 @@ void logfs_compr_exit(void); | |||
| /* dev_bdev.c */ | ||||
| #ifdef CONFIG_BLOCK | ||||
| int logfs_get_sb_bdev(struct logfs_super *s, | ||||
| 		struct file_system_type *type, int flags, | ||||
| 		const char *devname, struct vfsmount *mnt); | ||||
| 		struct file_system_type *type, | ||||
| 		const char *devname); | ||||
| #else | ||||
| static inline int logfs_get_sb_bdev(struct logfs_super *s, | ||||
| 		struct file_system_type *type, int flags, | ||||
| 		const char *devname, struct vfsmount *mnt) | ||||
| 		struct file_system_type *type, | ||||
| 		const char *devname) | ||||
| { | ||||
| 	kfree(s); | ||||
| 	return -ENODEV; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| /* dev_mtd.c */ | ||||
| #ifdef CONFIG_MTD | ||||
| int logfs_get_sb_mtd(struct logfs_super *s, | ||||
| 		struct file_system_type *type, int flags, | ||||
| 		int mtdnr, struct vfsmount *mnt); | ||||
| int logfs_get_sb_mtd(struct logfs_super *s, int mtdnr) | ||||
| #else | ||||
| static inline int logfs_get_sb_mtd(struct logfs_super *s, | ||||
| 		struct file_system_type *type, int flags, | ||||
| 		int mtdnr, struct vfsmount *mnt) | ||||
| static inline int logfs_get_sb_mtd(struct logfs_super *s, int mtdnr) | ||||
| { | ||||
| 	kfree(s); | ||||
| 	return -ENODEV; | ||||
| } | ||||
| #endif | ||||
|  |  | |||
|  | @ -596,26 +596,31 @@ static int logfs_get_sb(struct file_system_type *type, int flags, | |||
| { | ||||
| 	ulong mtdnr; | ||||
| 	struct logfs_super *super; | ||||
| 	int err; | ||||
| 
 | ||||
| 	super = kzalloc(sizeof(*super), GFP_KERNEL); | ||||
| 	if (!super) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
| 	if (!devname) | ||||
| 		return logfs_get_sb_bdev(super, type, flags, devname, mnt); | ||||
| 	if (strncmp(devname, "mtd", 3)) | ||||
| 		return logfs_get_sb_bdev(super, type, flags, devname, mnt); | ||||
| 
 | ||||
| 	{ | ||||
| 		err = logfs_get_sb_bdev(super, type, devname); | ||||
| 	else if (strncmp(devname, "mtd", 3)) | ||||
| 		err = logfs_get_sb_bdev(super, type, devname); | ||||
| 	else { | ||||
| 		char *garbage; | ||||
| 		mtdnr = simple_strtoul(devname+3, &garbage, 0); | ||||
| 		if (*garbage) { | ||||
| 			kfree(super); | ||||
| 			return -EINVAL; | ||||
| 		} | ||||
| 		if (*garbage) | ||||
| 			err = -EINVAL; | ||||
| 		else | ||||
| 			err = logfs_get_sb_mtd(super, mtdnr); | ||||
| 	} | ||||
| 
 | ||||
| 	return logfs_get_sb_mtd(super, type, flags, mtdnr, mnt); | ||||
| 	if (err) { | ||||
| 		kfree(super); | ||||
| 		return err; | ||||
| 	} | ||||
| 
 | ||||
| 	return logfs_get_sb_device(super, type, flags, mnt); | ||||
| } | ||||
| 
 | ||||
| static struct file_system_type logfs_fs_type = { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Al Viro
				Al Viro