Browse code

zfs magicnumber check on freebsd is fixed

Signed-off-by: Alexey Guskov <lexag@mail.ru>

Alexey Guskov authored on 2015/05/29 00:38:08
Showing 4 changed files
... ...
@@ -116,19 +116,6 @@ func parseOptions(opt []string) (ZfsOptions, error) {
116 116
 	return options, nil
117 117
 }
118 118
 
119
-func checkRootdirFs(rootdir string) error {
120
-	var buf syscall.Statfs_t
121
-	if err := syscall.Statfs(rootdir, &buf); err != nil {
122
-		return fmt.Errorf("Failed to access '%s': %s", rootdir, err)
123
-	}
124
-
125
-	if graphdriver.FsMagic(buf.Type) != graphdriver.FsMagicZfs {
126
-		log.Debugf("[zfs] no zfs dataset found for rootdir '%s'", rootdir)
127
-		return graphdriver.ErrPrerequisites
128
-	}
129
-	return nil
130
-}
131
-
132 119
 func lookupZfsDataset(rootdir string) (string, error) {
133 120
 	var stat syscall.Stat_t
134 121
 	if err := syscall.Stat(rootdir, &stat); err != nil {
135 122
new file mode 100644
... ...
@@ -0,0 +1,24 @@
0
+package zfs
1
+
2
+import (
3
+	"fmt"
4
+	"syscall"
5
+
6
+	log "github.com/Sirupsen/logrus"
7
+	"github.com/docker/docker/daemon/graphdriver"
8
+)
9
+
10
+func checkRootdirFs(rootdir string) error {
11
+	var buf syscall.Statfs_t
12
+	if err := syscall.Statfs(rootdir, &buf); err != nil {
13
+		return fmt.Errorf("Failed to access '%s': %s", rootdir, err)
14
+	}
15
+
16
+	// on FreeBSD buf.Fstypename contains ['z', 'f', 's', 0 ... ]
17
+	if (buf.Fstypename[0] != 122) || (buf.Fstypename[1] != 102) || (buf.Fstypename[2] != 115) || (buf.Fstypename[3] != 0) {
18
+		log.Debugf("[zfs] no zfs dataset found for rootdir '%s'", rootdir)
19
+		return graphdriver.ErrPrerequisites
20
+	}
21
+
22
+	return nil
23
+}
0 24
new file mode 100644
... ...
@@ -0,0 +1,23 @@
0
+package zfs
1
+
2
+import (
3
+	"fmt"
4
+	"syscall"
5
+
6
+	log "github.com/Sirupsen/logrus"
7
+	"github.com/docker/docker/daemon/graphdriver"
8
+)
9
+
10
+func checkRootdirFs(rootdir string) error {
11
+	var buf syscall.Statfs_t
12
+	if err := syscall.Statfs(rootdir, &buf); err != nil {
13
+		return fmt.Errorf("Failed to access '%s': %s", rootdir, err)
14
+	}
15
+
16
+	if graphdriver.FsMagic(buf.Type) != graphdriver.FsMagicZfs {
17
+		log.Debugf("[zfs] no zfs dataset found for rootdir '%s'", rootdir)
18
+		return graphdriver.ErrPrerequisites
19
+	}
20
+
21
+	return nil
22
+}
... ...
@@ -1,3 +1,7 @@
1
-// +build !linux
1
+// +build !linux,!freebsd
2 2
 
3 3
 package zfs
4
+
5
+func checkRootdirFs(rootdir string) error {
6
+	return nil
7
+}