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()
This commit is contained in:
@@ -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;
|
||||||
submit_bio(READ_SYNC, bio);
|
/*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);
|
||||||
|
}
|
||||||
|
|
||||||
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)
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
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;
|
||||||
txResume(sb);
|
}
|
||||||
|
rc = lmLogInit(log);
|
||||||
|
if (rc)
|
||||||
|
jfs_error(sb, "jfs_unfreeze: lmLogInit failed");
|
||||||
|
out:
|
||||||
|
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,
|
||||||
|
Reference in New Issue
Block a user