Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7d945a3a authored by Al Viro's avatar Al Viro
Browse files

logfs get_sb, part 3



take logfs_get_sb_device() calls to logfs_get_sb() itself

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 0d85c799
Loading
Loading
Loading
Loading
+5 −10
Original line number Diff line number Diff line
@@ -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;
}
+3 −7
Original line number Diff line number Diff line
@@ -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;
}
+6 −12
Original line number Diff line number Diff line
@@ -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
+15 −10
Original line number Diff line number Diff line
@@ -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);
	}

	if (err) {
		kfree(super);
		return err;
	}

	return logfs_get_sb_mtd(super, type, flags, mtdnr, mnt);
	return logfs_get_sb_device(super, type, flags, mnt);
}

static struct file_system_type logfs_fs_type = {