All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
To: Minchan Kim <minchan@kernel.org>
Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>,
	Jerome Marchand <jmarchan@redhat.com>,
	Chao Yu <chao2.yu@samsung.com>, Nitin Gupta <ngupta@vflare.org>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] zram: fix incorrectly stat with failed_reads
Date: Thu, 14 Aug 2014 21:54:58 +0900	[thread overview]
Message-ID: <20140814125458.GA966@swordfish> (raw)
In-Reply-To: <20140813230216.GC9227@bbox>

Hi,

On (08/14/14 08:02), Minchan Kim wrote:
> On Wed, Aug 13, 2014 at 11:43:04PM +0900, Sergey Senozhatsky wrote:
> > Hello,
> > 
> > On (08/13/14 20:32), Sergey Senozhatsky wrote:
> > > On (08/13/14 10:31), Jerome Marchand wrote:
> > > > Date: Wed, 13 Aug 2014 10:31:45 +0200
> > > > From: Jerome Marchand <jmarchan@redhat.com>
> > > > To: Chao Yu <chao2.yu@samsung.com>, minchan@kernel.org
> > > > CC: ngupta@vflare.org, linux-kernel@vger.kernel.org, 'Sergey Senozhatsky'
> > > >  <sergey.senozhatsky@gmail.com>, 'Andrew Morton'
> > > >  <akpm@linux-foundation.org>
> > > > Subject: Re: [PATCH v2] zram: fix incorrectly stat with failed_reads
> > > > User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101
> > > >  Thunderbird/24.6.0
> > > > 
> > > > On 08/13/2014 04:01 AM, Chao Yu wrote:
> > > > > Since we allocate a temporary buffer in zram_bvec_read to handle partial page
> > > > > operations in this commit 924bd88d703e53d30f393fac6117f8f1bc79aab6 (Staging:
> > > > > zram: allow partial page operations), our ->failed_reads value may be incorrect
> > > > > as we do not increase its value when failed to allocate the temporary buffer.
> > > > > 
> > > > > Let's fix this issue and correct the annotation of failed_reads.
> > > > > 
> > > > >  v2: clean codes of failed_{reads,writes} stat pointed out by Minchan Kim, and
> > > > > this cleanup also fix incorrectly stat when fail in zram_decompress_page.
> > > > > 
> > > > > Signed-off-by: Chao Yu <chao2.yu@samsung.com>
> > > > 
> > > > Acked-by: Jerome Marchand <jmarchan@redhat.com>
> > > 
> > > Acked-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
> > > 
> > > 	-ss
> > > 
> > > > > ---
> > > > >  drivers/block/zram/zram_drv.c | 10 +++++++---
> > > > >  drivers/block/zram/zram_drv.h |  2 +-
> > > > >  2 files changed, 8 insertions(+), 4 deletions(-)
> > > > > 
> > > > > diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
> > > > > index dfa4024..d00831c 100644
> > > > > --- a/drivers/block/zram/zram_drv.c
> > > > > +++ b/drivers/block/zram/zram_drv.c
> > > > > @@ -378,7 +378,6 @@ static int zram_decompress_page(struct zram *zram, char *mem, u32 index)
> > > > >  	/* Should NEVER happen. Return bio error if it does. */
> > > > >  	if (unlikely(ret)) {
> > > > >  		pr_err("Decompression failed! err=%d, page=%u\n", ret, index);
> > > > > -		atomic64_inc(&zram->stats.failed_reads);
> > > > >  		return ret;
> > > > >  	}
> > > > >  
> > > > > @@ -547,8 +546,6 @@ out:
> > > > >  		zcomp_strm_release(zram->comp, zstrm);
> > > > >  	if (is_partial_io(bvec))
> > > > >  		kfree(uncmem);
> > > > > -	if (ret)
> > > > > -		atomic64_inc(&zram->stats.failed_writes);
> > > > >  	return ret;
> > > > >  }
> > > > >  
> > > > > @@ -566,6 +563,13 @@ static int zram_bvec_rw(struct zram *zram, struct bio_vec *bvec, u32 index,
> > > > >  		ret = zram_bvec_write(zram, bvec, index, offset);
> > > > >  	}
> > > > >  
> > > > > +	if (unlikely(ret)) {
> > > > > +		if (rw == READ)
> > > > > +			atomic64_inc(&zram->stats.failed_reads);
> > > > > +		else
> > > > > +			atomic64_inc(&zram->stats.failed_writes);
> > > > > +	}
> > > > > +
> > > > >  	return ret;
> > > > >  }
> > > > >  
> > > > > diff --git a/drivers/block/zram/zram_drv.h b/drivers/block/zram/zram_drv.h
> > > > > index 5b0afde..e0f725c 100644
> > > > > --- a/drivers/block/zram/zram_drv.h
> > > > > +++ b/drivers/block/zram/zram_drv.h
> > > > > @@ -84,7 +84,7 @@ struct zram_stats {
> > > > >  	atomic64_t compr_data_size;	/* compressed size of pages stored */
> > > > >  	atomic64_t num_reads;	/* failed + successful */
> > > > >  	atomic64_t num_writes;	/* --do-- */
> > > > > -	atomic64_t failed_reads;	/* should NEVER! happen */
> > > > > +	atomic64_t failed_reads;	/* can happen when memory is too low */
> > 
> > 
> > this grabbed my attention.
> > 
> > 	"failed_writes; /* can happen when memory is too low */"
> > 
> > theoretically, we can have a misbehaving compression algorithm. so the
> > question is -- should we fail write() if compression has failed for any
> > other reason, rather than -ENOMEM? alternatively, we can store uncompressed
> > user mem, just the same way we do for `badly' compressed buffers, set a
> > FAILED_COMPRESSION flag (so we will not leak kernel memory on read() if we
> > failed to compress is_partial_io() bv_page), and on read() copy it out as is,
> > just as we do for `badly' compessed pages.
> > 
> > so, what do you think? /* I can take a look on it */
> 
> How often does it happen?
> I don't think it's valuable to maintain if it's too rare.
> Rather, I'd like to remove the comment on failed_writes. :)
> 

I don't think I've ever observed any errors. and, apparently, lzo
is always `return LZO_E_OK'. so let's just drop it.

	-ss

  reply	other threads:[~2014-08-14 12:56 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-13  2:01 [PATCH v2] zram: fix incorrectly stat with failed_reads Chao Yu
2014-08-13  8:31 ` Jerome Marchand
2014-08-13 11:32   ` Sergey Senozhatsky
2014-08-13 14:43     ` Sergey Senozhatsky
2014-08-13 14:49       ` Sergey Senozhatsky
2014-08-13 23:02       ` Minchan Kim
2014-08-14 12:54         ` Sergey Senozhatsky [this message]
2014-08-14  0:26 ` Minchan Kim

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140814125458.GA966@swordfish \
    --to=sergey.senozhatsky@gmail.com \
    --cc=chao2.yu@samsung.com \
    --cc=jmarchan@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=minchan@kernel.org \
    --cc=ngupta@vflare.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.