Re: [PATCH] trace-cmd: fix writing of uncompressed size

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Jul 11, 2022 at 10:44 AM Sven Schnelle <svens@xxxxxxxxxxxxx> wrote:
>
> Pass &size instead of &handle->pointer. Interestingly this doesn't hurt
> on x86, but makes trace-cmd fail on s390.

Hi Sven,
Thanks for testing this code on s390, I've tested it only on x86.
Please, can you give more information about the trace-cmd failure on
s390?

>
> Fixes: 3f8447b1 ("trace-cmd library: Add support for compression algorithms")
> Signed-off-by: Sven Schnelle <svens@xxxxxxxxxxxxx>
> ---
>  lib/trace-cmd/trace-compress.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/lib/trace-cmd/trace-compress.c b/lib/trace-cmd/trace-compress.c
> index a63295e..ad9b7fc 100644
> --- a/lib/trace-cmd/trace-compress.c
> +++ b/lib/trace-cmd/trace-compress.c
> @@ -331,7 +331,7 @@ int tracecmd_compress_block(struct tracecmd_compression *handle)
>                 goto out;
>
>         /* Write uncompressed data size */
> -       endian4 = tep_read_number(handle->tep, &handle->pointer, 4);
> +       endian4 = tep_read_number(handle->tep, &size, 4);

Here 'size' is the size of the buffer, used by the compression
algorithm to compress the data block. That size depends on the
algorithm, but usually it is less than the uncompressed data size and
bigger than the compressed data size. On this position in the file
must be written the size of the uncompressed data, that is
'handle->pointer'. I agree that the name is a bit misleading, as this
is not a pointer to a memory address.  The 'handle->pointer' is the
offset within the compression buffer, where the next uncompressed data
will be written. The logic uses a dynamic buffer with given capacity.
When the buffer is empty, 'handle->pointer' is 0. With each
uncompressed data chunk, written into that buffer, 'handle->pointer'
increases with its size - i.e. the first byte is written on position 0
(the initial 'handle->pointer') and the pointer increases to 1. That's
why it reflects the size of the uncompressed data. When the pointer
reaches the capacity of the buffer, the buffer is extended. At the
end, that buffer is passed to the compression algorithm, to compress
the block.

>         ret = do_write(handle, &endian4, 4);
>         if (ret != 4) {
>                 ret = -1;
> --
> 2.36.1
>


-- 
Tzvetomir (Ceco) Stoyanov
VMware Open Source Technology Center



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Kernel Development]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Info]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Linux Media]     [Device Mapper]

  Powered by Linux