Signed-off-by: Vincent Batts <vbatts@redhat.com>
| ... | ... |
@@ -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 {
|
| ... | ... |
@@ -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() {
|