From: Bob Peterson Date: Wed, 12 Sep 2012 13:40:31 +0000 (-0400) Subject: GFS2: Fix infinite loop in rbm_find X-Git-Tag: v3.7-rc1~206^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3701530aed9711fcfe9b29d3de0f7a27c8dbc8ae;p=thirdparty%2Fkernel%2Flinux.git GFS2: Fix infinite loop in rbm_find This patch fixes an infinite loop in gfs2_rbm_find that was introduced by the previous patch. The problem occurred when the length was less than 3 but the rbm block was byte-aligned, causing it to improperly return a extent length of zero, which caused it to spin. Signed-off-by: Bob Peterson Signed-off-by: Steven Whitehouse Tested-by: Bob Peterson Tested-by: Barry Marson --- diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c index b933cdcda7f48..3cc402ce6fea6 100644 --- a/fs/gfs2/rgrp.c +++ b/fs/gfs2/rgrp.c @@ -329,6 +329,7 @@ static u32 gfs2_free_extlen(const struct gfs2_rbm *rrbm, u32 len) gfs2_unaligned_extlen(&rbm, 4 - n_unaligned, &len)) goto out; + n_unaligned = len & 3; /* Start is now byte aligned */ while (len > 3) { start = rbm.bi->bi_bh->b_data;