1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
From 5efac9cfed92a890dc1a073fe60b1c814c305267 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber@ubuntu.com>
Date: Thu, 4 Nov 2021 14:05:27 -0400
Subject: [PATCH] lxd/storage/btrfs: Support 5.14.2
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Closes #9418
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
---
lxd/storage/drivers/driver_btrfs.go | 18 ++++++++++++++++++
lxd/storage/drivers/driver_btrfs_utils.go | 8 +++++++-
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/lxd/storage/drivers/driver_btrfs.go b/lxd/storage/drivers/driver_btrfs.go
index e6a64bf8136..a47be766f8f 100644
--- a/lxd/storage/drivers/driver_btrfs.go
+++ b/lxd/storage/drivers/driver_btrfs.go
@@ -17,10 +17,12 @@ import (
"github.com/lxc/lxd/shared/api"
"github.com/lxc/lxd/shared/units"
"github.com/lxc/lxd/shared/validate"
+ "github.com/lxc/lxd/shared/version"
)
var btrfsVersion string
var btrfsLoaded bool
+var btrfsPropertyForce bool
type btrfs struct {
common
@@ -64,6 +66,22 @@ func (d *btrfs) load() error {
}
}
+ // Check if we need --force to set properties.
+ ver5142, err := version.Parse("5.14.2")
+ if err != nil {
+ return err
+ }
+
+ ourVer, err := version.Parse(btrfsVersion)
+ if err != nil {
+ return err
+ }
+
+ // If running 5.14.2 or older, we need --force.
+ if ourVer.Compare(ver5142) > 0 {
+ btrfsPropertyForce = true
+ }
+
btrfsLoaded = true
return nil
}
diff --git a/lxd/storage/drivers/driver_btrfs_utils.go b/lxd/storage/drivers/driver_btrfs_utils.go
index e1a359e8490..0618e29e6f2 100644
--- a/lxd/storage/drivers/driver_btrfs_utils.go
+++ b/lxd/storage/drivers/driver_btrfs_utils.go
@@ -308,7 +308,13 @@ func (d *btrfs) setSubvolumeReadonlyProperty(path string, readonly bool) error {
return nil
}
- _, err := shared.RunCommand("btrfs", "property", "set", "-ts", path, "ro", fmt.Sprintf("%t", readonly))
+ args := []string{"property", "set"}
+ if btrfsPropertyForce {
+ args = append(args, "-f")
+ }
+ args = append(args, "-ts", path, "ro", fmt.Sprintf("%t", readonly))
+
+ _, err := shared.RunCommand("btrfs", args...)
return err
}
|