mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-25 06:03:40 +03:00
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.
This commit is contained in:
parent
33b7d7b284
commit
25baae502a
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user