Browse code

devmapper: include dm_deps information in debug

Signed-off-by: Vincent Batts <vbatts@redhat.com>

Vincent Batts authored on 2014/09/25 23:57:37
Showing 4 changed files
... ...
@@ -771,10 +771,15 @@ func (devices *DeviceSet) deactivatePool() error {
771 771
 	log.Debugf("[devmapper] deactivatePool()")
772 772
 	defer log.Debugf("[devmapper] deactivatePool END")
773 773
 	devname := devices.getPoolDevName()
774
+
774 775
 	devinfo, err := getInfo(devname)
775 776
 	if err != nil {
776 777
 		return err
777 778
 	}
779
+	if d, err := getDeps(devname); err == nil {
780
+		// Access to more Debug output
781
+		log.Debugf("[devmapper] getDeps() %s: %#v", devname, d)
782
+	}
778 783
 	if devinfo.Exists != 0 {
779 784
 		return removeDevice(devname)
780 785
 	}
... ...
@@ -51,6 +51,7 @@ var (
51 51
 	ErrTaskSetRo              = errors.New("dm_task_set_ro failed")
52 52
 	ErrTaskAddTarget          = errors.New("dm_task_add_target failed")
53 53
 	ErrTaskSetSector          = errors.New("dm_task_set_sector failed")
54
+	ErrTaskGetDeps            = errors.New("dm_task_get_deps failed")
54 55
 	ErrTaskGetInfo            = errors.New("dm_task_get_info failed")
55 56
 	ErrTaskGetDriverVersion   = errors.New("dm_task_get_driver_version failed")
56 57
 	ErrTaskSetCookie          = errors.New("dm_task_set_cookie failed")
... ...
@@ -75,6 +76,11 @@ type (
75 75
 	Task struct {
76 76
 		unmanaged *CDmTask
77 77
 	}
78
+	Deps struct {
79
+		Count  uint32
80
+		Filler uint32
81
+		Device []uint64
82
+	}
78 83
 	Info struct {
79 84
 		Exists        int
80 85
 		Suspended     int
... ...
@@ -171,6 +177,14 @@ func (t *Task) AddTarget(start, size uint64, ttype, params string) error {
171 171
 	return nil
172 172
 }
173 173
 
174
+func (t *Task) GetDeps() (*Deps, error) {
175
+	var deps *Deps
176
+	if deps = DmTaskGetDeps(t.unmanaged); deps == nil {
177
+		return nil, ErrTaskGetDeps
178
+	}
179
+	return deps, nil
180
+}
181
+
174 182
 func (t *Task) GetInfo() (*Info, error) {
175 183
 	info := &Info{}
176 184
 	if res := DmTaskGetInfo(t.unmanaged, info); res != 1 {
... ...
@@ -392,6 +406,17 @@ func createTask(t TaskType, name string) (*Task, error) {
392 392
 	return task, nil
393 393
 }
394 394
 
395
+func getDeps(name string) (*Deps, error) {
396
+	task, err := createTask(DeviceDeps, name)
397
+	if task == nil {
398
+		return nil, err
399
+	}
400
+	if err := task.Run(); err != nil {
401
+		return nil, err
402
+	}
403
+	return task.GetDeps()
404
+}
405
+
395 406
 func getInfo(name string) (*Info, error) {
396 407
 	task, err := createTask(DeviceInfo, name)
397 408
 	if task == nil {
... ...
@@ -3,8 +3,9 @@
3 3
 package devmapper
4 4
 
5 5
 import (
6
-	"github.com/docker/docker/daemon/graphdriver/graphtest"
7 6
 	"testing"
7
+
8
+	"github.com/docker/docker/daemon/graphdriver/graphtest"
8 9
 )
9 10
 
10 11
 func init() {
... ...
@@ -38,9 +38,7 @@ static void	log_with_errno_init()
38 38
 */
39 39
 import "C"
40 40
 
41
-import (
42
-	"unsafe"
43
-)
41
+import "unsafe"
44 42
 
45 43
 type (
46 44
 	CDmTask C.struct_dm_task
... ...
@@ -92,6 +90,7 @@ var (
92 92
 	DmTaskAddTarget        = dmTaskAddTargetFct
93 93
 	DmTaskCreate           = dmTaskCreateFct
94 94
 	DmTaskDestroy          = dmTaskDestroyFct
95
+	DmTaskGetDeps          = dmTaskGetDepsFct
95 96
 	DmTaskGetInfo          = dmTaskGetInfoFct
96 97
 	DmTaskGetDriverVersion = dmTaskGetDriverVersionFct
97 98
 	DmTaskRun              = dmTaskRunFct
... ...
@@ -168,6 +167,21 @@ func dmTaskAddTargetFct(task *CDmTask,
168 168
 	return int(C.dm_task_add_target((*C.struct_dm_task)(task), C.uint64_t(start), C.uint64_t(size), Cttype, Cparams))
169 169
 }
170 170
 
171
+func dmTaskGetDepsFct(task *CDmTask) *Deps {
172
+	Cdeps := C.dm_task_get_deps((*C.struct_dm_task)(task))
173
+	if Cdeps == nil {
174
+		return nil
175
+	}
176
+	deps := &Deps{
177
+		Count:  uint32(Cdeps.count),
178
+		Filler: uint32(Cdeps.filler),
179
+	}
180
+	for _, device := range Cdeps.device {
181
+		deps.Device = append(deps.Device, (uint64)(device))
182
+	}
183
+	return deps
184
+}
185
+
171 186
 func dmTaskGetInfoFct(task *CDmTask, info *Info) int {
172 187
 	Cinfo := C.struct_dm_info{}
173 188
 	defer func() {