Deferred reove functionality was added to library later. So in old version
of library it did not report deferred_remove field.
Create a new function which also gets deferred_remove field and it will be
called only on newer version of library.
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
... | ... |
@@ -87,16 +87,17 @@ type ( |
87 | 87 |
Device []uint64 |
88 | 88 |
} |
89 | 89 |
Info struct { |
90 |
- Exists int |
|
91 |
- Suspended int |
|
92 |
- LiveTable int |
|
93 |
- InactiveTable int |
|
94 |
- OpenCount int32 |
|
95 |
- EventNr uint32 |
|
96 |
- Major uint32 |
|
97 |
- Minor uint32 |
|
98 |
- ReadOnly int |
|
99 |
- TargetCount int32 |
|
90 |
+ Exists int |
|
91 |
+ Suspended int |
|
92 |
+ LiveTable int |
|
93 |
+ InactiveTable int |
|
94 |
+ OpenCount int32 |
|
95 |
+ EventNr uint32 |
|
96 |
+ Major uint32 |
|
97 |
+ Minor uint32 |
|
98 |
+ ReadOnly int |
|
99 |
+ TargetCount int32 |
|
100 |
+ DeferredRemove int |
|
100 | 101 |
} |
101 | 102 |
TaskType int |
102 | 103 |
AddNodeType int |
... | ... |
@@ -222,6 +223,14 @@ func (t *Task) GetInfo() (*Info, error) { |
222 | 222 |
return info, nil |
223 | 223 |
} |
224 | 224 |
|
225 |
+func (t *Task) GetInfoWithDeferred() (*Info, error) { |
|
226 |
+ info := &Info{} |
|
227 |
+ if res := DmTaskGetInfoWithDeferred(t.unmanaged, info); res != 1 { |
|
228 |
+ return nil, ErrTaskGetInfo |
|
229 |
+ } |
|
230 |
+ return info, nil |
|
231 |
+} |
|
232 |
+ |
|
225 | 233 |
func (t *Task) GetDriverVersion() (string, error) { |
226 | 234 |
res := DmTaskGetDriverVersion(t.unmanaged) |
227 | 235 |
if res == "" { |
... | ... |
@@ -531,6 +540,17 @@ func GetInfo(name string) (*Info, error) { |
531 | 531 |
return task.GetInfo() |
532 | 532 |
} |
533 | 533 |
|
534 |
+func GetInfoWithDeferred(name string) (*Info, error) { |
|
535 |
+ task, err := TaskCreateNamed(DeviceInfo, name) |
|
536 |
+ if task == nil { |
|
537 |
+ return nil, err |
|
538 |
+ } |
|
539 |
+ if err := task.Run(); err != nil { |
|
540 |
+ return nil, err |
|
541 |
+ } |
|
542 |
+ return task.GetInfoWithDeferred() |
|
543 |
+} |
|
544 |
+ |
|
534 | 545 |
func GetDriverVersion() (string, error) { |
535 | 546 |
task := TaskCreate(DeviceVersion) |
536 | 547 |
if task == nil { |
... | ... |
@@ -90,29 +90,30 @@ const ( |
90 | 90 |
) |
91 | 91 |
|
92 | 92 |
var ( |
93 |
- DmGetLibraryVersion = dmGetLibraryVersionFct |
|
94 |
- DmGetNextTarget = dmGetNextTargetFct |
|
95 |
- DmLogInitVerbose = dmLogInitVerboseFct |
|
96 |
- DmSetDevDir = dmSetDevDirFct |
|
97 |
- DmTaskAddTarget = dmTaskAddTargetFct |
|
98 |
- DmTaskCreate = dmTaskCreateFct |
|
99 |
- DmTaskDestroy = dmTaskDestroyFct |
|
100 |
- DmTaskGetDeps = dmTaskGetDepsFct |
|
101 |
- DmTaskGetInfo = dmTaskGetInfoFct |
|
102 |
- DmTaskGetDriverVersion = dmTaskGetDriverVersionFct |
|
103 |
- DmTaskRun = dmTaskRunFct |
|
104 |
- DmTaskSetAddNode = dmTaskSetAddNodeFct |
|
105 |
- DmTaskSetCookie = dmTaskSetCookieFct |
|
106 |
- DmTaskSetMessage = dmTaskSetMessageFct |
|
107 |
- DmTaskSetName = dmTaskSetNameFct |
|
108 |
- DmTaskSetRo = dmTaskSetRoFct |
|
109 |
- DmTaskSetSector = dmTaskSetSectorFct |
|
110 |
- DmUdevWait = dmUdevWaitFct |
|
111 |
- DmUdevSetSyncSupport = dmUdevSetSyncSupportFct |
|
112 |
- DmUdevGetSyncSupport = dmUdevGetSyncSupportFct |
|
113 |
- DmCookieSupported = dmCookieSupportedFct |
|
114 |
- LogWithErrnoInit = logWithErrnoInitFct |
|
115 |
- DmTaskDeferredRemove = dmTaskDeferredRemoveFct |
|
93 |
+ DmGetLibraryVersion = dmGetLibraryVersionFct |
|
94 |
+ DmGetNextTarget = dmGetNextTargetFct |
|
95 |
+ DmLogInitVerbose = dmLogInitVerboseFct |
|
96 |
+ DmSetDevDir = dmSetDevDirFct |
|
97 |
+ DmTaskAddTarget = dmTaskAddTargetFct |
|
98 |
+ DmTaskCreate = dmTaskCreateFct |
|
99 |
+ DmTaskDestroy = dmTaskDestroyFct |
|
100 |
+ DmTaskGetDeps = dmTaskGetDepsFct |
|
101 |
+ DmTaskGetInfo = dmTaskGetInfoFct |
|
102 |
+ DmTaskGetDriverVersion = dmTaskGetDriverVersionFct |
|
103 |
+ DmTaskRun = dmTaskRunFct |
|
104 |
+ DmTaskSetAddNode = dmTaskSetAddNodeFct |
|
105 |
+ DmTaskSetCookie = dmTaskSetCookieFct |
|
106 |
+ DmTaskSetMessage = dmTaskSetMessageFct |
|
107 |
+ DmTaskSetName = dmTaskSetNameFct |
|
108 |
+ DmTaskSetRo = dmTaskSetRoFct |
|
109 |
+ DmTaskSetSector = dmTaskSetSectorFct |
|
110 |
+ DmUdevWait = dmUdevWaitFct |
|
111 |
+ DmUdevSetSyncSupport = dmUdevSetSyncSupportFct |
|
112 |
+ DmUdevGetSyncSupport = dmUdevGetSyncSupportFct |
|
113 |
+ DmCookieSupported = dmCookieSupportedFct |
|
114 |
+ LogWithErrnoInit = logWithErrnoInitFct |
|
115 |
+ DmTaskDeferredRemove = dmTaskDeferredRemoveFct |
|
116 |
+ DmTaskGetInfoWithDeferred = dmTaskGetInfoWithDeferredFct |
|
116 | 117 |
) |
117 | 118 |
|
118 | 119 |
func free(p *C.char) { |
... | ... |
@@ -13,3 +13,21 @@ const LibraryDeferredRemovalSupport = true |
13 | 13 |
func dmTaskDeferredRemoveFct(task *CDmTask) int { |
14 | 14 |
return int(C.dm_task_deferred_remove((*C.struct_dm_task)(task))) |
15 | 15 |
} |
16 |
+ |
|
17 |
+func dmTaskGetInfoWithDeferredFct(task *CDmTask, info *Info) int { |
|
18 |
+ Cinfo := C.struct_dm_info{} |
|
19 |
+ defer func() { |
|
20 |
+ info.Exists = int(Cinfo.exists) |
|
21 |
+ info.Suspended = int(Cinfo.suspended) |
|
22 |
+ info.LiveTable = int(Cinfo.live_table) |
|
23 |
+ info.InactiveTable = int(Cinfo.inactive_table) |
|
24 |
+ info.OpenCount = int32(Cinfo.open_count) |
|
25 |
+ info.EventNr = uint32(Cinfo.event_nr) |
|
26 |
+ info.Major = uint32(Cinfo.major) |
|
27 |
+ info.Minor = uint32(Cinfo.minor) |
|
28 |
+ info.ReadOnly = int(Cinfo.read_only) |
|
29 |
+ info.TargetCount = int32(Cinfo.target_count) |
|
30 |
+ info.DeferredRemove = int(Cinfo.deferred_remove) |
|
31 |
+ }() |
|
32 |
+ return int(C.dm_task_get_info((*C.struct_dm_task)(task), &Cinfo)) |
|
33 |
+} |