Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package u-boot for openSUSE:Factory checked 
in at 2021-04-22 18:03:36
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/u-boot (Old)
 and      /work/SRC/openSUSE:Factory/.u-boot.new.12324 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "u-boot"

Thu Apr 22 18:03:36 2021 rev:148 rq:886599 version:2021.04

Changes:
--------
--- /work/SRC/openSUSE:Factory/u-boot/u-boot.changes    2021-04-12 
12:34:06.401085805 +0200
+++ /work/SRC/openSUSE:Factory/.u-boot.new.12324/u-boot.changes 2021-04-22 
18:03:56.706504787 +0200
@@ -1,0 +2,7 @@
+Mon Apr 19 07:18:23 UTC 2021 - Guillaume GARDET <guillaume.gar...@opensuse.org>
+
+Patch queue updated from https://github.com/openSUSE/u-boot.git 
tumbleweed-2021.04
+* Patches added:
+  0014-fs-btrfs-fix-the-false-alert-of-dec.patch - boo#1183717
+
+-------------------------------------------------------------------

New:
----
  0014-fs-btrfs-fix-the-false-alert-of-dec.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ u-boot.spec ++++++
--- /var/tmp/diff_new_pack.LM96WF/_old  2021-04-22 18:03:57.386505838 +0200
+++ /var/tmp/diff_new_pack.LM96WF/_new  2021-04-22 18:03:57.390505844 +0200
@@ -233,6 +233,7 @@
 Patch0011:      0011-Disable-CONFIG_CMD_BTRFS-in-xilinx_.patch
 Patch0012:      0012-smbios-Fix-table-when-no-string-is-.patch
 Patch0013:      0013-configs-rpi-Enable-SMBIOS-sysinfo-d.patch
+Patch0014:      0014-fs-btrfs-fix-the-false-alert-of-dec.patch
 # Patches: end
 BuildRequires:  bc
 BuildRequires:  bison

++++++ 0014-fs-btrfs-fix-the-false-alert-of-dec.patch ++++++
>From 95067913a0d90d37decce6835bababa0f3739275 Mon Sep 17 00:00:00 2001
From: Qu Wenruo <w...@suse.com>
Date: Sat, 17 Apr 2021 20:52:13 +0800
Subject: [PATCH] fs: btrfs: fix the false alert of decompression failure

There are some cases where decompressed sectors can have padding zeros.

In kernel code, we have lines to address such situation:

        /*
         * btrfs_getblock is doing a zero on the tail of the page too,
         * but this will cover anything missing from the decompressed
         * data.
         */
        if (bytes < destlen)
                memset(kaddr+bytes, 0, destlen-bytes);
        kunmap_local(kaddr);

But not in U-boot code, thus we have some reports of U-boot failed to
read compressed files in btrfs.

Fix it by doing the same thing of the kernel, for both inline and
regular compressed extents.

Reported-by: Matwey Kornilov <matwey.korni...@gmail.com>
Link: https://bugzilla.suse.com/show_bug.cgi?id=1183717
Fixes: a26a6bedafcf ("fs: btrfs: Introduce btrfs_read_extent_inline() and 
btrfs_read_extent_reg()")
Signed-off-by: Qu Wenruo <w...@suse.com>
---
 fs/btrfs/inode.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 019d532a1a..2c2379303d 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -390,10 +390,16 @@ int btrfs_read_extent_inline(struct btrfs_path *path,
                           csize);
        ret = btrfs_decompress(btrfs_file_extent_compression(leaf, fi),
                               cbuf, csize, dbuf, dsize);
-       if (ret < 0 || ret != dsize) {
+       if (ret == (u32)-1) {
                ret = -EIO;
                goto out;
        }
+       /*
+        * The compressed part ends before sector boundary, the remaining needs
+        * to be zeroed out.
+        */
+       if (ret < dsize)
+               memset(dbuf + ret, 0, dsize - ret);
        memcpy(dest, dbuf, dsize);
        ret = dsize;
 out:
@@ -494,10 +500,16 @@ int btrfs_read_extent_reg(struct btrfs_path *path,
 
        ret = btrfs_decompress(btrfs_file_extent_compression(leaf, fi), cbuf,
                               csize, dbuf, dsize);
-       if (ret != dsize) {
+       if (ret == (u32)-1) {
                ret = -EIO;
                goto out;
        }
+       /*
+        * The compressed part ends before sector boundary, the remaining needs
+        * to be zeroed out.
+        */
+       if (ret < dsize)
+               memset(dbuf + ret, 0, dsize - ret);
        /* Then copy the needed part */
        memcpy(dest, dbuf + btrfs_file_extent_offset(leaf, fi), len);
        ret = len;

Reply via email to