[Cluster-devel] gfs2_dir_read_data(): fix uninitialized variable usage

Adrian Bunk bunk at stusta.de
Thu Oct 19 14:02:07 UTC 2006


In the "if (extlen)" case, "bh" was used uninitialized.

This patch changes the code to what seems to have been intended.

Spotted by the Coverity checker.

This patch also removes a pointless "bh = NULL" asignment (the variable 
is never accessed again after this point).

Signed-off-by: Adrian Bunk <bunk at stusta.de>

--- linux-2.6/fs/gfs2/dir.c.old	2006-10-19 15:33:52.000000000 +0200
+++ linux-2.6/fs/gfs2/dir.c	2006-10-19 15:35:44.000000000 +0200
@@ -301,54 +301,52 @@ static int gfs2_dir_read_data(struct gfs
 	while (copied < size) {
 		unsigned int amount;
 		struct buffer_head *bh;
 		int new;
 
 		amount = size - copied;
 		if (amount > sdp->sd_sb.sb_bsize - o)
 			amount = sdp->sd_sb.sb_bsize - o;
 
 		if (!extlen) {
 			new = 0;
 			error = gfs2_extent_map(&ip->i_inode, lblock, &new,
 						&dblock, &extlen);
 			if (error || !dblock)
 				goto fail;
 			BUG_ON(extlen < 1);
 			if (!ra)
 				extlen = 1;
 			bh = gfs2_meta_ra(ip->i_gl, dblock, extlen);
-		}
-		if (!bh) {
+		} else {
 			error = gfs2_meta_read(ip->i_gl, dblock, DIO_WAIT, &bh);
 			if (error)
 				goto fail;
 		}
 		error = gfs2_metatype_check(sdp, bh, GFS2_METATYPE_JD);
 		if (error) {
 			brelse(bh);
 			goto fail;
 		}
 		dblock++;
 		extlen--;
 		memcpy(buf, bh->b_data + o, amount);
 		brelse(bh);
-		bh = NULL;
 		buf += amount;
 		copied += amount;
 		lblock++;
 		o = sizeof(struct gfs2_meta_header);
 	}
 
 	return copied;
 fail:
 	return (copied) ? copied : error;
 }
 
 static inline int __gfs2_dirent_find(const struct gfs2_dirent *dent,
 				     const struct qstr *name, int ret)
 {
 	if (dent->de_inum.no_addr != 0 &&
 	    be32_to_cpu(dent->de_hash) == name->hash &&
 	    be16_to_cpu(dent->de_name_len) == name->len &&
 	    memcmp(dent+1, name->name, name->len) == 0)
 		return ret;




More information about the Cluster-devel mailing list