Re: [Jfs-discussion] [PATCH] jfs: Functions jfs_freeze() and jfs_unfreeze() always return 0
Brought to you by:
blaschke-oss,
shaggyk
From: Gu Z. <guz...@cn...> - 2013-05-16 08:59:53
|
On 05/16/2013 01:14 PM, Vahram Martirosyan wrote: > The mentioned functions do not pay attention to the error codes returned > by the functions updateSuper(), lmLogInit() and lmLogShutdown(). It brings to > system crash later when writing to log. > > The patch adds corresponding code to check and return the error codes > and to print correct error messages in case of errors. > > Found by Linux File System Verification project (linuxtesting.org). > > Signed-off-by: Vahram Martirosyan <vah...@li...> Reviewed-by: Gu Zheng <guz...@cn...> > --- > fs/jfs/super.c | 29 ++++++++++++++++++++++------- > 1 file changed, 22 insertions(+), 7 deletions(-) > > diff --git a/fs/jfs/super.c b/fs/jfs/super.c > index 2003e83..a3d424d 100644 > --- a/fs/jfs/super.c > +++ b/fs/jfs/super.c > @@ -611,11 +611,20 @@ static int jfs_freeze(struct super_block *sb) > { > struct jfs_sb_info *sbi = JFS_SBI(sb); > struct jfs_log *log = sbi->log; > + int rc = 0; > > if (!(sb->s_flags & MS_RDONLY)) { > txQuiesce(sb); > - lmLogShutdown(log); > - updateSuper(sb, FM_CLEAN); > + rc = lmLogShutdown(log); > + if (rc != 0) { "if (rc)", and the following. Thanks, Gu > + jfs_err("lmLogShutdown failed with return code %d", rc); > + return rc; > + } > + rc = updateSuper(sb, FM_CLEAN); > + if (rc != 0) { > + jfs_err("updateSuper failed with return code %d", rc); > + return rc; > + } > } > return 0; > } > @@ -627,11 +636,17 @@ static int jfs_unfreeze(struct super_block *sb) > int rc = 0; > > if (!(sb->s_flags & MS_RDONLY)) { > - updateSuper(sb, FM_MOUNT); > - if ((rc = lmLogInit(log))) > - jfs_err("jfs_unlock failed with return code %d", rc); > - else > - txResume(sb); > + rc = updateSuper(sb, FM_MOUNT); > + if (rc != 0) { > + jfs_err("updateSuper failed with return code %d", rc); > + return rc; > + } > + rc = lmLogInit(log); > + if (rc != 0) { > + jfs_err("lmLogInit failed with return code %d", rc); > + return rc; > + } > + txResume(sb); > } > return 0; > } |