diff --git a/PVE/Storage.pm b/PVE/Storage.pm index ad10827..18eef46 100755 --- a/PVE/Storage.pm +++ b/PVE/Storage.pm @@ -41,11 +41,11 @@ use PVE::Storage::DRBDPlugin; use PVE::Storage::PBSPlugin; # Storage API version. Increment it on changes in storage API interface. -use constant APIVER => 6; +use constant APIVER => 7; # Age is the number of versions we're backward compatible with. # This is like having 'current=APIVER' and age='APIAGE' in libtool, # see https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html -use constant APIAGE => 5; +use constant APIAGE => 6; # load standard plugins PVE::Storage::DirPlugin->register(); @@ -287,6 +287,18 @@ sub volume_snapshot_delete { } } +# check if a filesystem on top of a volume needs to flush its journal for +# consistency (see fsfreeze(8)) before a snapshot is taken - needed for +# container mountpoints +sub volume_snapshot_needs_fsfreeze { + my ($cfg, $volid) = @_; + + my ($storeid, $volname) = parse_volume_id($volid); + my $scfg = storage_config($cfg, $storeid); + my $plugin = PVE::Storage::Plugin->lookup($scfg->{type}); + return $plugin->volume_snapshot_needs_fsfreeze(); +} + # check if a volume or snapshot supports a given feature # $feature - one of: # clone - linked clone is possible diff --git a/PVE/Storage/Plugin.pm b/PVE/Storage/Plugin.pm index 63f68da..a046640 100644 --- a/PVE/Storage/Plugin.pm +++ b/PVE/Storage/Plugin.pm @@ -888,6 +888,10 @@ sub volume_snapshot_delete { return undef; } +sub volume_snapshot_needs_fsfreeze { + + return 0; +} sub storage_can_replicate { my ($class, $scfg, $storeid, $format) = @_; diff --git a/PVE/Storage/RBDPlugin.pm b/PVE/Storage/RBDPlugin.pm index 38f2b46..94df89d 100644 --- a/PVE/Storage/RBDPlugin.pm +++ b/PVE/Storage/RBDPlugin.pm @@ -694,6 +694,11 @@ sub volume_snapshot_delete { return undef; } +sub volume_snapshot_needs_fsfreeze { + + return 1; +} + sub volume_has_feature { my ($class, $scfg, $feature, $storeid, $volname, $snapname, $running) = @_;