[pve-devel] applied: [PATCH v2 storage] btrfs: check for btrfs in on_add_hook and activate

Thomas Lamprecht t.lamprecht at proxmox.com
Thu Jun 24 11:21:47 CEST 2021


On 24.06.21 10:45, Wolfgang Bumiller wrote:
> Signed-off-by: Wolfgang Bumiller <w.bumiller at proxmox.com>
> ---
> Changes to v1:
>   * Fabian's feedback:
>     * removed on_add_hook since activate_storage is called anyway
>     * moved btrfs check to after the DirPlugin checks
> 
>  PVE/Storage/BTRFSPlugin.pm | 24 +++++++++++++++++++++++-
>  1 file changed, 23 insertions(+), 1 deletion(-)
> 
>

applied, thanks! I made a follow-up on top to avoid leaving over sub-directories
form the DirPlugin::activate_storage call in the case that assert_btrfs fails.


----8<----
diff --git a/PVE/Storage/BTRFSPlugin.pm b/PVE/Storage/BTRFSPlugin.pm
index dc5894a..5360dca 100644
--- a/PVE/Storage/BTRFSPlugin.pm
+++ b/PVE/Storage/BTRFSPlugin.pm
@@ -112,8 +112,21 @@ my sub assert_btrfs($) {
 
 sub activate_storage {
     my ($class, $storeid, $scfg, $cache) = @_;
-    PVE::Storage::DirPlugin::activate_storage($class, $storeid, $scfg, $cache);
-    assert_btrfs($scfg->{path});
+
+    my $path = $scfg->{path};
+    if (!defined($scfg->{mkdir}) || $scfg->{mkdir}) {
+       mkpath $path;
+    }
+
+    my $mp = PVE::Storage::DirPlugin::parse_is_mountpoint($scfg);
+    if (defined($mp) && !path_is_mounted($mp, $cache->{mountdata})) {
+       die "unable to activate storage '$storeid' - directory is expected to be a mount point but"
+       ." is not mounted: '$mp'\n";
+    }
+
+    assert_btrfs($path); # only assert this stuff now, ensures $path is there and better UX
+
+    $class->SUPER::activate_storage($storeid, $scfg, $cache);
 }
 
 sub status {





More information about the pve-devel mailing list