gfs2: Add per-reservation reserved block accounting
authorAndreas Gruenbacher <agruenba@redhat.com>
Tue, 2 Oct 2018 13:59:54 +0000 (14:59 +0100)
committerAndreas Gruenbacher <agruenba@redhat.com>
Wed, 17 Feb 2021 18:30:26 +0000 (19:30 +0100)
commit725d0e9d464d567cd9290e29879d8bffc92013f8
tree1951e94f350258b056dd5c790f3317a07ddb5d95
parent07974d2a2a98bc3ce15f3411ebe5175c0af8f1c3
gfs2: Add per-reservation reserved block accounting

Add a rs_reserved field to struct gfs2_blkreserv to keep track of the number of
blocks reserved by this particular reservation, and a rd_reserved field to
struct gfs2_rgrpd to keep track of the total number of reserved blocks in the
resource group.  Those blocks are exclusively reserved, as opposed to the
rs_requested / rd_requested blocks which are tracked in the reservation tree
(rd_rstree) and which can be stolen if necessary.

When making a reservation with gfs2_inplace_reserve, rs_reserved is set to
somewhere between ap->min_target and ap->target depending on the number of free
blocks in the resource group.  When allocating blocks with gfs2_alloc_blocks,
rs_reserved is decremented accordingly.  Eventually, any reserved but not
consumed blocks are returned to the resource group by gfs2_inplace_release.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
fs/gfs2/file.c
fs/gfs2/incore.h
fs/gfs2/lops.c
fs/gfs2/rgrp.c
fs/gfs2/trace_gfs2.h