GFS2: Allow the number of committed revokes to temporarily be negative
authorBenjamin Marzinski <bmarzins@redhat.com>
Thu, 11 Mar 2010 00:10:19 +0000 (18:10 -0600)
committerSteven Whitehouse <swhiteho@redhat.com>
Thu, 11 Mar 2010 09:50:46 +0000 (09:50 +0000)
commit2e95e3f668c85276ce699993596d3b52b0fcf4c5
tree07b4fee61babe92111e1cafb3a30e99b6bdd4934
parente9edb1d8a345119c9baafa1b240eb1ec06a44662
GFS2: Allow the number of committed revokes to temporarily be negative

GFS2 tracks the number of revokes and unrevokes that are part of committed
transactions via sd_log_commited_revoke. It is possible for one process to add
revokes during its transaction, while another process unrevokes them during its
transaction. If the second process finishes its transaction first,
sd_log_commited_revoke will be decremented by the number of unrevokes that the
second process did, without first being incremented by the number of revokes
the first process did. This is fine, since all started transactions must be
completed before the journal can be flushed.  However, sd_log_commited_revoke
is an unsigned integer, and log_refund() causes an assertion failure if it
would go negative at the end of a transaction.  This patch makes
sd_log_commited_revoke a signed integer and allows it to go negative.
__gfs2_log_flush() still checks that it mataches the actual number of revokes.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
fs/gfs2/incore.h
fs/gfs2/log.c