All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nitin Gupta <ngupta@vflare.org>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>,
	Hugh Dickins <hugh.dickins@tiscali.co.uk>,
	Andrew Morton <akpm@linux-foundation.org>,
	Greg KH <greg@kroah.com>,
	Dan Magenheimer <dan.magenheimer@oracle.com>,
	Rik van Riel <riel@redhat.com>, Avi Kivity <avi@redhat.com>,
	Christoph Hellwig <hch@infradead.org>,
	Minchan Kim <minchan.kim@gmail.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	linux-mm <linux-mm@kvack.org>,
	linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 2/8] Basic zcache functionality
Date: Sun, 18 Jul 2010 15:21:25 +0530	[thread overview]
Message-ID: <4C42CE9D.1090303@vflare.org> (raw)
In-Reply-To: <1279442671.2476.34.camel@edumazet-laptop>

On 07/18/2010 02:14 PM, Eric Dumazet wrote:
> Le vendredi 16 juillet 2010 à 18:07 +0530, Nitin Gupta a écrit :
> 
>> This particular patch implemets basic functionality only:
>> +static u64 zcache_get_stat(struct zcache_pool *zpool,
>> +		enum zcache_pool_stats_index idx)
>> +{
>> +	int cpu;
>> +	s64 val = 0;
>> +
>> +	for_each_possible_cpu(cpu) {
>> +		unsigned int start;
>> +		struct zcache_pool_stats_cpu *stats;
>> +
>> +		stats = per_cpu_ptr(zpool->stats, cpu);
>> +		do {
>> +			start = u64_stats_fetch_begin(&stats->syncp);
>> +			val += stats->count[idx];
>> +		} while (u64_stats_fetch_retry(&stats->syncp, start));
>> +	}
>> +
>> +	BUG_ON(val < 0);
>> +	return val;
>> +}
> 
> Sorry this is wrong.
> 
> Inside the fetch/retry block you should not do the addition to val, only
> a read of value to a temporary variable, since this might be done
> several times.
> 
> You want something like :
> 
> static u64 zcache_get_stat(struct zcache_pool *zpool,
> 			   enum zcache_pool_stats_index idx)
> {
> 	int cpu;
> 	s64 temp, val = 0;
> 
> 	for_each_possible_cpu(cpu) {
> 		unsigned int start;
> 		struct zcache_pool_stats_cpu *stats;
> 
> 		stats = per_cpu_ptr(zpool->stats, cpu);
> 		do {
> 			start = u64_stats_fetch_begin(&stats->syncp);
> 			temp = stats->count[idx];
> 		} while (u64_stats_fetch_retry(&stats->syncp, start));
> 		val += temp;
> 	}
> 
> ...
> }
> 
> 

Oh, my bad. Thanks for the fix!

On a side note: u64_stats_* should probably be renamed to stats64_* since
they are equally applicable for s64.


Thanks,
Nitin

WARNING: multiple messages have this Message-ID (diff)
From: Nitin Gupta <ngupta@vflare.org>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>,
	Hugh Dickins <hugh.dickins@tiscali.co.uk>,
	Andrew Morton <akpm@linux-foundation.org>,
	Greg KH <greg@kroah.com>,
	Dan Magenheimer <dan.magenheimer@oracle.com>,
	Rik van Riel <riel@redhat.com>, Avi Kivity <avi@redhat.com>,
	Christoph Hellwig <hch@infradead.org>,
	Minchan Kim <minchan.kim@gmail.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	linux-mm <linux-mm@kvack.org>,
	linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 2/8] Basic zcache functionality
Date: Sun, 18 Jul 2010 15:21:25 +0530	[thread overview]
Message-ID: <4C42CE9D.1090303@vflare.org> (raw)
In-Reply-To: <1279442671.2476.34.camel@edumazet-laptop>

On 07/18/2010 02:14 PM, Eric Dumazet wrote:
> Le vendredi 16 juillet 2010 A  18:07 +0530, Nitin Gupta a A(C)crit :
> 
>> This particular patch implemets basic functionality only:
>> +static u64 zcache_get_stat(struct zcache_pool *zpool,
>> +		enum zcache_pool_stats_index idx)
>> +{
>> +	int cpu;
>> +	s64 val = 0;
>> +
>> +	for_each_possible_cpu(cpu) {
>> +		unsigned int start;
>> +		struct zcache_pool_stats_cpu *stats;
>> +
>> +		stats = per_cpu_ptr(zpool->stats, cpu);
>> +		do {
>> +			start = u64_stats_fetch_begin(&stats->syncp);
>> +			val += stats->count[idx];
>> +		} while (u64_stats_fetch_retry(&stats->syncp, start));
>> +	}
>> +
>> +	BUG_ON(val < 0);
>> +	return val;
>> +}
> 
> Sorry this is wrong.
> 
> Inside the fetch/retry block you should not do the addition to val, only
> a read of value to a temporary variable, since this might be done
> several times.
> 
> You want something like :
> 
> static u64 zcache_get_stat(struct zcache_pool *zpool,
> 			   enum zcache_pool_stats_index idx)
> {
> 	int cpu;
> 	s64 temp, val = 0;
> 
> 	for_each_possible_cpu(cpu) {
> 		unsigned int start;
> 		struct zcache_pool_stats_cpu *stats;
> 
> 		stats = per_cpu_ptr(zpool->stats, cpu);
> 		do {
> 			start = u64_stats_fetch_begin(&stats->syncp);
> 			temp = stats->count[idx];
> 		} while (u64_stats_fetch_retry(&stats->syncp, start));
> 		val += temp;
> 	}
> 
> ...
> }
> 
> 

Oh, my bad. Thanks for the fix!

On a side note: u64_stats_* should probably be renamed to stats64_* since
they are equally applicable for s64.


Thanks,
Nitin

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  reply	other threads:[~2010-07-18  9:50 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-16 12:37 [PATCH 0/8] zcache: page cache compression support Nitin Gupta
2010-07-16 12:37 ` Nitin Gupta
2010-07-16 12:37 ` [PATCH 1/8] Allow sharing xvmalloc for zram and zcache Nitin Gupta
2010-07-16 12:37   ` Nitin Gupta
2010-07-17 18:10   ` Rik van Riel
2010-07-17 18:10     ` Rik van Riel
2010-07-16 12:37 ` [PATCH 2/8] Basic zcache functionality Nitin Gupta
2010-07-16 12:37   ` Nitin Gupta
2010-07-18  8:14   ` Pekka Enberg
2010-07-18  8:14     ` Pekka Enberg
2010-07-18  9:45     ` Nitin Gupta
2010-07-18  9:45       ` Nitin Gupta
2010-07-18  8:27   ` Pekka Enberg
2010-07-18  8:27     ` Pekka Enberg
2010-07-18  8:44   ` Eric Dumazet
2010-07-18  8:44     ` Eric Dumazet
2010-07-18  9:51     ` Nitin Gupta [this message]
2010-07-18  9:51       ` Nitin Gupta
2010-07-16 12:37 ` [PATCH 3/8] Create sysfs nodes and export basic statistics Nitin Gupta
2010-07-16 12:37   ` Nitin Gupta
2010-07-16 12:37 ` [PATCH 4/8] Shrink zcache based on memlimit Nitin Gupta
2010-07-16 12:37   ` Nitin Gupta
2010-07-20 23:03   ` Minchan Kim
2010-07-20 23:03     ` Minchan Kim
2010-07-21  4:52     ` Nitin Gupta
2010-07-21  4:52       ` Nitin Gupta
2010-07-21 11:32       ` Ed Tomlinson
2010-07-21 11:32         ` Ed Tomlinson
2010-07-23 19:23         ` Nitin Gupta
2010-07-23 19:23           ` Nitin Gupta
2010-07-16 12:37 ` [PATCH 5/8] Eliminate zero-filled pages Nitin Gupta
2010-07-16 12:37   ` Nitin Gupta
2010-07-16 12:37 ` [PATCH 6/8] Compress pages using LZO Nitin Gupta
2010-07-16 12:37   ` Nitin Gupta
2010-07-16 12:37 ` [PATCH 7/8] Use xvmalloc to store compressed chunks Nitin Gupta
2010-07-16 12:37   ` Nitin Gupta
2010-07-18  7:53   ` Pekka Enberg
2010-07-18  7:53     ` Pekka Enberg
2010-07-18  8:21     ` Nitin Gupta
2010-07-18  8:21       ` Nitin Gupta
2010-07-19  4:36       ` Minchan Kim
2010-07-19  4:36         ` Minchan Kim
2010-07-19  6:48         ` Nitin Gupta
2010-07-19  6:48           ` Nitin Gupta
2010-07-16 12:37 ` [PATCH 8/8] Document sysfs entries Nitin Gupta
2010-07-16 12:37   ` Nitin Gupta
2010-07-17 21:13 ` [PATCH 0/8] zcache: page cache compression support Ed Tomlinson
2010-07-17 21:13   ` Ed Tomlinson
2010-07-18  2:23   ` Nitin Gupta
2010-07-18  2:23     ` Nitin Gupta
2010-07-18  7:50 ` Pekka Enberg
2010-07-18  7:50   ` Pekka Enberg
2010-07-18  8:12   ` Nitin Gupta
2010-07-18  8:12     ` Nitin Gupta
2010-07-19 19:57 ` Dan Magenheimer
2010-07-19 19:57   ` Dan Magenheimer
2010-07-20 13:50   ` Nitin Gupta
2010-07-20 13:50     ` Nitin Gupta
2010-07-20 14:28     ` Dan Magenheimer
2010-07-20 14:28       ` Dan Magenheimer
2010-07-21  4:27       ` Nitin Gupta
2010-07-21  4:27         ` Nitin Gupta
2010-07-21 17:37         ` Dan Magenheimer
2010-07-21 17:37           ` Dan Magenheimer
2010-07-22 19:14 ` Greg KH
2010-07-22 19:14   ` Greg KH
2010-07-22 19:54   ` Dan Magenheimer
2010-07-22 19:54     ` Dan Magenheimer
2010-07-22 21:00     ` Greg KH
2010-07-22 21:00       ` Greg KH
2011-01-10 13:16 ` Kirill A. Shutemov
2011-01-10 13:16   ` Kirill A. Shutemov
2011-01-18 17:53   ` Dan Magenheimer
2011-01-18 17:53     ` Dan Magenheimer
2011-01-20 12:33     ` Nitin Gupta
2011-01-20 12:33       ` Nitin Gupta
2011-01-20 12:47       ` Christoph Hellwig
2011-01-20 12:47         ` Christoph Hellwig
2011-01-20 13:16         ` Pekka Enberg
2011-01-20 13:16           ` Pekka Enberg
2011-01-20 13:58           ` Nitin Gupta
2011-01-20 13:58             ` Nitin Gupta

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=4C42CE9D.1090303@vflare.org \
    --to=ngupta@vflare.org \
    --cc=akpm@linux-foundation.org \
    --cc=avi@redhat.com \
    --cc=dan.magenheimer@oracle.com \
    --cc=eric.dumazet@gmail.com \
    --cc=greg@kroah.com \
    --cc=hch@infradead.org \
    --cc=hugh.dickins@tiscali.co.uk \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=minchan.kim@gmail.com \
    --cc=penberg@cs.helsinki.fi \
    --cc=riel@redhat.com \
    /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.