[ClusterLabs Developers] gfs2-utils 3.5.0 released

Andrew Price anprice at redhat.com
Thu Feb 9 08:12:58 EST 2023

gfs2-utils contains the tools needed to create, check, modify and 
inspect gfs2 filesystems along with support scripts needed on every gfs2 
cluster node.

The main themes in this release are improved testability and test 
coverage, with a number of bug fixes and a couple of new features thrown 
in too.

Some highlights visible to users and packagers:

- mkfs.gfs2 now has a -U option to provide your own UUID (added to 
support idempotent Ansible playbooks)
- gfs2_jadd now creates journals much faster
- The bzip2 configure check has been fixed to work on distros other than 
the Fedora family (which ship their own pkg-config file)
- Man pages have been improved

We now have CI testing enabled for gfs2-utils (thanks, Fabio!) which 
means that pull requests will be automatically tested across multiple 
distros and architectures. Static analysis will also now be more useful 
as the results are much less cluttered with false-positives. This all 
helps to ramp up the quality of the utils over time as we continue to 
add support for new gfs2 features.

There are also portability improvements included in this release which 
mean that building gfs2-utils against a non-glibc libc should not 
require much patching (probably just an rpmatch() replacement).

The full git shortlog is below.

The release tarballs and signed checksums can be found here:


Direct link for convenience:


Please report bugs to the cluster-devel at redhat.com mailing list or at:


Patches or pull requests can be sent to the same list or submitted on 



gfs2-utils changes since 3.4.1:

Andreas Gruenbacher (7):
       fsck.gfs2: Clean up metawalk_check_data and undo_check_data 
argument passing
       fsck.gfs2: Minor data type cleanups
       fsck.gfs2: More flexible metalist handling in check_metatree
       fsck.gfs2: Move struct error_block into metawalk.c
       fsck.gfs2: Fix some endianness annotations
       fsck.gfs2: Factor out error handling in metawalk_check_data
       fsck.gfs2: Convert enum values to upper-case

Andrew Price (255):
       Update version string for dev
       gfs2_jadd: Use fallocate to preallocate journals
       gfs2_jadd: Don't fsync after each block written
       libgfs2: Move gfs1_ri_update() into gfs2_convert
       gfs2_convert: Remove fd parameter from gfs1_ri_update
       libgfs2: Fold __ri_update into ri_update
       libgfs2: Move ri_update() into fsck.gfs2
       libgfs2: Clean up rindex_read()
       Update some variable names for consistency
       libgfs2: Implement meta.c checks as unit tests
       libgfs2: Move build_rgrps into fsck.gfs2
       libgfs2: Remove fs_geometry.c
       libgfs2: Replace lgfs2_rgrps_root() with lgfs2_attach_rgrps()
       fsck.gfs2: Update an inaccessible web address
       libgfs2: Move block_list.c into fsck.gfs2
       fsck.gfs2: Refactor fetch_rgrps()
       fsck.gfs2: Call rindex_read() outside of ri_update()
       fsck.gfs2: Rename ri_update to read_rgrps
       fsck.gfs2: Fix bounds check in find_next_rgrp_dist()
       fsck.gfs2: Improve rindex consistency check
       configure: Don't define _FORTIFY_SOURCE for gcov builds
       Import linux/gfs2_ondisk.h
       Remove HAS_UUID conditionals
       Remove GFS2_HAS_LEAF_HINTS conditionals
       Remove GFS2_HAS_DE_RAHEAD/COOKIE conditionals
       Remove GFS2_HAS_RG_SKIP conditionals
       Remove GFS2_HAS_RG_RI_FIELDS conditionals
       Remove GFS2_HAS_LH_V2 conditionals
       Use PRI* when printing gfs2 structures
       Remove gfs2/include/linux_endian.h
       libgfs2: Add __force tags to endianness conversion macros
       fsck.gfs2: Fix declaration mismatch for invalidate_*
       Include asm/types.h in our linux/types.h
       libgfs2: Provide macros for printing on-disk fields
       libgfs2: Add a function for printing on-disk meta headers
       libgfs2: Expect big-endian data when printing log descriptors
       libgfs2: Remove gfs2_log_descriptor_{in,out}
       libgfs2: Remove gfs2_quota_change_{in,out}
       libgfs2: Remove gfs2_statfs_change_{in,out}
       libgfs2: Remove gfs2_ea_header_in
       libgfs2: Convert gfs2_leaf_print to accept big-endian data
       libgfs2: Remove gfs2_quota_{in,out}
       Convert rgrp printing functions to expect big-endian data
       libgfs2: Convert gfs2_sb_print to expect big-endian data
       gfs2_edit: Convert superblock printing to expect big-endian
       gfs2_edit: Store big-endian data in the global dinode
       libgfs2: Don't use on-disk structs with cpu-endian data in 
       libgfs2: Fix endianness mismatches for struct gfs2_log_header
       gfs2_edit: Clean up display_gfs2()
       libgfs2: Add a cpu-endian log header struct
       libgfs2: Remove gfs2_dinode_print()
       libgfs2: Remove i_di from struct gfs2_inode
       libgfs2: Remove big-endian structs from struct rgrp_tree
       libgfs2: Remove sd_sb from struct gfs2_sbd
       libgfs2: Remove some now-unused functions
       gfs2_edit: Use native-endian types for dirent processing
       libgfs2: Endianness improvements for gfs2_inum and gfs2_dirent
       Remove some users of gfs2_leaf_in()
       libgfs2: Endianness improvements for gfs2_leaf
       libgfs2: Remove gfs2_meta_header_{in,out}
       libgfs2: Fix endianness conversions for superblock padding fields
       libgfs2: Don't parse/write de_cookie
       libgfs2: Broaden use of struct lgfs2_inum
       gfs2l: Sparse fixes
       libgfs2: Fix endianness tagging for gfs2_bit_search
       libgfs2: Remove gfs_jindex_in
       Fix sparse warnings about linkage
       fsck.gfs2: Remove unused invalidate_fxns
       libgfs2: Fix the remaining sparse warnings
       gfs2_convert: Fix the remaining sparse warnings
       gfs2_edit: Fix remaining endianness sparse warnings
       fsck.gfs2: Fix remaining endianness sparse warnings
       libgfs2: Add NULL-checking for ip->i_bh in inode_put()
       gfs2_edit: Fix segfault in hexdump()
       libgfs2: Avoid potential gfs/gfs2 superblock update clash
       Make sure i_bh is set after lgfs2_gfs_inode_get()
       tunegfs2: Use O_EXCL when opening the device rw
       tests: Increase the size of the sparse file used by tests
       libgfs2: Remove new_rgrps from struct gfs2_sbd
       libgfs2: Remove start and length from struct rgrp_tree
       fsck.gfs2: Simplify compute_rgrp_layout()
       fsck.gfs2: Simplify how_many_rgrps()
       libgfs2: Remove rgcalc from struct gfs2_sbd
       fsck.gfs2: Rename rg_repair() to rindex_repair()
       gfs2_edit: Fix NULL check in print_block_type()
       libgfs2: Fix leak of bh in read_sb()
       libgfs2: Remove unnecessary cast from gfs2_lookupi()
       gfs2_edit: Don't free buf in save_leaf_chain()
       libgfs2: Remove sd_max_dirres from struct gfs2_sbd
       libgfs2: Remove unused fields from struct gfs2_sbd
       libgfs2: Rename sdp->time to sdp->sd_time
       gfs2_grow.8: Man page improvements
       docs: Update branch name in README.contributing
       tunegfs2: Use PRIu64 instead of casting uint64_t to unsigned long 
       gfs2_convert: Use PRIu64 instead of casting uint64_t to unsigned 
long long
       mkfs.gfs2: Use PRIu64 instead of casting uint64_t to unsigned 
long long
       gfs2_grow: Use PRIu64 instead of casting uint64_t to unsigned 
long long
       gfs2_edit: Use PRIu64 instead of casting uint64_t to unsigned 
long long
       libgfs2: Use PRIu64 instead of casting uint64_t to unsigned long long
       glocktop: Use PRIu64 instead of casting uint64_t to unsigned long 
       fsck.gfs2: Use PRIu64 instead of casting uint64_t to unsigned 
long long
       fsck.gfs2: Rename warm_fuzzy_stuff()
       Update copyright notices
       Update translation template
       configure: Fix check for bzip2
       fsck.gfs2: Clean up set_block_ranges()
       gfs2_jadd: Clean up definitions from linux/fs.h
       libgfs2: Move debugging printf out of build_master()
       libgfs2: Rework lgfs2_build_jindex()
       libgfs2: Move build_jindex() into fsck.gfs2
       libgfs2: Push down build_per_node() into the utils
       libgfs2: Return the inode from build_inum_range()
       libgfs2: Return the inode from build_statfs_change()
       libgfs2: Return the inode from build_quota_change()
       libgfs2: Return the inode from build_inum()
       libgfs2: Return the inode from build_statfs()
       libgfs2: Return the inode from build_rindex()
       libgfs2: Return the inode from build_quota()
       libgfs2: Move debugging printf out of build_root()
       libgfs2: Remove debugging printf from do_init_statfs()
       libgfs2: Move debugging output out of do_init_inum()
       libgfs2: Remove debugging printfs from fix_device_geometry()
       libgfs2: Remove config.[ch]
       libgfs2: Move struct printing functions out of libgfs2
       libgfs2: Remove print_it extern requirement
       gfs2_edit: Clean up some unused macros
       gfs2_edit: Remove the remaining die() calls
       gfs2_edit: Fix usage of getch()
       libgfs2: Namespace improvements - structures.c
       libgfs2: Namespace improvements - buf.c
       libgfs2: Namespace improvements - fs_ops.c
       libgfs2: Namespace improvements - fs_bits.c
       libgfs2: Namespace improvements - gfs1.c
       libgfs2: Namespace improvements - misc.c
       libgfs2: Namespace improvements - rgrp.c
       libgfs2: Namespace improvements - super.c
       libgfs2: Namespace improvements - gfs2_disk_hash.c
       libgfs2: Remove revoke function declarations from libgfs2.h
       libgfs2: Namespace improvements - recovery.c
       libgfs2: Namespace improvements - device_geometry.c
       libgfs2: Namespace improvements - struct gfs2_inode
       libgfs2: Namespace improvements - struct gfs2_buffer_head
       libgfs2: Namespace improvements - struct gfs2_sbd
       libgfs2: Namespace improvements - struct metapath
       libgfs2: Namespace improvements - struct master_dir
       libgfs2: Namespace improvements - struct device
       libgfs2: Namespace improvements - struct gfs2_bitmap
       libgfs2: Namespace improvements - constants
       libgfs2: Namespace improvements - struct rgrp_tree
       fsck.gfs2: Reorganize pass1_fxns
       tests: Regenerate testvol where needed
       tests: Add an option to clean up the testvol file unconditionally
       Excplicitly ignore posix_fadvise() return value
       Add basic unit tests for lgfs2_lookupi()
       Use calloc in test_rgrps_write_final()
       gfs2_jadd.8: Man page improvements
       gfs2l: Remove redundant #include <sys/queue.h>
       Don't use glibc internal symbols
       Add LTLIBINTL to LDADD where needed
       fsck.gfs2: Use atexit() where on_exit() is not available
       mkfs.gfs2: Use realpath() instead of canonicalize_file_name()
       Configure script updates
       mkfs.gfs2: Add -U UUID option
       gfs2_convert: Fix uninitialized usage warning
       fsck.gfs2: Introduce struct fsck_cx
       fsck.gfs2: Pass the fsck_cx into the metawalk_fxns
       fsck.gfs2: Don't define names in the gfs2_ namespace
       fsck.gfs2: Move the global dup_blocks into fsck_cx
       fsck.gfs2: Move the global dirtree into fsck_cx
       fsck.gfs2: Move the global inodetree into fsck_cx
       fsck.gfs2: Move the global preen into fsck_options
       fsck.gfs2: Move the global force_check into fsck_options
       fsck.gfs2: Pass fsck_options into initialize()
       fsck.gfs2: Pass fsck_options into replay_journals()
       fsck.gfs2: Pass fsck_options into recover_journal()
       fsck.gfs2: Pass fsck_options into preen_is_safe()
       fsck.gfs2: Pass fsck_options into destroy()
       fsck.gfs2: Remove unused query field from fsck_options
       fsck.gfs2: Add an options pointer to fsck_cx
       fsck.gfs2: Pass fsck_cx into check_rgrp(s)_integrity()
       fsck.gfs2: Pass fsck_cx into rebuild_master()
       fsck.gfs2: Pass fsck_cx into lookup_per_node()
       fsck.gfs2: Pass fsck_cx into fill_super_block()
       fsck.gfs2: Pass fsck_cx into sb_repair()
       fsck.gfs2: Pass fsck_cx into peruse_metadata()
       fsck.gfs2: Pass fsck_cx into peruse_{system,user}_dinode()
       fsck.gfs2: Pass fsck_cx into reconstruct_journals()
       fsck.gfs2: Pass fsck_cx into correct_journal_seg_size()
       fsck.gfs2: Pass fsck_cx into reset_journal_seg_size()
       fsck.gfs2: Pass fsck_cx into init_rindex()
       fsck.gfs2: Pass fsck_cx into ask_remove_eattr_entry()
       fsck.gfs2: Pass fsck_cx into check_i_goal()
       fsck.gfs2: Pass fsck_cx into handle_inconsist()
       fsck.gfs2: Pass fsck_cx into update_rgrp()
       fsck.gfs2: Pass fsck_cx into check_block_status()
       fsck.gfs2: Pass fsck_cx into rewrite_rg_block()
       fsck.gfs2: Pass fsck_cx into fsck_query()
       fsck.gfs2: Remove the global opts variable
       Remove sd_bsize assignments which have no effect
       mkfs.gfs2: Improve journal write error reporting
       Remove dependency on linux/fs.h
       Remove dependency on linux/limits.h
       README: Remove kernel headers requirement
       configure: Only use AC_PROG_CC_C99 for autoconf < 2.70
       Add configure~ to .gitignore
       Add error checking to lgfs2_build_height()
       Add error checking to lgfs2_block_map()
       Add error checking to lgfs2_gfs1_block_map()
       Don't call exit() in lgfs2_write_journal
       Don't call exit() in lgfs2_build_quota_change
       Remove lgfs2_breadm()
       Add error checking to lgfs2_unstuff_dinode()
       Remove some exit() calls
       Add error checking to lgfs2_dir_split_leaf()
       Add error checking to dir_make_exhash()
       Add error checking to dir_double_exhash()
       libgfs2: Remove the remaining exit() calls
       libgfs2: Add member name prefixes to struct _lgfs2_rgrps
       libgfs2: Make sure block_alloc() fails when out of space
       libgfs2: Add unit tests for lgfs2_dinode_alloc()
       Add "tags" to .gitignore
       Update year in copyright notices
       libgfs2: Add unit test for lgfs2_meta_alloc()
       libgfs2: Remove rgrps count from struct lgfs2_sbd
       libgfs2: Consistently use rt_ prefix in struct lgfs2_rgrp_tree
       mkfs.gfs2: Add a root_inherit_jdata extended option
       libgfs2: Return the inode from lgfs2_lookupi()
       libgfs2: Remove lgfs2_gfs_createi()
       libgfs2: Reorganise lgfs2_createi()
       fsck.gfs2: Remove de variable from dirref_find()
       fsck.gfs2: Fix wrong entry used in dentry comparison
       fsck.gfs2: fix_hashtable: Decrement i_blocks when freeing leaf blocks
       Free per_node in build_per_node error paths
       Silence some coverity false-positives
       libgfs2: Add lgfs2_inode_free()
       libgfs2: Add lgfs2_bfree()
       Fix potential resource leaks spotted by coverity
       mkfs.gfs2: Fix bounds checking in parse_ulong()
       Suppress some copy-and-paste coverity warnings
       Fix up some unused value warnings
       Fix use-after-free warnings from coverity
       mkfs.gfs2: Annotate a TOCTOU false-positive
       Silence some false "weak crypto" warnings
       savemeta: Silence an infinite loop false-positive
       libgfs2: Fix potential NULL deref in lgfs2_lookupi()
       Suppress coverity warning in osi_erase()
       fsck.gfs2: Double check that the sysinode pointer has been set
       gfs2_grow: Don't free rgs when it's NULL
       Annotate coverity false-positive in find_next_rgrp_dist()
       Fix an overflow-before-widening warning in find_print_block_rg()
       Fix overflow-before-widen coverity warnings
       Fix uninitialized memory coverity warnings
       Annotate "overrun" coverity false-positive warnings
       Update translation template
       Prepare for version 3.5.0

Fabio M. Di Nitto (3):
       build: use c99 code build option
       build: clean up test/Makefile.am
       build: allow testvol location to be configurable.

Sergei Trofimovich (1):
       gfs2/edit: always use "%s"-style format for printf()-style functions

More information about the Developers mailing list