From: Stoiko Ivanov <s.ivanov@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH container v3 1/2] add fsfreeze helper:
Date: Fri, 6 Nov 2020 15:19:41 +0100 [thread overview]
Message-ID: <20201106141942.7643-4-s.ivanov@proxmox.com> (raw)
In-Reply-To: <20201106141942.7643-1-s.ivanov@proxmox.com>
fsfreeze_mountpoint issues the same ioctls as fsfreeze(8) on the provided
directory (the $thaw parameter deciding between '--freeze' and '--unfreeze')
This is used for container backups on RBD, where snapshots on containers,
which are heavy on IO, are not mountable readonly, because the ext4 is not
consistent.
Needed to fix #2991 and #2528.
The ioctl numbers were found via strace -X verbose (and verified with the
kernel documentation).
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
src/PVE/LXC/Config.pm | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/src/PVE/LXC/Config.pm b/src/PVE/LXC/Config.pm
index 49f599b..0528d51 100644
--- a/src/PVE/LXC/Config.pm
+++ b/src/PVE/LXC/Config.pm
@@ -13,6 +13,9 @@ use PVE::Tools;
use base qw(PVE::AbstractConfig);
+use constant {FIFREEZE => 0xc0045877,
+ FITHAW => 0xc0045878};
+
my $nodename = PVE::INotify::nodename();
my $lock_handles = {};
my $lockdir = "/run/lock/lxc";
@@ -109,6 +112,22 @@ sub __snapshot_check_freeze_needed {
return ($ret, $ret);
}
+# implements similar functionality to fsfreeze(8)
+sub fsfreeze_mountpoint {
+ my ($path, $thaw) = @_;
+
+ my $op = $thaw ? 'thaw' : 'freeze';
+ my $ioctl = $thaw ? FITHAW : FIFREEZE;
+
+ sysopen my $fd, $path, O_RDONLY or die "failed to open $path: $!\n";
+ my $ioctl_err;
+ if (!ioctl($fd, $ioctl, 0)) {
+ $ioctl_err = "$!";
+ }
+ close($fd);
+ die "fs$op '$path' failed - $ioctl_err\n" if defined $ioctl_err;
+}
+
sub __snapshot_freeze {
my ($class, $vmid, $unfreeze) = @_;
--
2.20.1
next prev parent reply other threads:[~2020-11-06 14:20 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-06 14:19 [pve-devel] [PATCH container/storage v3] add fsfreeze/thaw for rbd snapshots Stoiko Ivanov
2020-11-06 14:19 ` [pve-devel] [PATCH storage v3 1/2] fix typo in comment Stoiko Ivanov
2020-11-06 14:19 ` [pve-devel] [PATCH storage v3 2/2] add check for fsfreeze before snapshot Stoiko Ivanov
2020-11-06 14:19 ` Stoiko Ivanov [this message]
2020-11-06 14:19 ` [pve-devel] [PATCH container v3 2/2] snapshot creation: fsfreeze mountpoints, if needed Stoiko Ivanov
2020-11-10 18:24 ` [pve-devel] applied-series: [PATCH container/storage v3] add fsfreeze/thaw for rbd snapshots Thomas Lamprecht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201106141942.7643-4-s.ivanov@proxmox.com \
--to=s.ivanov@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal