Browse Source

zfs magicnumber check on freebsd is fixed

Signed-off-by: Alexey Guskov <lexag@mail.ru>
Alexey Guskov 10 năm trước cách đây
mục cha
commit
36bf6e4440

+ 0 - 13
daemon/graphdriver/zfs/zfs.go

@@ -116,19 +116,6 @@ func parseOptions(opt []string) (ZfsOptions, error) {
 	return options, nil
 }
 
-func checkRootdirFs(rootdir string) error {
-	var buf syscall.Statfs_t
-	if err := syscall.Statfs(rootdir, &buf); err != nil {
-		return fmt.Errorf("Failed to access '%s': %s", rootdir, err)
-	}
-
-	if graphdriver.FsMagic(buf.Type) != graphdriver.FsMagicZfs {
-		log.Debugf("[zfs] no zfs dataset found for rootdir '%s'", rootdir)
-		return graphdriver.ErrPrerequisites
-	}
-	return nil
-}
-
 func lookupZfsDataset(rootdir string) (string, error) {
 	var stat syscall.Stat_t
 	if err := syscall.Stat(rootdir, &stat); err != nil {

+ 24 - 0
daemon/graphdriver/zfs/zfs_freebsd.go

@@ -0,0 +1,24 @@
+package zfs
+
+import (
+	"fmt"
+	"syscall"
+
+	log "github.com/Sirupsen/logrus"
+	"github.com/docker/docker/daemon/graphdriver"
+)
+
+func checkRootdirFs(rootdir string) error {
+	var buf syscall.Statfs_t
+	if err := syscall.Statfs(rootdir, &buf); err != nil {
+		return fmt.Errorf("Failed to access '%s': %s", rootdir, err)
+	}
+
+	// on FreeBSD buf.Fstypename contains ['z', 'f', 's', 0 ... ]
+	if (buf.Fstypename[0] != 122) || (buf.Fstypename[1] != 102) || (buf.Fstypename[2] != 115) || (buf.Fstypename[3] != 0) {
+		log.Debugf("[zfs] no zfs dataset found for rootdir '%s'", rootdir)
+		return graphdriver.ErrPrerequisites
+	}
+
+	return nil
+}

+ 23 - 0
daemon/graphdriver/zfs/zfs_linux.go

@@ -0,0 +1,23 @@
+package zfs
+
+import (
+	"fmt"
+	"syscall"
+
+	log "github.com/Sirupsen/logrus"
+	"github.com/docker/docker/daemon/graphdriver"
+)
+
+func checkRootdirFs(rootdir string) error {
+	var buf syscall.Statfs_t
+	if err := syscall.Statfs(rootdir, &buf); err != nil {
+		return fmt.Errorf("Failed to access '%s': %s", rootdir, err)
+	}
+
+	if graphdriver.FsMagic(buf.Type) != graphdriver.FsMagicZfs {
+		log.Debugf("[zfs] no zfs dataset found for rootdir '%s'", rootdir)
+		return graphdriver.ErrPrerequisites
+	}
+
+	return nil
+}

+ 5 - 1
daemon/graphdriver/zfs/zfs_unsupported.go

@@ -1,3 +1,7 @@
-// +build !linux
+// +build !linux,!freebsd
 
 package zfs
+
+func checkRootdirFs(rootdir string) error {
+	return nil
+}