From 5ebaca7e55e006083e6e9c2782e4f8b421275579 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Tue, 15 Oct 2013 21:27:47 +0000 Subject: [PATCH] devmapper: create device nodes 'on create' instead of 'on resume' --- devmapper/devmapper.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/devmapper/devmapper.go b/devmapper/devmapper.go index 97a388e4c9..a925c1a996 100644 --- a/devmapper/devmapper.go +++ b/devmapper/devmapper.go @@ -175,6 +175,11 @@ const ( DeviceSetGeometry ) +const ( + AddNodeOnResume AddNodeType = iota + AddNodeOnCreate +) + var ( ErrTaskRun = errors.New("dm_task_run failed") ErrTaskSetName = errors.New("dm_task_set_name failed") @@ -209,6 +214,7 @@ type ( TargetCount int32 } TaskType int + AddNodeType int ) func (t *Task) destroy() { @@ -274,6 +280,13 @@ func (t *Task) SetCookie(cookie *uint32, flags uint16) error { return nil } +func (t *Task) SetAddNode(add_node AddNodeType) error { + if res := C.dm_task_set_add_node(t.unmanaged, C.dm_add_node_t (add_node)); res != 1 { + return ErrTaskSetAddNode + } + return nil +} + func (t *Task) SetRo() error { if res := C.dm_task_set_ro(t.unmanaged); res != 1 { return ErrTaskSetRO @@ -614,6 +627,9 @@ func activateDevice(poolName string, name string, deviceId int, size uint64) err if err := task.AddTarget(0, size/512, "thin", params); err != nil { return fmt.Errorf("Can't add target") } + if err := task.SetAddNode(AddNodeOnCreate); err != nil { + return fmt.Errorf("Can't add node") + } var cookie uint32 = 0 if err := task.SetCookie(&cookie, 0); err != nil {