Commit 0ab60871 authored by Linus Torvalds's avatar Linus Torvalds

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()
parents aa4f6084 95bbb82f
...@@ -2009,7 +2009,13 @@ static int lbmRead(struct jfs_log * log, int pn, struct lbuf ** bpp) ...@@ -2009,7 +2009,13 @@ static int lbmRead(struct jfs_log * log, int pn, struct lbuf ** bpp)
bio->bi_end_io = lbmIODone; bio->bi_end_io = lbmIODone;
bio->bi_private = bp; bio->bi_private = bp;
/*check if journaling to disk has been disabled*/
if (log->no_integrity) {
bio->bi_size = 0;
lbmIODone(bio, 0);
} else {
submit_bio(READ_SYNC, bio); submit_bio(READ_SYNC, bio);
}
wait_event(bp->l_ioevent, (bp->l_flag != lbmREAD)); wait_event(bp->l_ioevent, (bp->l_flag != lbmREAD));
......
...@@ -611,11 +611,28 @@ static int jfs_freeze(struct super_block *sb) ...@@ -611,11 +611,28 @@ static int jfs_freeze(struct super_block *sb)
{ {
struct jfs_sb_info *sbi = JFS_SBI(sb); struct jfs_sb_info *sbi = JFS_SBI(sb);
struct jfs_log *log = sbi->log; struct jfs_log *log = sbi->log;
int rc = 0;
if (!(sb->s_flags & MS_RDONLY)) { if (!(sb->s_flags & MS_RDONLY)) {
txQuiesce(sb); txQuiesce(sb);
lmLogShutdown(log); rc = lmLogShutdown(log);
updateSuper(sb, FM_CLEAN); if (rc) {
jfs_error(sb, "jfs_freeze: lmLogShutdown failed");
/* let operations fail rather than hang */
txResume(sb);
return rc;
}
rc = updateSuper(sb, FM_CLEAN);
if (rc) {
jfs_err("jfs_freeze: updateSuper failed\n");
/*
* Don't fail here. Everything succeeded except
* marking the superblock clean, so there's really
* no harm in leaving it frozen for now.
*/
}
} }
return 0; return 0;
} }
...@@ -627,13 +644,18 @@ static int jfs_unfreeze(struct super_block *sb) ...@@ -627,13 +644,18 @@ static int jfs_unfreeze(struct super_block *sb)
int rc = 0; int rc = 0;
if (!(sb->s_flags & MS_RDONLY)) { if (!(sb->s_flags & MS_RDONLY)) {
updateSuper(sb, FM_MOUNT); rc = updateSuper(sb, FM_MOUNT);
if ((rc = lmLogInit(log))) if (rc) {
jfs_err("jfs_unlock failed with return code %d", rc); jfs_error(sb, "jfs_unfreeze: updateSuper failed");
else goto out;
}
rc = lmLogInit(log);
if (rc)
jfs_error(sb, "jfs_unfreeze: lmLogInit failed");
out:
txResume(sb); txResume(sb);
} }
return 0; return rc;
} }
static struct dentry *jfs_do_mount(struct file_system_type *fs_type, static struct dentry *jfs_do_mount(struct file_system_type *fs_type,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment