Skip to content

Commit 4986ce7

Browse files
committed
devicemapper: Create a method to get device info with deferred remove field
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>
1 parent 20b38f4 commit 4986ce7

File tree

4 files changed

+76
-33
lines changed

4 files changed

+76
-33
lines changed

pkg/devicemapper/devmapper.go

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -87,16 +87,17 @@ type (
8787
Device []uint64
8888
}
8989
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
100101
}
101102
TaskType int
102103
AddNodeType int
@@ -222,6 +223,14 @@ func (t *Task) GetInfo() (*Info, error) {
222223
return info, nil
223224
}
224225

226+
func (t *Task) GetInfoWithDeferred() (*Info, error) {
227+
info := &Info{}
228+
if res := DmTaskGetInfoWithDeferred(t.unmanaged, info); res != 1 {
229+
return nil, ErrTaskGetInfo
230+
}
231+
return info, nil
232+
}
233+
225234
func (t *Task) GetDriverVersion() (string, error) {
226235
res := DmTaskGetDriverVersion(t.unmanaged)
227236
if res == "" {
@@ -531,6 +540,17 @@ func GetInfo(name string) (*Info, error) {
531540
return task.GetInfo()
532541
}
533542

543+
func GetInfoWithDeferred(name string) (*Info, error) {
544+
task, err := TaskCreateNamed(DeviceInfo, name)
545+
if task == nil {
546+
return nil, err
547+
}
548+
if err := task.Run(); err != nil {
549+
return nil, err
550+
}
551+
return task.GetInfoWithDeferred()
552+
}
553+
534554
func GetDriverVersion() (string, error) {
535555
task := TaskCreate(DeviceVersion)
536556
if task == nil {

pkg/devicemapper/devmapper_wrapper.go

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -90,29 +90,30 @@ const (
9090
)
9191

9292
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
116117
)
117118

118119
func free(p *C.char) {

pkg/devicemapper/devmapper_wrapper_deferred_remove.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,21 @@ const LibraryDeferredRemovalSupport = true
1313
func dmTaskDeferredRemoveFct(task *CDmTask) int {
1414
return int(C.dm_task_deferred_remove((*C.struct_dm_task)(task)))
1515
}
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+
}

pkg/devicemapper/devmapper_wrapper_no_deferred_remove.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,7 @@ func dmTaskDeferredRemoveFct(task *CDmTask) int {
88
// Error. Nobody should be calling it.
99
return -1
1010
}
11+
12+
func dmTaskGetInfoWithDeferredFct(task *CDmTask, info *Info) int {
13+
return -1
14+
}

0 commit comments

Comments
 (0)