In terms of savemeta this is a half-finished patch set to improve performance, but the libgfs2 improvements are important for other work (and I want to push these patches as a reasonable checkpoint before switching to other work).
The theme here is to remove the bi_bh field from struct gfs2_bitmap (a lot of all-or-nothing churn needed there) and manage the whole resource group bitmap as one multi-block allocation, so that we can speed up processing of the resource groups and simplify memory management thereof. The next stages will be to improve performance in save_indirect_blocks() and save_block() using a similar "extent" based approach instead of going block-by-block. That will need a similar amount of all-or-nothing churn to kick the dependency on single-block bh's down the call chain. Andrew Price (5): libgfs2: Don't use bh's in gfs_rgrp_in/out libgfs2: Remove bi_bh from struct gfs2_bitmap savemeta: Save rgrps without using gfs2_buffer_heads savemeta: Check file format version properly savemeta: Use larger buffers for gzip compression gfs2/convert/gfs2_convert.c | 48 ++++++------ gfs2/edit/extended.c | 14 ++-- gfs2/edit/hexedit.c | 50 ++++++------- gfs2/edit/journal.c | 8 +- gfs2/edit/savemeta.c | 141 +++++++++++++++++++----------------- gfs2/fsck/fs_recovery.c | 11 ++- gfs2/fsck/initialize.c | 29 ++++---- gfs2/fsck/metawalk.c | 6 +- gfs2/fsck/pass5.c | 7 +- gfs2/fsck/rgrepair.c | 126 ++++++++++++++++++-------------- gfs2/fsck/util.c | 5 +- gfs2/libgfs2/fs_bits.c | 8 +- gfs2/libgfs2/fs_geometry.c | 25 +------ gfs2/libgfs2/fs_ops.c | 24 +++--- gfs2/libgfs2/gfs1.c | 19 ++--- gfs2/libgfs2/gfs2l.c | 2 +- gfs2/libgfs2/lang.c | 2 +- gfs2/libgfs2/libgfs2.h | 21 +++--- gfs2/libgfs2/ondisk.c | 4 +- gfs2/libgfs2/rgrp.c | 141 ++++++++++++++++-------------------- gfs2/libgfs2/structures.c | 3 +- gfs2/libgfs2/super.c | 2 +- tests/check_rgrp.c | 6 +- 23 files changed, 345 insertions(+), 357 deletions(-) -- 2.26.2