Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package inspektor-gadget for
openSUSE:Factory checked in at 2026-03-12 22:22:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/inspektor-gadget (Old)
and /work/SRC/openSUSE:Factory/.inspektor-gadget.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "inspektor-gadget"
Thu Mar 12 22:22:55 2026 rev:27 rq:1338511 version:0.50.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/inspektor-gadget/inspektor-gadget.changes
2026-03-05 17:24:15.241322500 +0100
+++
/work/SRC/openSUSE:Factory/.inspektor-gadget.new.8177/inspektor-gadget.changes
2026-03-12 22:27:44.039791177 +0100
@@ -1,0 +2,8 @@
+Thu Mar 12 11:48:09 UTC 2026 - Johannes Kastl
<[email protected]>
+
+- Update to version 0.50.1:
+ * Bug fixes
+ - [BACKPORT] include: Add maps dedicated to count ring buffer
+ lost samples. by @eiffel-fl in #5359
+
+-------------------------------------------------------------------
Old:
----
inspektor-gadget-0.50.0.obscpio
New:
----
inspektor-gadget-0.50.1.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ inspektor-gadget.spec ++++++
--- /var/tmp/diff_new_pack.3Bsloa/_old 2026-03-12 22:27:45.039833088 +0100
+++ /var/tmp/diff_new_pack.3Bsloa/_new 2026-03-12 22:27:45.043833256 +0100
@@ -17,7 +17,7 @@
Name: inspektor-gadget
-Version: 0.50.0
+Version: 0.50.1
Release: 0
Summary: A eBPF tool and systems inspection framework
License: Apache-2.0
++++++ _service ++++++
--- /var/tmp/diff_new_pack.3Bsloa/_old 2026-03-12 22:27:45.079834765 +0100
+++ /var/tmp/diff_new_pack.3Bsloa/_new 2026-03-12 22:27:45.087835100 +0100
@@ -3,7 +3,7 @@
<param
name="url">https://github.com/inspektor-gadget/inspektor-gadget</param>
<param name="scm">git</param>
<param name="exclude">.git</param>
- <param name="revision">v0.50.0</param>
+ <param name="revision">v0.50.1</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="versionrewrite-pattern">v(.*)</param>
<param name="changesgenerate">enable</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.3Bsloa/_old 2026-03-12 22:27:45.111836106 +0100
+++ /var/tmp/diff_new_pack.3Bsloa/_new 2026-03-12 22:27:45.115836274 +0100
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param
name="url">https://github.com/inspektor-gadget/inspektor-gadget</param>
- <param
name="changesrevision">2aa588b49ad7a4742e88ea897f1a71f811d07650</param></service></servicedata>
+ <param
name="changesrevision">64b90d99ca8e6f3c4153ea3c94599b230e73fdef</param></service></servicedata>
(No newline at EOF)
++++++ inspektor-gadget-0.50.0.obscpio -> inspektor-gadget-0.50.1.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/inspektor-gadget-0.50.0/docs/gadget-devel/gadget-ebpf-api.md
new/inspektor-gadget-0.50.1/docs/gadget-devel/gadget-ebpf-api.md
--- old/inspektor-gadget-0.50.0/docs/gadget-devel/gadget-ebpf-api.md
2026-02-27 15:12:59.000000000 +0100
+++ new/inspektor-gadget-0.50.1/docs/gadget-devel/gadget-ebpf-api.md
2026-03-12 11:13:53.000000000 +0100
@@ -530,7 +530,7 @@
Then, you can interact with the buffer using these functions:
-1. `void *gadget_reserve_buf(void *map, __u64 size)`: Reserves memory in the
corresponding buffer.
+1. `void *gadget_reserve_buf(void *map, __u64 size)`: Reserves memory in the
corresponding buffer. This is actually a macro and you must call it by taking
the address of the map, like `gadget_reserve_buf(&events, 256)`.
1. `long gadget_submit_buf(void *ctx, void *map, void *buf, __u64 size)`:
Writes the previously reserved memory in the corresponding buffer.
1. `void gadget_discard_buf(void *buf)`: Discards the previously reserved
buffer. This is needed to avoid wasting memory.
1. `long gadget_output_buf(void *ctx, void *map, void *buf, __u64 size)`:
Reserves and writes the buffer in the corresponding map. This is equivalent to
calling `gadget_reserve_buf()` and `gadget_submit_buf()`.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/inspektor-gadget-0.50.0/include/gadget/buffer.h
new/inspektor-gadget-0.50.1/include/gadget/buffer.h
--- old/inspektor-gadget-0.50.0/include/gadget/buffer.h 2026-02-27
15:12:59.000000000 +0100
+++ new/inspektor-gadget-0.50.1/include/gadget/buffer.h 2026-03-12
11:13:53.000000000 +0100
@@ -11,12 +11,19 @@
#define GADGET_MAX_EVENT_SIZE 10240
#endif
-#define GADGET_TRACER_MAP(name, size) \
- struct { \
- __uint(type, BPF_MAP_TYPE_RINGBUF); \
- __uint(max_entries, size); \
- } name SEC(".maps"); \
- const void *gadget_map_tracer_##name __attribute__((unused));
+#define GADGET_TRACER_MAP(name, size) \
+ struct { \
+ __uint(type, BPF_MAP_TYPE_RINGBUF); \
+ __uint(max_entries, size); \
+ } name SEC(".maps"); \
+ const void *gadget_map_tracer_##name __attribute__((unused)); \
+ \
+ struct { \
+ __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); \
+ __uint(max_entries, 1); \
+ __uint(key_size, sizeof(__u32)); \
+ __uint(value_size, sizeof(__u64)); \
+ } name##_lost_samples SEC(".maps");
#ifndef GADGET_NO_BUF_RESERVE
struct {
@@ -26,13 +33,25 @@
__uint(value_size, GADGET_MAX_EVENT_SIZE);
} gadget_heap SEC(".maps");
-static __always_inline void *gadget_reserve_buf(void *map, __u64 size)
+// _lost_samples has to be suffixed because user will give &map as argument.
+#define gadget_reserve_buf(map, size) \
+ __gadget_reserve_buf(map, map##_lost_samples, size)
+
+static __always_inline void *__gadget_reserve_buf(void *map, void
*lost_samples,
+ __u64 size)
{
- static const int zero = 0;
+ const int zero = 0;
if (bpf_core_enum_value_exists(enum bpf_func_id,
- BPF_FUNC_ringbuf_reserve))
- return bpf_ringbuf_reserve(map, size, 0);
+ BPF_FUNC_ringbuf_reserve)) {
+ void *mem = bpf_ringbuf_reserve(map, size, 0);
+ if (mem == NULL) {
+ __u64 *cnt = bpf_map_lookup_elem(lost_samples, &zero);
+ if (cnt)
+ *cnt += 1;
+ }
+ return mem;
+ }
return bpf_map_lookup_elem(&gadget_heap, &zero);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/inspektor-gadget-0.50.0/pkg/operators/ebpf/tracer.go
new/inspektor-gadget-0.50.1/pkg/operators/ebpf/tracer.go
--- old/inspektor-gadget-0.50.0/pkg/operators/ebpf/tracer.go 2026-02-27
15:12:59.000000000 +0100
+++ new/inspektor-gadget-0.50.1/pkg/operators/ebpf/tracer.go 2026-03-12
11:13:53.000000000 +0100
@@ -20,6 +20,8 @@
"os"
"strings"
"sync"
+ "sync/atomic"
+ "time"
"github.com/cilium/ebpf"
"github.com/cilium/ebpf/btf"
@@ -28,6 +30,7 @@
"github.com/inspektor-gadget/inspektor-gadget/pkg/datasource"
"github.com/inspektor-gadget/inspektor-gadget/pkg/gadgets"
+ "github.com/inspektor-gadget/inspektor-gadget/pkg/logger"
"github.com/inspektor-gadget/inspektor-gadget/pkg/operators"
)
@@ -42,9 +45,11 @@
mapType ebpf.MapType
eventSize uint32 // needed to trim trailing bytes when reading for
perf event array
+ lostSampleMap *ebpf.Map
ringbufReader *ringbuf.Reader
perfReader *perf.Reader
slowBuf []byte
+ logger logger.Logger
}
func validateTracerMap(traceMap *ebpf.MapSpec) error {
@@ -121,12 +126,58 @@
var readCb func() (data []byte, lost uint64, err error)
+ cpus, err := ebpf.PossibleCPU()
+ if err != nil {
+ return fmt.Errorf("getting eBPF possibles CPUs: %w", err)
+ }
+
switch t.mapType {
case ebpf.RingBuf:
var rec ringbuf.Record
+ lostSamples := uint64(0)
+
+ if t.lostSampleMap != nil {
+ readLostSamples := func() {
+ ticker := time.NewTicker(time.Second)
+ for range ticker.C {
+ // Ring buffer does not report the
number of lost samples. For this,
+ // we have a specific map, for each
ring buffer, which store the
+ // number of lost samples when
gadget_reserve_buf() is used.
+ // We periodically read this map to
know the number of lost samples
+ // for this period. The next time the
ring buffer will be read, the
+ // number of lost samples will be
reported and reset until next period.
+ readValues := make([]uint64, cpus)
+ zeroValues := make([]uint64, cpus)
+ zero := uint32(0)
+
+ err := t.lostSampleMap.Lookup(&zero,
readValues)
+ if err != nil {
+ t.logger.Warnf("getting lost
samples: %w", err)
+
+ continue
+ }
+
+ err = t.lostSampleMap.Update(&zero,
zeroValues, ebpf.UpdateExist)
+ if err != nil {
+ t.logger.Warnf("resetting lost
samples: %w", err)
+
+ continue
+ }
+
+ sum := uint64(0)
+ for i := range readValues {
+ sum += readValues[i]
+ }
+ atomic.StoreUint64(&lostSamples, sum)
+ }
+ }
+
+ go readLostSamples()
+ }
+
readCb = func() ([]byte, uint64, error) {
err := t.ringbufReader.ReadInto(&rec)
- return rec.RawSample, 0, err
+ return rec.RawSample, atomic.SwapUint64(&lostSamples,
0), err
}
case ebpf.PerfEventArray:
var rec perf.Record
@@ -241,6 +292,14 @@
case ebpf.RingBuf:
i.logger.Debugf("creating ringbuf reader for map %q",
tracer.mapName)
tracer.ringbufReader, err = ringbuf.NewReader(m)
+
+ lostSamplesMapName := tracer.mapName + "_lost_samples"
+ lostSamplesMap, ok := i.collection.Maps[lostSamplesMapName]
+ if !ok {
+ i.logger.Warnf("looking up lost sample map %q: not
found; ring buffer lost samples will not be reported.", lostSamplesMapName)
+ }
+ tracer.lostSampleMap = lostSamplesMap
+ tracer.logger = i.logger
case ebpf.PerfEventArray:
i.logger.Debugf("creating perf reader for map %q",
tracer.mapName)
tracer.perfReader, err = perf.NewReader(m,
gadgets.PerfBufferPages*os.Getpagesize())
++++++ inspektor-gadget.obsinfo ++++++
--- /var/tmp/diff_new_pack.3Bsloa/_old 2026-03-12 22:27:47.375930993 +0100
+++ /var/tmp/diff_new_pack.3Bsloa/_new 2026-03-12 22:27:47.383931329 +0100
@@ -1,5 +1,5 @@
name: inspektor-gadget
-version: 0.50.0
-mtime: 1772201579
-commit: 2aa588b49ad7a4742e88ea897f1a71f811d07650
+version: 0.50.1
+mtime: 1773310433
+commit: 64b90d99ca8e6f3c4153ea3c94599b230e73fdef
++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/inspektor-gadget/vendor.tar.gz
/work/SRC/openSUSE:Factory/.inspektor-gadget.new.8177/vendor.tar.gz differ:
char 132, line 2