Browse Source

devmapper: create device nodes 'on create' instead of 'on resume'

Alexander Larsson 11 years ago
parent
commit
5ebaca7e55
1 changed files with 16 additions and 0 deletions
  1. 16 0
      devmapper/devmapper.go

+ 16 - 0
devmapper/devmapper.go

@@ -175,6 +175,11 @@ const (
 	DeviceSetGeometry
 	DeviceSetGeometry
 )
 )
 
 
+const (
+	AddNodeOnResume AddNodeType = iota
+	AddNodeOnCreate
+)
+
 var (
 var (
 	ErrTaskRun              = errors.New("dm_task_run failed")
 	ErrTaskRun              = errors.New("dm_task_run failed")
 	ErrTaskSetName          = errors.New("dm_task_set_name failed")
 	ErrTaskSetName          = errors.New("dm_task_set_name failed")
@@ -209,6 +214,7 @@ type (
 		TargetCount   int32
 		TargetCount   int32
 	}
 	}
 	TaskType int
 	TaskType int
+	AddNodeType int
 )
 )
 
 
 func (t *Task) destroy() {
 func (t *Task) destroy() {
@@ -274,6 +280,13 @@ func (t *Task) SetCookie(cookie *uint32, flags uint16) error {
 	return nil
 	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 {
 func (t *Task) SetRo() error {
 	if res := C.dm_task_set_ro(t.unmanaged); res != 1 {
 	if res := C.dm_task_set_ro(t.unmanaged); res != 1 {
 		return ErrTaskSetRO
 		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 {
 	if err := task.AddTarget(0, size/512, "thin", params); err != nil {
 		return fmt.Errorf("Can't add target")
 		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
 	var cookie uint32 = 0
 	if err := task.SetCookie(&cookie, 0); err != nil {
 	if err := task.SetCookie(&cookie, 0); err != nil {