From c2e7c28672073629d54a9e255c0a3e01120e72d7 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Wed, 6 Nov 2024 02:27:17 +0300 Subject: [PATCH] Fix calc_lengths data size recalc during auto-resize --- src/disk_tool/disk_tool_resize_auto.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/disk_tool/disk_tool_resize_auto.cpp b/src/disk_tool/disk_tool_resize_auto.cpp index 1c9dd56f..bac65039 100644 --- a/src/disk_tool/disk_tool_resize_auto.cpp +++ b/src/disk_tool/disk_tool_resize_auto.cpp @@ -37,6 +37,8 @@ int disk_tool_t::resize_data(std::string device) fprintf(stderr, "%s\n", e.what()); return 1; } + // Save FD numbers because calc_lengths() relies on them + int old_journal_fd = dsk.journal_fd, old_meta_fd = dsk.meta_fd, old_data_fd = dsk.data_fd; dsk.close_all(); bool dry_run = options.find("dry_run") != options.end(); auto old_journal_device = dsk.journal_device; @@ -56,7 +58,13 @@ int disk_tool_t::resize_data(std::string device) ? dsk.data_device_size : new_data_dev_size; dsk.data_device_size = new_data_dev_size; dsk.cfg_data_size = 0; + dsk.journal_fd = old_journal_fd; + dsk.meta_fd = old_meta_fd; + dsk.data_fd = old_data_fd; dsk.calc_lengths(true); + dsk.journal_fd = -1; + dsk.meta_fd = -1; + dsk.data_fd = -1; } std::map move_options; if (options.find("move_journal") != options.end())