diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2011-11-08 14:04:20 +0000 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2011-11-08 14:04:20 +0000 |
commit | 87654896ca619ff64f94d3881d6bd0ec7b29e25f (patch) | |
tree | d5f19dca46c1d6aaa20a3a13acfe739eec0cc203 /fs/gfs2/inode.c | |
parent | dfe4d34b39b80faff52489f950a18523da7581bf (diff) | |
download | linux-87654896ca619ff64f94d3881d6bd0ec7b29e25f.tar.gz linux-87654896ca619ff64f94d3881d6bd0ec7b29e25f.tar.bz2 linux-87654896ca619ff64f94d3881d6bd0ec7b29e25f.zip |
GFS2: More automated code analysis fixes
A potentially uninitialised variable, some unreachable code,
and the main part of this, fixing the error path in the
unlink function.
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/inode.c')
-rw-r--r-- | fs/gfs2/inode.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c index cfd4959b218c..377920d3c430 100644 --- a/fs/gfs2/inode.c +++ b/fs/gfs2/inode.c @@ -1037,12 +1037,14 @@ static int gfs2_unlink(struct inode *dir, struct dentry *dentry) struct buffer_head *bh; struct gfs2_holder ghs[3]; struct gfs2_rgrpd *rgd; - int error; + int error = -EROFS; gfs2_holder_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs); gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + 1); rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr); + if (!rgd) + goto out_inodes; gfs2_holder_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, ghs + 2); @@ -1088,12 +1090,13 @@ out_end_trans: out_gunlock: gfs2_glock_dq(ghs + 2); out_rgrp: - gfs2_holder_uninit(ghs + 2); gfs2_glock_dq(ghs + 1); out_child: - gfs2_holder_uninit(ghs + 1); gfs2_glock_dq(ghs); out_parent: + gfs2_holder_uninit(ghs + 2); +out_inodes: + gfs2_holder_uninit(ghs + 1); gfs2_holder_uninit(ghs); return error; } |