Skip to content

Commit 06c08a4

Browse files
committed
struct_ops: move initKernStructOps() to NewCollectionWithOptions()
Signed-off-by: shun159 <[email protected]>
1 parent 7888a06 commit 06c08a4

File tree

2 files changed

+14
-22
lines changed

2 files changed

+14
-22
lines changed

collection.go

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -269,11 +269,6 @@ func (cs *CollectionSpec) LoadAndAssign(to interface{}, opts *CollectionOptions)
269269
}
270270
defer loader.close()
271271

272-
// initialize struct_ops maps
273-
if err := loader.initKernStructOps(loader.coll); err != nil {
274-
return err
275-
}
276-
277272
// Support assigning Programs and Maps, lazy-loading the required objects.
278273
assignedMaps := make(map[string]bool)
279274
assignedProgs := make(map[string]bool)
@@ -372,6 +367,11 @@ func NewCollectionWithOptions(spec *CollectionSpec, opts CollectionOptions) (*Co
372367
}
373368
defer loader.close()
374369

370+
// initialize struct_ops maps
371+
if err := loader.initKernStructOps(); err != nil {
372+
return nil, err
373+
}
374+
375375
// Create maps first, as their fds need to be linked into programs.
376376
for mapName := range spec.Maps {
377377
if _, err := loader.loadMap(mapName); err != nil {
@@ -767,7 +767,6 @@ func (cl *collectionLoader) copyDataMember(
767767
structOps *structOpsSpec,
768768
structOpsMeta *structOpsMeta,
769769
ms *MapSpec,
770-
cs *CollectionSpec,
771770
) error {
772771
memberName := member.Name
773772
memberOff := member.Offset / 8
@@ -819,7 +818,7 @@ func (cl *collectionLoader) copyDataMember(
819818
return nil
820819
}
821820

822-
ps, ok := cs.Programs[fnName]
821+
ps, ok := cl.coll.Programs[fnName]
823822
if !ok {
824823
return fmt.Errorf("Program %s is not found in CollectionSpec", fnName)
825824
}
@@ -857,8 +856,8 @@ func (cl *collectionLoader) copyDataMember(
857856

858857
// initKernStructOps collects typed metadata for struct_ops maps from the CollectionSpec.
859858
// It does not modify specs nor create kernel objects. Value population happens in a follow-up PR.
860-
func (cl *collectionLoader) initKernStructOps(cs *CollectionSpec) error {
861-
for _, ms := range cs.Maps {
859+
func (cl *collectionLoader) initKernStructOps() error {
860+
for _, ms := range cl.coll.Maps {
862861
if ms.Type != StructOpsMap {
863862
continue
864863
}
@@ -901,7 +900,7 @@ func (cl *collectionLoader) initKernStructOps(cs *CollectionSpec) error {
901900
kernTypes,
902901
structOps,
903902
structOpsMeta,
904-
ms, cs,
903+
ms,
905904
); err != nil {
906905
return err
907906
}

collection_test.go

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -809,19 +809,12 @@ func TestStructOpsMapSpecSimpleLoadAndAssign(t *testing.T) {
809809
},
810810
}
811811

812-
var obj struct {
813-
DummyTest1 *Program `ebpf:"test_func_1"`
814-
DummyOps *Map `ebpf:"testmod_ops"`
815-
}
816-
817-
err := spec.LoadAndAssign(&obj, nil)
818-
testutils.SkipIfNotSupported(t, err)
819-
if err != nil {
820-
t.Fatalf("LoadAndAssign failed: %v", err)
812+
coll := mustNewCollection(t, spec, nil)
813+
for name := range spec.Maps {
814+
qt.Assert(t, qt.IsNotNil(coll.Maps[name]))
821815
}
822-
t.Cleanup(func() { _ = obj.DummyOps.Close() })
823816

824-
if obj.DummyOps == nil {
825-
t.Fatal("DummyOps not assigned")
817+
for name := range spec.Programs {
818+
qt.Assert(t, qt.IsNotNil(coll.Programs[name]))
826819
}
827820
}

0 commit comments

Comments
 (0)