Here's an update of my resource group glock sharing patches.
The key patch of this patch queue is "gfs2: Add per-reservation reserved
block accounting": with resource group glock sharing, multiple
allocations can be going on in parallel. This requires tracking of the
actual space reserved for each allocation to prevent the allocator from
handing out more blocks than available.
Before this commit, the filesystem would report to be out of space when
the number of tentatively reserved blocks would exceed the free space
available. In the most extreme workload that only creates empty inodes,
that would be the case when only 1/32 of the filesystem is full.
With the above mentioned commit, the filesystem will continue to
allocate blocks in such situations, but only at a very slow rate because
the tentatively reserved blocks will still get in the way. Commit
"gfs2: Limit the maximum amount of reserved space" changes that to
shrink the amount of tentatively reserved space to no more than half the
free space when no more blocks can be reserved.
Thanks,
Andreas
Andreas Gruenbacher (14):
gfs2: Turn gfs2_rbm_incr into gfs2_rbm_add
gfs2: Only use struct gfs2_rbm for bitmap manipulations
gfs2: Get rid of unnecessary variable in gfs2_alloc_blocks
gfs2: Minor gfs2_inplace_reserve cleanup
Revert "gfs2: Don't reject a supposedly full bitmap if we have blocks
reserved"
gfs2: Don't clear GBF_FULL flags in rs_deltree
gfs2: Set GBF_FULL flags when reading resource groups
gfs2: When looking for blocks to allocate, don't clamp at free blocks
gfs2: Also reflect single-block allocations in rgd->rd_extfail_pt
gfs2: Only pass reservation down to gfs2_rbm_find
gfs: Don't search for unreserved space twice
gfs2: Add per-reservation reserved block accounting
gfs2: Limit the maximum amount of reserved space
gfs2: Rename rs_free to rs_wanted
Bob Peterson (3):
gfs2: Add local resource group locking
gfs2: Allow node-wide exclusive glock sharing
gfs2: Use resource group glock sharing
fs/gfs2/bmap.c | 4 +-
fs/gfs2/file.c | 4 +-
fs/gfs2/glock.c | 22 +-
fs/gfs2/glock.h | 6 +
fs/gfs2/incore.h | 36 +---
fs/gfs2/inode.c | 6 +-
fs/gfs2/lops.c | 7 +-
fs/gfs2/rgrp.c | 489 ++++++++++++++++++++++++++-----------------
fs/gfs2/rgrp.h | 4 +
fs/gfs2/super.c | 3 +-
fs/gfs2/trace_gfs2.h | 33 ++-
fs/gfs2/trans.h | 2 +-
fs/gfs2/xattr.c | 6 +-
13 files changed, 376 insertions(+), 246 deletions(-)
--
2.26.2