Browse code

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

Alexander Larsson authored on 2013/10/16 06:27:47
Showing 1 changed files
... ...
@@ -175,6 +175,11 @@ const (
175 175
 	DeviceSetGeometry
176 176
 )
177 177
 
178
+const (
179
+	AddNodeOnResume AddNodeType = iota
180
+	AddNodeOnCreate
181
+)
182
+
178 183
 var (
179 184
 	ErrTaskRun              = errors.New("dm_task_run failed")
180 185
 	ErrTaskSetName          = errors.New("dm_task_set_name failed")
... ...
@@ -209,6 +214,7 @@ type (
209 209
 		TargetCount   int32
210 210
 	}
211 211
 	TaskType int
212
+	AddNodeType int
212 213
 )
213 214
 
214 215
 func (t *Task) destroy() {
... ...
@@ -274,6 +280,13 @@ func (t *Task) SetCookie(cookie *uint32, flags uint16) error {
274 274
 	return nil
275 275
 }
276 276
 
277
+func (t *Task) SetAddNode(add_node AddNodeType) error {
278
+	if res := C.dm_task_set_add_node(t.unmanaged, C.dm_add_node_t (add_node)); res != 1 {
279
+		return ErrTaskSetAddNode
280
+	}
281
+	return nil
282
+}
283
+
277 284
 func (t *Task) SetRo() error {
278 285
 	if res := C.dm_task_set_ro(t.unmanaged); res != 1 {
279 286
 		return ErrTaskSetRO
... ...
@@ -614,6 +627,9 @@ func activateDevice(poolName string, name string, deviceId int, size uint64) err
614 614
 	if err := task.AddTarget(0, size/512, "thin", params); err != nil {
615 615
 		return fmt.Errorf("Can't add target")
616 616
 	}
617
+	if err := task.SetAddNode(AddNodeOnCreate); err != nil {
618
+		return fmt.Errorf("Can't add node")
619
+	}
617 620
 
618 621
 	var cookie uint32 = 0
619 622
 	if err := task.SetCookie(&cookie, 0); err != nil {