From: Daan De Meyer Date: Sat, 5 Aug 2023 17:31:09 +0000 (+0200) Subject: repart: Stat temporary file again after mkfs X-Git-Tag: v255-rc1~808 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6ac299e3cedb1d9eb8df88010c4994a90aa12a9a;p=thirdparty%2Fsystemd.git repart: Stat temporary file again after mkfs This makes sure we use the actual size after mkfs which seems to be important for btrfs as it refuses to mount the partition otherwise. Follow-up for 2843df3e5734aa07b82b96ba46b799921a6495b8 --- diff --git a/src/partition/repart.c b/src/partition/repart.c index 1a316012e7e..4a40a05ee85 100644 --- a/src/partition/repart.c +++ b/src/partition/repart.c @@ -5844,6 +5844,7 @@ static int context_minimize(Context *context) { _cleanup_close_ int fd = -EBADF; _cleanup_free_ char *hint = NULL; sd_id128_t fs_uuid; + struct stat st; uint64_t fsz; if (p->dropped) @@ -5932,8 +5933,6 @@ static int context_minimize(Context *context) { /* Read-only filesystems are minimal from the first try because they create and size the * loopback file for us. */ if (fstype_is_ro(p->format)) { - struct stat st; - assert(fd < 0); fd = open(temp, O_RDONLY|O_CLOEXEC|O_NONBLOCK); @@ -6012,12 +6011,13 @@ static int context_minimize(Context *context) { return r; } - assert(fd >= 0); + if (fstat(fd, &st) < 0) + return log_error_errno(errno, "Failed to stat temporary file: %m"); p->copy_blocks_path = TAKE_PTR(temp); p->copy_blocks_path_is_our_file = true; p->copy_blocks_fd = TAKE_FD(fd); - p->copy_blocks_size = fsz; + p->copy_blocks_size = st.st_size; } /* Now that we've done the data partitions, do the verity hash partitions. We do these in a separate