diff options
Diffstat (limited to 'fs/reiserfs')
-rw-r--r-- | fs/reiserfs/journal.c | 50 | ||||
-rw-r--r-- | fs/reiserfs/procfs.c | 9 |
2 files changed, 26 insertions, 33 deletions
diff --git a/fs/reiserfs/journal.c b/fs/reiserfs/journal.c index da86042b3e03..e396b2fa4743 100644 --- a/fs/reiserfs/journal.c +++ b/fs/reiserfs/journal.c | |||
@@ -2574,11 +2574,9 @@ static int release_journal_dev(struct super_block *super, | |||
2574 | 2574 | ||
2575 | result = 0; | 2575 | result = 0; |
2576 | 2576 | ||
2577 | if (journal->j_dev_file != NULL) { | 2577 | if (journal->j_dev_bd != NULL) { |
2578 | result = filp_close(journal->j_dev_file, NULL); | 2578 | if (journal->j_dev_bd->bd_dev != super->s_dev) |
2579 | journal->j_dev_file = NULL; | 2579 | bd_release(journal->j_dev_bd); |
2580 | journal->j_dev_bd = NULL; | ||
2581 | } else if (journal->j_dev_bd != NULL) { | ||
2582 | result = blkdev_put(journal->j_dev_bd); | 2580 | result = blkdev_put(journal->j_dev_bd); |
2583 | journal->j_dev_bd = NULL; | 2581 | journal->j_dev_bd = NULL; |
2584 | } | 2582 | } |
@@ -2603,7 +2601,6 @@ static int journal_init_dev(struct super_block *super, | |||
2603 | result = 0; | 2601 | result = 0; |
2604 | 2602 | ||
2605 | journal->j_dev_bd = NULL; | 2603 | journal->j_dev_bd = NULL; |
2606 | journal->j_dev_file = NULL; | ||
2607 | jdev = SB_ONDISK_JOURNAL_DEVICE(super) ? | 2604 | jdev = SB_ONDISK_JOURNAL_DEVICE(super) ? |
2608 | new_decode_dev(SB_ONDISK_JOURNAL_DEVICE(super)) : super->s_dev; | 2605 | new_decode_dev(SB_ONDISK_JOURNAL_DEVICE(super)) : super->s_dev; |
2609 | 2606 | ||
@@ -2620,35 +2617,34 @@ static int journal_init_dev(struct super_block *super, | |||
2620 | "cannot init journal device '%s': %i", | 2617 | "cannot init journal device '%s': %i", |
2621 | __bdevname(jdev, b), result); | 2618 | __bdevname(jdev, b), result); |
2622 | return result; | 2619 | return result; |
2623 | } else if (jdev != super->s_dev) | 2620 | } else if (jdev != super->s_dev) { |
2621 | result = bd_claim(journal->j_dev_bd, journal); | ||
2622 | if (result) { | ||
2623 | blkdev_put(journal->j_dev_bd); | ||
2624 | return result; | ||
2625 | } | ||
2626 | |||
2624 | set_blocksize(journal->j_dev_bd, super->s_blocksize); | 2627 | set_blocksize(journal->j_dev_bd, super->s_blocksize); |
2628 | } | ||
2629 | |||
2625 | return 0; | 2630 | return 0; |
2626 | } | 2631 | } |
2627 | 2632 | ||
2628 | journal->j_dev_file = filp_open(jdev_name, 0, 0); | 2633 | journal->j_dev_bd = open_bdev_excl(jdev_name, 0, journal); |
2629 | if (!IS_ERR(journal->j_dev_file)) { | 2634 | if (IS_ERR(journal->j_dev_bd)) { |
2630 | struct inode *jdev_inode = journal->j_dev_file->f_mapping->host; | 2635 | result = PTR_ERR(journal->j_dev_bd); |
2631 | if (!S_ISBLK(jdev_inode->i_mode)) { | 2636 | journal->j_dev_bd = NULL; |
2632 | reiserfs_warning(super, "journal_init_dev: '%s' is " | ||
2633 | "not a block device", jdev_name); | ||
2634 | result = -ENOTBLK; | ||
2635 | release_journal_dev(super, journal); | ||
2636 | } else { | ||
2637 | /* ok */ | ||
2638 | journal->j_dev_bd = I_BDEV(jdev_inode); | ||
2639 | set_blocksize(journal->j_dev_bd, super->s_blocksize); | ||
2640 | reiserfs_info(super, | ||
2641 | "journal_init_dev: journal device: %s\n", | ||
2642 | bdevname(journal->j_dev_bd, b)); | ||
2643 | } | ||
2644 | } else { | ||
2645 | result = PTR_ERR(journal->j_dev_file); | ||
2646 | journal->j_dev_file = NULL; | ||
2647 | reiserfs_warning(super, | 2637 | reiserfs_warning(super, |
2648 | "journal_init_dev: Cannot open '%s': %i", | 2638 | "journal_init_dev: Cannot open '%s': %i", |
2649 | jdev_name, result); | 2639 | jdev_name, result); |
2640 | return result; | ||
2650 | } | 2641 | } |
2651 | return result; | 2642 | |
2643 | set_blocksize(journal->j_dev_bd, super->s_blocksize); | ||
2644 | reiserfs_info(super, | ||
2645 | "journal_init_dev: journal device: %s\n", | ||
2646 | bdevname(journal->j_dev_bd, b)); | ||
2647 | return 0; | ||
2652 | } | 2648 | } |
2653 | 2649 | ||
2654 | /** | 2650 | /** |
diff --git a/fs/reiserfs/procfs.c b/fs/reiserfs/procfs.c index 8f86c52b30d8..b9dbeeca7049 100644 --- a/fs/reiserfs/procfs.c +++ b/fs/reiserfs/procfs.c | |||
@@ -467,6 +467,7 @@ static const struct file_operations r_file_operations = { | |||
467 | .read = seq_read, | 467 | .read = seq_read, |
468 | .llseek = seq_lseek, | 468 | .llseek = seq_lseek, |
469 | .release = seq_release, | 469 | .release = seq_release, |
470 | .owner = THIS_MODULE, | ||
470 | }; | 471 | }; |
471 | 472 | ||
472 | static struct proc_dir_entry *proc_info_root = NULL; | 473 | static struct proc_dir_entry *proc_info_root = NULL; |
@@ -475,12 +476,8 @@ static const char proc_info_root_name[] = "fs/reiserfs"; | |||
475 | static void add_file(struct super_block *sb, char *name, | 476 | static void add_file(struct super_block *sb, char *name, |
476 | int (*func) (struct seq_file *, struct super_block *)) | 477 | int (*func) (struct seq_file *, struct super_block *)) |
477 | { | 478 | { |
478 | struct proc_dir_entry *de; | 479 | proc_create_data(name, 0, REISERFS_SB(sb)->procdir, |
479 | de = create_proc_entry(name, 0, REISERFS_SB(sb)->procdir); | 480 | &r_file_operations, func); |
480 | if (de) { | ||
481 | de->data = func; | ||
482 | de->proc_fops = &r_file_operations; | ||
483 | } | ||
484 | } | 481 | } |
485 | 482 | ||
486 | int reiserfs_proc_info_init(struct super_block *sb) | 483 | int reiserfs_proc_info_init(struct super_block *sb) |