From 25baae502a9faa1a50d490b42955019d660da374 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Wed, 3 Aug 2022 11:37:17 +0200 Subject: [PATCH] repart: Only lock block device once Let's lock the backing fd instead of locking/unlocking multiple times when doing multiple operations with repart. It doesn't make much sense for anything else to touch the block device while there are still repart operations pending on it. By keeping the lock over the full duration of repart, we avoid anything else from interfering with the block device inbetween operations. --- src/partition/repart.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/partition/repart.c b/src/partition/repart.c index f377908a33..5cbe59cdf7 100644 --- a/src/partition/repart.c +++ b/src/partition/repart.c @@ -1615,11 +1615,11 @@ static int context_load_partition_table( *backing_fd = fd_reopen(fdisk_get_devfd(c), O_RDONLY|O_CLOEXEC); if (*backing_fd < 0) return log_error_errno(*backing_fd, "Failed to duplicate fdisk fd: %m"); - } - /* Tell udev not to interfere while we are processing the device */ - if (flock(fdisk_get_devfd(c), arg_dry_run ? LOCK_SH : LOCK_EX) < 0) - return log_error_errno(errno, "Failed to lock block device: %m"); + /* Tell udev not to interfere while we are processing the device */ + if (flock(*backing_fd, arg_dry_run ? LOCK_SH : LOCK_EX) < 0) + return log_error_errno(errno, "Failed to lock block device: %m"); + } /* The offsets/sizes libfdisk returns to us will be in multiple of the sector size of the * device. This is typically 512, and sometimes 4096. Let's query libfdisk once for it, and then use -- 2.25.1