|
@@ -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 {
|