### question We recently used fuzz(hydra) to test 4.19 stable XFS and automatically generate tmp.img (XFS v5 format, but some metadata is wrong) Test as follows: mount tmp.img tmpdir cp file tmpdir sync --> stuck ### cause analysis This is because tmp.img (only 1 AG) has some problems. Using xfs_repair detect information as follows: agf_freeblks 0, counted 3224 in ag 0 agf_longest 536874136, counted 3224 in ag 0 sb_fdblocks 613, counted 3228 The reason sync is blocked is : xfs_vm_writepages(xfs_address_space_operations--writepages) write_cache_pages xfs_do_writepage xfs_writepage_map xfs_map_blocks allocate_blocks: error = xfs_iomap_write_allocate xfs_iomap_write_allocate while (count_fsb != 0) { nimaps = 0; while (nimaps == 0) { --> endless loop nimaps = 1; error = xfs_bmapi_write(..., &nimaps) --> nimaps becomes 0 again xfs_bmapi_write xfs_bmap_alloc xfs_bmap_btalloc xfs_alloc_vextent xfs_alloc_fix_freelist xfs_alloc_space_available --> less space than needed xfs_alloc_space_available alloc_len = args->minlen + (args->alignment - 1) + args->minalignslop; longest = xfs_alloc_longest_free_extent(pag, min_free, reservation); if (longest < alloc_len) return false; /* do we have enough free space remaining for the allocation? */ available = (int)(pag->pagf_freeblks + pag->pagf_flcount - reservation - min_free - args->minleft); if (available < (int)max(args->total, alloc_len)) return false; ### solve 1. Detect the above metadata corruption when mounting XFS? agf_freeblks 0, counted 3224 in ag 0 agf_longest 536874136, counted 3224 in ag 0 sb_fdblocks 613, counted 3228 2. xfs_repair detection at system boot? If xfs_repair fails, refuse to mount XFS