Before adding more chunks, adjust the previous chunk size. This
fixes an inflate issue, where we'd get Z_DATA_ERROR because the
middle chunk did not have the correct length.
Signed-off-by: Jens Axboe <axboe@fb.com>
static int gz_work(struct iolog_flush_data *data)
{
static int gz_work(struct iolog_flush_data *data)
{
- struct iolog_compress *c;
+ struct iolog_compress *c = NULL;
struct flist_head list;
unsigned int seq;
z_stream stream;
struct flist_head list;
unsigned int seq;
z_stream stream;
(unsigned long) stream.avail_in, seq,
data->log->filename);
do {
(unsigned long) stream.avail_in, seq,
data->log->filename);
do {
+ if (c)
+ dprint(FD_COMPRESS, "seq=%d, chunk=%lu\n", seq, c->len);
c = get_new_chunk(seq);
stream.avail_out = GZ_CHUNK;
stream.next_out = c->buf;
c = get_new_chunk(seq);
stream.avail_out = GZ_CHUNK;
stream.next_out = c->buf;
total += c->len;
dprint(FD_COMPRESS, "seq=%d, chunk=%lu\n", seq, c->len);
} else {
total += c->len;
dprint(FD_COMPRESS, "seq=%d, chunk=%lu\n", seq, c->len);
} else {
+ total -= c->len;
+ c->len = GZ_CHUNK - stream.avail_out;
+ total += c->len;
+ dprint(FD_COMPRESS, "seq=%d, chunk=%lu\n", seq, c->len);
+
do {
c = get_new_chunk(seq);
stream.avail_out = GZ_CHUNK;
do {
c = get_new_chunk(seq);
stream.avail_out = GZ_CHUNK;