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

Reply via email to