Messages in this thread Patch in this message | | | Date | Thu, 16 May 2013 16:57:20 +0800 | From | Gu Zheng <> | Subject | Re: [PATCH] jfs: Functions jfs_freeze() and jfs_unfreeze() always return 0 |
| |
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 <vahram.martirosyan@linuxtesting.org>
Reviewed-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
> --- > 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; > }
| |