Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package nbdkit for openSUSE:Factory checked in at 2026-09-23 14:36:04 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/nbdkit (Old) and /work/SRC/openSUSE:Factory/.nbdkit.new.383539 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "nbdkit" Wed Sep 23 14:36:04 2026 rev:31 rq:1379905 version:1.48.1 Changes: -------- --- /work/SRC/openSUSE:Factory/nbdkit/nbdkit.changes 2026-08-14 22:08:39.040618604 +0200 +++ /work/SRC/openSUSE:Factory/.nbdkit.new.383539/nbdkit.changes 2026-09-23 14:37:33.198820882 +0200 @@ -1,0 +2,13 @@ +Wed Sep 16 06:27:32 UTC 2026 - Charles Arnold <[email protected]> + +- Update to version 1.48.1: + * Version 1.48.1. + * golang: Ignore Flush called from pwrite + FUA + * golang: Fix read/write mutex usage + * docs/nbdkit-protocol.pod: Update export safe list + * map: Fix comments + * make: force dist file comparison to use C sort ordering + * indexed-gzip: Fix restart at non-byte-aligned access points + * tests/test-sparse-random-blocksize.sh: Reduce maximum block size + +------------------------------------------------------------------- Old: ---- nbdkit-1.48.0.tar.xz New: ---- nbdkit-1.48.1.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ nbdkit.spec ++++++ --- /var/tmp/diff_new_pack.5S9zR5/_old 2026-09-23 14:37:34.384870476 +0200 +++ /var/tmp/diff_new_pack.5S9zR5/_new 2026-09-23 14:37:34.392870811 +0200 @@ -27,7 +27,7 @@ %global broken_test_arches %{arm} aarch64 %{ix86} Name: nbdkit -Version: 1.48.0 +Version: 1.48.1 Release: 0 Summary: Network Block Device server License: BSD-3-Clause ++++++ _service ++++++ --- /var/tmp/diff_new_pack.5S9zR5/_old 2026-09-23 14:37:34.482874574 +0200 +++ /var/tmp/diff_new_pack.5S9zR5/_new 2026-09-23 14:37:34.496875159 +0200 @@ -1,7 +1,7 @@ <services> <service name="tar_scm" mode="manual"> <param name="filename">nbdkit</param> - <param name="revision">v1.48.0</param> + <param name="revision">v1.48.1</param> <param name="scm">git</param> <param name="submodules">disable</param> <param name="url">https://gitlab.com/nbdkit/nbdkit.git</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.5S9zR5/_old 2026-09-23 14:37:34.554877585 +0200 +++ /var/tmp/diff_new_pack.5S9zR5/_new 2026-09-23 14:37:34.561877878 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://gitlab.com/nbdkit/nbdkit.git</param> - <param name="changesrevision">111be961359500291bd3792317b042d72bef5efd</param></service></servicedata> + <param name="changesrevision">fb1624d38bdc5e9e2376ac00e39b2d6a6bc62b56</param></service></servicedata> (No newline at EOF) ++++++ nbdkit-1.48.0.tar.xz -> nbdkit-1.48.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nbdkit-1.48.0/Makefile.am new/nbdkit-1.48.1/Makefile.am --- old/nbdkit-1.48.0/Makefile.am 2026-07-14 12:48:58.000000000 +0200 +++ new/nbdkit-1.48.1/Makefile.am 2026-08-29 10:37:40.000000000 +0200 @@ -121,14 +121,14 @@ # generated files have been included in the tarball. (Note you must # have done 'make dist') maintainer-check-extra-dist: - @tar ztf $(PACKAGE_NAME)-$(VERSION).tar.gz | sort | \ + @tar ztf $(PACKAGE_NAME)-$(VERSION).tar.gz | LANG=C sort | \ sed 's,^$(PACKAGE_NAME)-$(VERSION)/,,' > tarfiles @git ls-files | \ grep -v \ -e '^\.gitlab-ci.yml' \ -e '^ci/' | \ - sort > gitfiles - @comm -13 tarfiles gitfiles > comm-out + LANG=C sort > gitfiles + @LANG=C comm -13 tarfiles gitfiles > comm-out @echo Checking for differences between EXTRA_DIST and git ... @cat comm-out @[ ! -s comm-out ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nbdkit-1.48.0/configure.ac new/nbdkit-1.48.1/configure.ac --- old/nbdkit-1.48.0/configure.ac 2026-07-14 12:48:58.000000000 +0200 +++ new/nbdkit-1.48.1/configure.ac 2026-08-29 10:37:40.000000000 +0200 @@ -31,7 +31,7 @@ m4_define([NBDKIT_VERSION_MAJOR], [1]) m4_define([NBDKIT_VERSION_MINOR], [48]) -m4_define([NBDKIT_VERSION_MICRO], [0]) +m4_define([NBDKIT_VERSION_MICRO], [1]) AC_INIT([nbdkit], NBDKIT_VERSION_MAJOR.NBDKIT_VERSION_MINOR.NBDKIT_VERSION_MICRO) AC_CONFIG_MACRO_DIR([m4]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nbdkit-1.48.0/docs/nbdkit-protocol.pod new/nbdkit-1.48.1/docs/nbdkit-protocol.pod --- old/nbdkit-1.48.0/docs/nbdkit-protocol.pod 2026-07-14 12:48:58.000000000 +0200 +++ new/nbdkit-1.48.1/docs/nbdkit-protocol.pod 2026-08-29 10:37:40.000000000 +0200 @@ -278,10 +278,11 @@ checkwrite Yes count Yes cow Yes, since 1.44 + ddrescue No delay Yes error Yes - evil Yes + evil Yes exitlast Yes exitwhen Yes exportname Yes @@ -289,21 +290,23 @@ extentlist Not useful with exports fua Yes gzip No + indexed-gzip No ip Yes + limit Yes log Yes - luks No lzip No + map No multi-conn Yes nocache Yes noextents Yes nofilter Yes noparallel Yes + nozero Yes offset Yes, but unlikely to be useful openonce Yes - partition No pause Yes protect Yes, but unlikely to be useful @@ -311,10 +314,10 @@ rate Yes readahead Yes, since 1.32 readonly Yes + retry Yes retry-request Yes rotational Yes - scan Yes spinning Yes stats Yes @@ -322,6 +325,7 @@ tar No time-limit Yes tls-fallback Yes + truncate Yes, but unlikely to be useful xor Yes xz No diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nbdkit-1.48.0/filters/indexed-gzip/ig_zran.c new/nbdkit-1.48.1/filters/indexed-gzip/ig_zran.c --- old/nbdkit-1.48.0/filters/indexed-gzip/ig_zran.c 2026-07-14 12:48:58.000000000 +0200 +++ new/nbdkit-1.48.1/filters/indexed-gzip/ig_zran.c 2026-08-29 10:37:40.000000000 +0200 @@ -242,23 +242,63 @@ "point->bits=%d", lo, (intmax_t) point->in, (intmax_t) point->out, point->bits); - // Initialize the input file and prime the inflate engine to start there. + // Initialize the compressed input and prime inflate at the access point. + // + // For a non-byte-aligned access point, point->in identifies the first + // complete byte following the partial byte. Read that preceding byte, + // use its high-order unused bits to prime zlib, and then continue normal + // compressed input at point->in. off_t start_byte = point->in - (point->bits ? 1 : 0); - int ch = 0; + unsigned char ch = 0; + index->strm.avail_in = 0; + int ret = inflateReset2(&index->strm, RAW); - index->strm.total_in = start_byte; - nbdkit_debug("ig_deflate_index_extract: " - "inflateReset2 returned %d, start_byte=%jd", - ret, (intmax_t) start_byte); - if (ret != Z_OK) + if (ret != Z_OK) { + nbdkit_debug("ig_deflate_index_extract: inflateReset2 returned %d", + ret); return ret; + } + if (point->bits) { - nbdkit_debug("ig_deflate_index_extract: calling INFLATEPRIME with bits=%d", point->bits); - INFLATEPRIME(&index->strm, point->bits, ch >> (8 - point->bits)); + if (next->pread(next, &ch, 1, start_byte, 0, err) == -1) { + nbdkit_debug("ig_deflate_index_extract: " + "failed to read priming byte at offset %jd", + (intmax_t) start_byte); + return Z_NBDKIT_ERROR; + } + + nbdkit_debug("ig_deflate_index_extract: " + "calling INFLATEPRIME with bits=%d, byte=0x%02x", + point->bits, ch); + + ret = INFLATEPRIME(&index->strm, point->bits, + ch >> (8 - point->bits)); + if (ret != Z_OK) { + nbdkit_debug("ig_deflate_index_extract: " + "INFLATEPRIME returned %d", + ret); + return ret; + } } - inflateSetDictionary(&index->strm, point->window, point->dict); - nbdkit_debug("ig_deflate_index_extract: dictionary set, dict size=%d", point->dict); + + // The priming byte, when present, has already been consumed above. + index->strm.total_in = point->in; + + ret = inflateSetDictionary(&index->strm, point->window, point->dict); + if (ret != Z_OK) { + nbdkit_debug("ig_deflate_index_extract: " + "inflateSetDictionary returned %d", + ret); + return ret; + } + + nbdkit_debug("ig_deflate_index_extract: " + "restart prepared, start_byte=%jd, next_input=%jd, " + "dict size=%d", + (intmax_t) start_byte, + (intmax_t) index->strm.total_in, + point->dict); // Skip uncompressed bytes until offset reached, then satisfy request. unsigned char input[CHUNK]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nbdkit-1.48.0/filters/map/map.c new/nbdkit-1.48.1/filters/map/map.c --- old/nbdkit-1.48.0/filters/map/map.c 2026-07-14 12:48:58.000000000 +0200 +++ new/nbdkit-1.48.1/filters/map/map.c 2026-08-29 10:37:40.000000000 +0200 @@ -54,7 +54,7 @@ * A single struct range stores a range from start-end (inclusive). * end can be INT64_MAX to indicate the end of the file. * - * 'range_list' stores the list of protected ranges, unsorted. + * 'range_list' stores the list of ranges, unsorted. */ struct range { uint64_t start, end; @@ -65,8 +65,8 @@ DEFINE_VECTOR_TYPE (ranges, struct range); static ranges range_list; -/* region_list covers the whole address space with protected and - * unprotected ranges. +/* region_list covers the whole address space with ranges, with no + * overlaps or gaps. */ static regions region_list; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nbdkit-1.48.0/plugins/golang/src/libguestfs.org/nbdkit/nbdkit.go new/nbdkit-1.48.1/plugins/golang/src/libguestfs.org/nbdkit/nbdkit.go --- old/nbdkit-1.48.0/plugins/golang/src/libguestfs.org/nbdkit/nbdkit.go 2026-07-14 12:48:58.000000000 +0200 +++ new/nbdkit-1.48.1/plugins/golang/src/libguestfs.org/nbdkit/nbdkit.go 2026-08-29 10:37:40.000000000 +0200 @@ -218,7 +218,20 @@ } func (c *Connection) Flush(flags uint32) error { - panic("plugin CanFlush returns true, but no Flush() function") + // nbdkit can in fact call Flush even if CanFlush exists and + // returns false. This is hinted in nbdkit-plugin(3) but not + // very clearly. If the C callback .can_fua does not exist + // but .flush exists then nbdkit assumes NBDKIT_FUA_EMULATE + // mode, and PWrite + FUA calls Flush anyway. In golang + // plugins we don't implement .can_fua yet and the .flush + // callback always exists (to nbdkit). + // + // The best we can do is ignore the "unexpected" Flush. + // + // We don't return an error because that would cause PWrite + + // FUA to fail, and we assume if the plugin didn't implement + // Flush then it's not needed. + return nil } func (c *Connection) Trim(count uint32, offset uint64, flags uint32) error { @@ -329,9 +342,9 @@ func getConn(handle unsafe.Pointer) ConnectionInterface { id := uintptr(handle) - connectionMutex.Lock() + connectionMutex.RLock() h, ok := connectionMap[id] - connectionMutex.Unlock() + connectionMutex.RUnlock() if !ok { panic(fmt.Sprintf("connection %d was not open", id)) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nbdkit-1.48.0/tests/test-sparse-random-blocksize.sh new/nbdkit-1.48.1/tests/test-sparse-random-blocksize.sh --- old/nbdkit-1.48.0/tests/test-sparse-random-blocksize.sh 2026-07-14 12:48:58.000000000 +0200 +++ new/nbdkit-1.48.1/tests/test-sparse-random-blocksize.sh 2026-08-29 10:37:40.000000000 +0200 @@ -55,7 +55,7 @@ # but if this picks a 32M block size, then this could consume up to # 4 * 16 * 32 == 2048 MB of RAM. This is a problem on smaller systems # (and especially 32 bit), so choose a lesser maximum. -blocksize_r="$(( 10 + (RANDOM % 17) ))" ;# 10..26 +blocksize_r="$(( 10 + (RANDOM % 16) ))" ;# 10..25 blocksize="$(( 1 << blocksize_r ))" export out
