diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-06-03 17:33:44 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-06-03 17:33:44 -0400 |
| commit | 0ab60871b451b857206d7afc0d3033be866f76b4 (patch) | |
| tree | 72dd70aba74f00cf78eeba41817b4b56622fafcf | |
| parent | aa4f608478acb7ed69dfcff4f3c404100b78ac49 (diff) | |
| parent | 95bbb82f60c80808e5a49d8233c2de8451901531 (diff) | |
Merge tag 'jfs-3.10-rc5' of git://github.com/kleikamp/linux-shaggy
Pull jfs bugfixes from David Kleikamp:
"A couple jfs bug fixes for 3.10-rc5"
* tag 'jfs-3.10-rc5' of git://github.com/kleikamp/linux-shaggy:
fs/jfs: Add check if journaling to disk has been disabled in lbmRead()
jfs: Several bugs in jfs_freeze() and jfs_unfreeze()
| -rw-r--r-- | fs/jfs/jfs_logmgr.c | 8 | ||||
| -rw-r--r-- | fs/jfs/super.c | 38 |
2 files changed, 37 insertions, 9 deletions
diff --git a/fs/jfs/jfs_logmgr.c b/fs/jfs/jfs_logmgr.c index c57499dca89c..360d27c48887 100644 --- a/fs/jfs/jfs_logmgr.c +++ b/fs/jfs/jfs_logmgr.c | |||
| @@ -2009,7 +2009,13 @@ static int lbmRead(struct jfs_log * log, int pn, struct lbuf ** bpp) | |||
| 2009 | 2009 | ||
| 2010 | bio->bi_end_io = lbmIODone; | 2010 | bio->bi_end_io = lbmIODone; |
| 2011 | bio->bi_private = bp; | 2011 | bio->bi_private = bp; |
| 2012 | submit_bio(READ_SYNC, bio); | 2012 | /*check if journaling to disk has been disabled*/ |
| 2013 | if (log->no_integrity) { | ||
| 2014 | bio->bi_size = 0; | ||
| 2015 | lbmIODone(bio, 0); | ||
| 2016 | } else { | ||
| 2017 | submit_bio(READ_SYNC, bio); | ||
| 2018 | } | ||
| 2013 | 2019 | ||
| 2014 | wait_event(bp->l_ioevent, (bp->l_flag != lbmREAD)); | 2020 | wait_event(bp->l_ioevent, (bp->l_flag != lbmREAD)); |
| 2015 | 2021 | ||
diff --git a/fs/jfs/super.c b/fs/jfs/super.c index 2003e830ed1c..788e0a9c1fb0 100644 --- a/fs/jfs/super.c +++ b/fs/jfs/super.c | |||
| @@ -611,11 +611,28 @@ static int jfs_freeze(struct super_block *sb) | |||
| 611 | { | 611 | { |
| 612 | struct jfs_sb_info *sbi = JFS_SBI(sb); | 612 | struct jfs_sb_info *sbi = JFS_SBI(sb); |
| 613 | struct jfs_log *log = sbi->log; | 613 | struct jfs_log *log = sbi->log; |
| 614 | int rc = 0; | ||
| 614 | 615 | ||
| 615 | if (!(sb->s_flags & MS_RDONLY)) { | 616 | if (!(sb->s_flags & MS_RDONLY)) { |
| 616 | txQuiesce(sb); | 617 | txQuiesce(sb); |
| 617 | lmLogShutdown(log); | 618 | rc = lmLogShutdown(log); |
| 618 | updateSuper(sb, FM_CLEAN); | 619 | if (rc) { |
| 620 | jfs_error(sb, "jfs_freeze: lmLogShutdown failed"); | ||
| 621 | |||
| 622 | /* let operations fail rather than hang */ | ||
| 623 | txResume(sb); | ||
| 624 | |||
| 625 | return rc; | ||
| 626 | } | ||
| 627 | rc = updateSuper(sb, FM_CLEAN); | ||
| 628 | if (rc) { | ||
| 629 | jfs_err("jfs_freeze: updateSuper failed\n"); | ||
| 630 | /* | ||
| 631 | * Don't fail here. Everything succeeded except | ||
| 632 | * marking the superblock clean, so there's really | ||
| 633 | * no harm in leaving it frozen for now. | ||
| 634 | */ | ||
| 635 | } | ||
| 619 | } | 636 | } |
| 620 | return 0; | 637 | return 0; |
| 621 | } | 638 | } |
| @@ -627,13 +644,18 @@ static int jfs_unfreeze(struct super_block *sb) | |||
| 627 | int rc = 0; | 644 | int rc = 0; |
| 628 | 645 | ||
| 629 | if (!(sb->s_flags & MS_RDONLY)) { | 646 | if (!(sb->s_flags & MS_RDONLY)) { |
| 630 | updateSuper(sb, FM_MOUNT); | 647 | rc = updateSuper(sb, FM_MOUNT); |
| 631 | if ((rc = lmLogInit(log))) | 648 | if (rc) { |
| 632 | jfs_err("jfs_unlock failed with return code %d", rc); | 649 | jfs_error(sb, "jfs_unfreeze: updateSuper failed"); |
| 633 | else | 650 | goto out; |
| 634 | txResume(sb); | 651 | } |
| 652 | rc = lmLogInit(log); | ||
| 653 | if (rc) | ||
| 654 | jfs_error(sb, "jfs_unfreeze: lmLogInit failed"); | ||
| 655 | out: | ||
| 656 | txResume(sb); | ||
| 635 | } | 657 | } |
| 636 | return 0; | 658 | return rc; |
| 637 | } | 659 | } |
| 638 | 660 | ||
| 639 | static struct dentry *jfs_do_mount(struct file_system_type *fs_type, | 661 | static struct dentry *jfs_do_mount(struct file_system_type *fs_type, |
