From: Bob Peterson Date: Wed, 6 Nov 2013 15:58:00 +0000 (-0500) Subject: GFS2: Drop inadequate rgrps from the reservation tree X-Git-Tag: v3.14-rc1~140^2~22 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1330edbeaf304703052fb583dd660b96309e4536;p=pandora-kernel.git GFS2: Drop inadequate rgrps from the reservation tree This is just basically a resend of a patch I posted earlier. It didn't change from its original, except in diff offsets, etc: This patch fixes a bug in the GFS2 block allocation code. The problem starts if a process already has a multi-block reservation, but for some reason, another process disqualifies it from further allocations. For example, the other process might set on the GFS2_RDF_ERROR bit. The process holding the reservation jumps to label skip_rgrp, but that label comes after the code that removes the reservation from the tree. Therefore, the no longer usable reservation is not removed from the rgrp's reservations tree; it's lost. Eventually, the lost reservation causes the count of reserved blocks to get off, and eventually that causes a BUG_ON(rs->rs_rbm.rgd->rd_reserved < rs->rs_free) to trigger. This patch moves the call to after label skip_rgrp so that the disqualified reservation is properly removed from the tree, thus keeping the rgrp rd_reserved count sane. Signed-off-by: Bob Peterson Signed-off-by: Steven Whitehouse --- Reading git-diff-tree failed