Loading fs/logfs/dev_bdev.c +8 −4 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ #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)) Loading Loading @@ -320,20 +321,23 @@ static const struct logfs_device_ops bd_devops = { .put_device = bdev_put_device, }; int logfs_get_sb_bdev(struct file_system_type *type, int flags, int logfs_get_sb_bdev(struct logfs_super *p, struct file_system_type *type, int flags, const char *devname, struct vfsmount *mnt) { struct block_device *bdev; bdev = open_bdev_exclusive(devname, FMODE_READ|FMODE_WRITE, type); if (IS_ERR(bdev)) if (IS_ERR(bdev)) { kfree(p); 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(type, flags, mtdnr, mnt); return logfs_get_sb_mtd(p, type, flags, mtdnr, mnt); } return logfs_get_sb_device(type, flags, NULL, bdev, &bd_devops, mnt); return logfs_get_sb_device(p, type, flags, NULL, bdev, &bd_devops, mnt); } fs/logfs/dev_mtd.c +6 −3 Original line number Diff line number Diff line Loading @@ -265,14 +265,17 @@ static const struct logfs_device_ops mtd_devops = { .put_device = mtd_put_device, }; int logfs_get_sb_mtd(struct file_system_type *type, int flags, int logfs_get_sb_mtd(struct logfs_super *s, struct file_system_type *type, int flags, int mtdnr, struct vfsmount *mnt) { struct mtd_info *mtd; const struct logfs_device_ops *devops = &mtd_devops; mtd = get_mtd_device(NULL, mtdnr); if (IS_ERR(mtd)) if (IS_ERR(mtd)) { kfree(s); return PTR_ERR(mtd); return logfs_get_sb_device(type, flags, mtd, NULL, devops, mnt); } return logfs_get_sb_device(s, type, flags, mtd, NULL, devops, mnt); } fs/logfs/logfs.h +12 −5 Original line number Diff line number Diff line Loading @@ -471,24 +471,30 @@ void logfs_compr_exit(void); /* dev_bdev.c */ #ifdef CONFIG_BLOCK int logfs_get_sb_bdev(struct file_system_type *type, int flags, int logfs_get_sb_bdev(struct logfs_super *s, struct file_system_type *type, int flags, const char *devname, struct vfsmount *mnt); #else static inline int logfs_get_sb_bdev(struct file_system_type *type, int flags, static inline int logfs_get_sb_bdev(struct logfs_super *s, struct file_system_type *type, int flags, const char *devname, struct vfsmount *mnt) { kfree(s); return -ENODEV; } #endif /* dev_mtd.c */ #ifdef CONFIG_MTD int logfs_get_sb_mtd(struct file_system_type *type, int flags, int logfs_get_sb_mtd(struct logfs_super *s, struct file_system_type *type, int flags, int mtdnr, struct vfsmount *mnt); #else static inline int logfs_get_sb_mtd(struct file_system_type *type, int flags, static inline int logfs_get_sb_mtd(struct logfs_super *s, struct file_system_type *type, int flags, int mtdnr, struct vfsmount *mnt) { kfree(s); return -ENODEV; } #endif Loading Loading @@ -619,7 +625,8 @@ void emergency_read_end(struct page *page); void logfs_crash_dump(struct super_block *sb); void *memchr_inv(const void *s, int c, size_t n); int logfs_statfs(struct dentry *dentry, struct kstatfs *stats); int logfs_get_sb_device(struct file_system_type *type, int flags, int logfs_get_sb_device(struct logfs_super *s, struct file_system_type *type, int flags, struct mtd_info *mtd, struct block_device *bdev, const struct logfs_device_ops *devops, struct vfsmount *mnt); int logfs_check_ds(struct logfs_disk_super *ds); Loading fs/logfs/super.c +13 −9 Original line number Diff line number Diff line Loading @@ -536,19 +536,16 @@ static void logfs_kill_sb(struct super_block *sb) log_super("LogFS: Finished unmounting\n"); } int logfs_get_sb_device(struct file_system_type *type, int flags, int logfs_get_sb_device(struct logfs_super *super, struct file_system_type *type, int flags, struct mtd_info *mtd, struct block_device *bdev, const struct logfs_device_ops *devops, struct vfsmount *mnt) { struct logfs_super *super; struct super_block *sb; int err = -ENOMEM; static int mount_count; log_super("LogFS: Start mount %x\n", mount_count++); super = kzalloc(sizeof(*super), GFP_KERNEL); if (!super) goto err0; super->s_mtd = mtd; super->s_bdev = bdev; Loading Loading @@ -603,20 +600,27 @@ static int logfs_get_sb(struct file_system_type *type, int flags, const char *devname, void *data, struct vfsmount *mnt) { ulong mtdnr; struct logfs_super *super; super = kzalloc(sizeof(*super), GFP_KERNEL); if (!super) return -ENOMEM; if (!devname) return logfs_get_sb_bdev(type, flags, devname, mnt); return logfs_get_sb_bdev(super, type, flags, devname, mnt); if (strncmp(devname, "mtd", 3)) return logfs_get_sb_bdev(type, flags, devname, mnt); return logfs_get_sb_bdev(super, type, flags, devname, mnt); { char *garbage; mtdnr = simple_strtoul(devname+3, &garbage, 0); if (*garbage) if (*garbage) { kfree(super); return -EINVAL; } } return logfs_get_sb_mtd(type, flags, mtdnr, mnt); return logfs_get_sb_mtd(super, type, flags, mtdnr, mnt); } static struct file_system_type logfs_fs_type = { Loading Loading
fs/logfs/dev_bdev.c +8 −4 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ #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)) Loading Loading @@ -320,20 +321,23 @@ static const struct logfs_device_ops bd_devops = { .put_device = bdev_put_device, }; int logfs_get_sb_bdev(struct file_system_type *type, int flags, int logfs_get_sb_bdev(struct logfs_super *p, struct file_system_type *type, int flags, const char *devname, struct vfsmount *mnt) { struct block_device *bdev; bdev = open_bdev_exclusive(devname, FMODE_READ|FMODE_WRITE, type); if (IS_ERR(bdev)) if (IS_ERR(bdev)) { kfree(p); 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(type, flags, mtdnr, mnt); return logfs_get_sb_mtd(p, type, flags, mtdnr, mnt); } return logfs_get_sb_device(type, flags, NULL, bdev, &bd_devops, mnt); return logfs_get_sb_device(p, type, flags, NULL, bdev, &bd_devops, mnt); }
fs/logfs/dev_mtd.c +6 −3 Original line number Diff line number Diff line Loading @@ -265,14 +265,17 @@ static const struct logfs_device_ops mtd_devops = { .put_device = mtd_put_device, }; int logfs_get_sb_mtd(struct file_system_type *type, int flags, int logfs_get_sb_mtd(struct logfs_super *s, struct file_system_type *type, int flags, int mtdnr, struct vfsmount *mnt) { struct mtd_info *mtd; const struct logfs_device_ops *devops = &mtd_devops; mtd = get_mtd_device(NULL, mtdnr); if (IS_ERR(mtd)) if (IS_ERR(mtd)) { kfree(s); return PTR_ERR(mtd); return logfs_get_sb_device(type, flags, mtd, NULL, devops, mnt); } return logfs_get_sb_device(s, type, flags, mtd, NULL, devops, mnt); }
fs/logfs/logfs.h +12 −5 Original line number Diff line number Diff line Loading @@ -471,24 +471,30 @@ void logfs_compr_exit(void); /* dev_bdev.c */ #ifdef CONFIG_BLOCK int logfs_get_sb_bdev(struct file_system_type *type, int flags, int logfs_get_sb_bdev(struct logfs_super *s, struct file_system_type *type, int flags, const char *devname, struct vfsmount *mnt); #else static inline int logfs_get_sb_bdev(struct file_system_type *type, int flags, static inline int logfs_get_sb_bdev(struct logfs_super *s, struct file_system_type *type, int flags, const char *devname, struct vfsmount *mnt) { kfree(s); return -ENODEV; } #endif /* dev_mtd.c */ #ifdef CONFIG_MTD int logfs_get_sb_mtd(struct file_system_type *type, int flags, int logfs_get_sb_mtd(struct logfs_super *s, struct file_system_type *type, int flags, int mtdnr, struct vfsmount *mnt); #else static inline int logfs_get_sb_mtd(struct file_system_type *type, int flags, static inline int logfs_get_sb_mtd(struct logfs_super *s, struct file_system_type *type, int flags, int mtdnr, struct vfsmount *mnt) { kfree(s); return -ENODEV; } #endif Loading Loading @@ -619,7 +625,8 @@ void emergency_read_end(struct page *page); void logfs_crash_dump(struct super_block *sb); void *memchr_inv(const void *s, int c, size_t n); int logfs_statfs(struct dentry *dentry, struct kstatfs *stats); int logfs_get_sb_device(struct file_system_type *type, int flags, int logfs_get_sb_device(struct logfs_super *s, struct file_system_type *type, int flags, struct mtd_info *mtd, struct block_device *bdev, const struct logfs_device_ops *devops, struct vfsmount *mnt); int logfs_check_ds(struct logfs_disk_super *ds); Loading
fs/logfs/super.c +13 −9 Original line number Diff line number Diff line Loading @@ -536,19 +536,16 @@ static void logfs_kill_sb(struct super_block *sb) log_super("LogFS: Finished unmounting\n"); } int logfs_get_sb_device(struct file_system_type *type, int flags, int logfs_get_sb_device(struct logfs_super *super, struct file_system_type *type, int flags, struct mtd_info *mtd, struct block_device *bdev, const struct logfs_device_ops *devops, struct vfsmount *mnt) { struct logfs_super *super; struct super_block *sb; int err = -ENOMEM; static int mount_count; log_super("LogFS: Start mount %x\n", mount_count++); super = kzalloc(sizeof(*super), GFP_KERNEL); if (!super) goto err0; super->s_mtd = mtd; super->s_bdev = bdev; Loading Loading @@ -603,20 +600,27 @@ static int logfs_get_sb(struct file_system_type *type, int flags, const char *devname, void *data, struct vfsmount *mnt) { ulong mtdnr; struct logfs_super *super; super = kzalloc(sizeof(*super), GFP_KERNEL); if (!super) return -ENOMEM; if (!devname) return logfs_get_sb_bdev(type, flags, devname, mnt); return logfs_get_sb_bdev(super, type, flags, devname, mnt); if (strncmp(devname, "mtd", 3)) return logfs_get_sb_bdev(type, flags, devname, mnt); return logfs_get_sb_bdev(super, type, flags, devname, mnt); { char *garbage; mtdnr = simple_strtoul(devname+3, &garbage, 0); if (*garbage) if (*garbage) { kfree(super); return -EINVAL; } } return logfs_get_sb_mtd(type, flags, mtdnr, mnt); return logfs_get_sb_mtd(super, type, flags, mtdnr, mnt); } static struct file_system_type logfs_fs_type = { Loading