diff options
Diffstat (limited to 'fs/logfs')
-rw-r--r-- | fs/logfs/dev_bdev.c | 15 | ||||
-rw-r--r-- | fs/logfs/dev_mtd.c | 10 | ||||
-rw-r--r-- | fs/logfs/logfs.h | 18 | ||||
-rw-r--r-- | fs/logfs/super.c | 25 |
4 files changed, 29 insertions, 39 deletions
diff --git a/fs/logfs/dev_bdev.c b/fs/logfs/dev_bdev.c index a322fec10173..223b673dcc7b 100644 --- a/fs/logfs/dev_bdev.c +++ b/fs/logfs/dev_bdev.c | |||
@@ -9,7 +9,6 @@ | |||
9 | #include <linux/bio.h> | 9 | #include <linux/bio.h> |
10 | #include <linux/blkdev.h> | 10 | #include <linux/blkdev.h> |
11 | #include <linux/buffer_head.h> | 11 | #include <linux/buffer_head.h> |
12 | #include <linux/slab.h> | ||
13 | #include <linux/gfp.h> | 12 | #include <linux/gfp.h> |
14 | 13 | ||
15 | #define PAGE_OFS(ofs) ((ofs) & (PAGE_SIZE-1)) | 14 | #define PAGE_OFS(ofs) ((ofs) & (PAGE_SIZE-1)) |
@@ -321,27 +320,23 @@ static const struct logfs_device_ops bd_devops = { | |||
321 | .put_device = bdev_put_device, | 320 | .put_device = bdev_put_device, |
322 | }; | 321 | }; |
323 | 322 | ||
324 | int logfs_get_sb_bdev(struct logfs_super *p, | 323 | int logfs_get_sb_bdev(struct logfs_super *p, struct file_system_type *type, |
325 | struct file_system_type *type, int flags, | 324 | const char *devname) |
326 | const char *devname, struct vfsmount *mnt) | ||
327 | { | 325 | { |
328 | struct block_device *bdev; | 326 | struct block_device *bdev; |
329 | 327 | ||
330 | bdev = open_bdev_exclusive(devname, FMODE_READ|FMODE_WRITE, type); | 328 | bdev = open_bdev_exclusive(devname, FMODE_READ|FMODE_WRITE, type); |
331 | if (IS_ERR(bdev)) { | 329 | if (IS_ERR(bdev)) |
332 | kfree(p); | ||
333 | return PTR_ERR(bdev); | 330 | return PTR_ERR(bdev); |
334 | } | ||
335 | 331 | ||
336 | if (MAJOR(bdev->bd_dev) == MTD_BLOCK_MAJOR) { | 332 | if (MAJOR(bdev->bd_dev) == MTD_BLOCK_MAJOR) { |
337 | int mtdnr = MINOR(bdev->bd_dev); | 333 | int mtdnr = MINOR(bdev->bd_dev); |
338 | close_bdev_exclusive(bdev, FMODE_READ|FMODE_WRITE); | 334 | close_bdev_exclusive(bdev, FMODE_READ|FMODE_WRITE); |
339 | return logfs_get_sb_mtd(p, type, flags, mtdnr, mnt); | 335 | return logfs_get_sb_mtd(p, mtdnr); |
340 | } | 336 | } |
341 | 337 | ||
342 | p->s_bdev = bdev; | 338 | p->s_bdev = bdev; |
343 | p->s_mtd = NULL; | 339 | p->s_mtd = NULL; |
344 | p->s_devops = &bd_devops; | 340 | p->s_devops = &bd_devops; |
345 | 341 | return 0; | |
346 | return logfs_get_sb_device(p, type, flags, mnt); | ||
347 | } | 342 | } |
diff --git a/fs/logfs/dev_mtd.c b/fs/logfs/dev_mtd.c index 7b22d57d1469..9e3dbe3712ae 100644 --- a/fs/logfs/dev_mtd.c +++ b/fs/logfs/dev_mtd.c | |||
@@ -265,18 +265,14 @@ static const struct logfs_device_ops mtd_devops = { | |||
265 | .put_device = mtd_put_device, | 265 | .put_device = mtd_put_device, |
266 | }; | 266 | }; |
267 | 267 | ||
268 | int logfs_get_sb_mtd(struct logfs_super *s, | 268 | int logfs_get_sb_mtd(struct logfs_super *s, int mtdnr) |
269 | struct file_system_type *type, int flags, | ||
270 | int mtdnr, struct vfsmount *mnt) | ||
271 | { | 269 | { |
272 | struct mtd_info *mtd = get_mtd_device(NULL, mtdnr); | 270 | struct mtd_info *mtd = get_mtd_device(NULL, mtdnr); |
273 | if (IS_ERR(mtd)) { | 271 | if (IS_ERR(mtd)) |
274 | kfree(s); | ||
275 | return PTR_ERR(mtd); | 272 | return PTR_ERR(mtd); |
276 | } | ||
277 | 273 | ||
278 | s->s_bdev = NULL; | 274 | s->s_bdev = NULL; |
279 | s->s_mtd = mtd; | 275 | s->s_mtd = mtd; |
280 | s->s_devops = &mtd_devops; | 276 | s->s_devops = &mtd_devops; |
281 | return logfs_get_sb_device(s, type, flags, mnt); | 277 | return 0; |
282 | } | 278 | } |
diff --git a/fs/logfs/logfs.h b/fs/logfs/logfs.h index bdd56fa4b084..5d2e66b48290 100644 --- a/fs/logfs/logfs.h +++ b/fs/logfs/logfs.h | |||
@@ -472,29 +472,23 @@ void logfs_compr_exit(void); | |||
472 | /* dev_bdev.c */ | 472 | /* dev_bdev.c */ |
473 | #ifdef CONFIG_BLOCK | 473 | #ifdef CONFIG_BLOCK |
474 | int logfs_get_sb_bdev(struct logfs_super *s, | 474 | int logfs_get_sb_bdev(struct logfs_super *s, |
475 | struct file_system_type *type, int flags, | 475 | struct file_system_type *type, |
476 | const char *devname, struct vfsmount *mnt); | 476 | const char *devname); |
477 | #else | 477 | #else |
478 | static inline int logfs_get_sb_bdev(struct logfs_super *s, | 478 | static inline int logfs_get_sb_bdev(struct logfs_super *s, |
479 | struct file_system_type *type, int flags, | 479 | struct file_system_type *type, |
480 | const char *devname, struct vfsmount *mnt) | 480 | const char *devname) |
481 | { | 481 | { |
482 | kfree(s); | ||
483 | return -ENODEV; | 482 | return -ENODEV; |
484 | } | 483 | } |
485 | #endif | 484 | #endif |
486 | 485 | ||
487 | /* dev_mtd.c */ | 486 | /* dev_mtd.c */ |
488 | #ifdef CONFIG_MTD | 487 | #ifdef CONFIG_MTD |
489 | int logfs_get_sb_mtd(struct logfs_super *s, | 488 | int logfs_get_sb_mtd(struct logfs_super *s, int mtdnr) |
490 | struct file_system_type *type, int flags, | ||
491 | int mtdnr, struct vfsmount *mnt); | ||
492 | #else | 489 | #else |
493 | static inline int logfs_get_sb_mtd(struct logfs_super *s, | 490 | static inline int logfs_get_sb_mtd(struct logfs_super *s, int mtdnr) |
494 | struct file_system_type *type, int flags, | ||
495 | int mtdnr, struct vfsmount *mnt) | ||
496 | { | 491 | { |
497 | kfree(s); | ||
498 | return -ENODEV; | 492 | return -ENODEV; |
499 | } | 493 | } |
500 | #endif | 494 | #endif |
diff --git a/fs/logfs/super.c b/fs/logfs/super.c index c80837e54bb3..f57a150b4779 100644 --- a/fs/logfs/super.c +++ b/fs/logfs/super.c | |||
@@ -596,26 +596,31 @@ static int logfs_get_sb(struct file_system_type *type, int flags, | |||
596 | { | 596 | { |
597 | ulong mtdnr; | 597 | ulong mtdnr; |
598 | struct logfs_super *super; | 598 | struct logfs_super *super; |
599 | int err; | ||
599 | 600 | ||
600 | super = kzalloc(sizeof(*super), GFP_KERNEL); | 601 | super = kzalloc(sizeof(*super), GFP_KERNEL); |
601 | if (!super) | 602 | if (!super) |
602 | return -ENOMEM; | 603 | return -ENOMEM; |
603 | 604 | ||
604 | if (!devname) | 605 | if (!devname) |
605 | return logfs_get_sb_bdev(super, type, flags, devname, mnt); | 606 | err = logfs_get_sb_bdev(super, type, devname); |
606 | if (strncmp(devname, "mtd", 3)) | 607 | else if (strncmp(devname, "mtd", 3)) |
607 | return logfs_get_sb_bdev(super, type, flags, devname, mnt); | 608 | err = logfs_get_sb_bdev(super, type, devname); |
608 | 609 | else { | |
609 | { | ||
610 | char *garbage; | 610 | char *garbage; |
611 | mtdnr = simple_strtoul(devname+3, &garbage, 0); | 611 | mtdnr = simple_strtoul(devname+3, &garbage, 0); |
612 | if (*garbage) { | 612 | if (*garbage) |
613 | kfree(super); | 613 | err = -EINVAL; |
614 | return -EINVAL; | 614 | else |
615 | } | 615 | err = logfs_get_sb_mtd(super, mtdnr); |
616 | } | ||
617 | |||
618 | if (err) { | ||
619 | kfree(super); | ||
620 | return err; | ||
616 | } | 621 | } |
617 | 622 | ||
618 | return logfs_get_sb_mtd(super, type, flags, mtdnr, mnt); | 623 | return logfs_get_sb_device(super, type, flags, mnt); |
619 | } | 624 | } |
620 | 625 | ||
621 | static struct file_system_type logfs_fs_type = { | 626 | static struct file_system_type logfs_fs_type = { |