@@ -441,12 +441,12 @@ void btrfs_try_granting_tickets(struct btrfs_fs_info *fs_info,
}
}
-#define DUMP_BLOCK_RSV(fs_info, rsv_name) \
+#define DUMP_BLOCK_RSV(fs_info, member, name) \
do { \
- struct btrfs_block_rsv *__rsv = &(fs_info)->rsv_name; \
+ struct btrfs_block_rsv *__rsv = &(fs_info)->member; \
spin_lock(&__rsv->lock); \
- btrfs_info(fs_info, #rsv_name ": size %llu reserved %llu", \
- __rsv->size, __rsv->reserved); \
+ btrfs_info(fs_info, " %-16s (%llu/%llu)", \
+ name, __rsv->reserved, __rsv->size); \
spin_unlock(&__rsv->lock); \
} while (0)
@@ -484,13 +484,16 @@ static void __btrfs_dump_space_info(struct btrfs_fs_info *fs_info,
if (btrfs_is_zoned(fs_info))
btrfs_info(fs_info,
" zone_unusable: %llu", info->bytes_zone_unusable);
+}
- DUMP_BLOCK_RSV(fs_info, global_block_rsv);
- DUMP_BLOCK_RSV(fs_info, trans_block_rsv);
- DUMP_BLOCK_RSV(fs_info, chunk_block_rsv);
- DUMP_BLOCK_RSV(fs_info, delayed_block_rsv);
- DUMP_BLOCK_RSV(fs_info, delayed_refs_rsv);
-
+static void dump_metadata_rsv(struct btrfs_fs_info *fs_info)
+{
+ btrfs_info(fs_info, "dumping metadata reservation: (reserved/size)");
+ DUMP_BLOCK_RSV(fs_info, global_block_rsv, "global:");
+ DUMP_BLOCK_RSV(fs_info, trans_block_rsv, "trans:");
+ DUMP_BLOCK_RSV(fs_info, chunk_block_rsv, "chunk:");
+ DUMP_BLOCK_RSV(fs_info, delayed_block_rsv, "delayed_inode:");
+ DUMP_BLOCK_RSV(fs_info, delayed_refs_rsv, "delayed_refs:");
}
void btrfs_dump_space_info(struct btrfs_fs_info *fs_info,
@@ -502,6 +505,7 @@ void btrfs_dump_space_info(struct btrfs_fs_info *fs_info,
spin_lock(&info->lock);
__btrfs_dump_space_info(fs_info, info);
+ dump_metadata_rsv(fs_info);
spin_unlock(&info->lock);
if (!dump_block_groups)
@@ -957,6 +961,7 @@ static bool maybe_fail_all_tickets(struct btrfs_fs_info *fs_info,
if (btrfs_test_opt(fs_info, ENOSPC_DEBUG)) {
btrfs_info(fs_info, "cannot satisfy tickets, dumping space info");
__btrfs_dump_space_info(fs_info, space_info);
+ dump_metadata_rsv(fs_info);
}
while (!list_empty(&space_info->tickets) &&