From: Seth Jennings <sjenning@linux.vnet.ibm.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Seth Jennings <sjenning@linux.vnet.ibm.com>,
Dan Magenheimer <dan.magenheimer@oracle.com>,
Brian King <brking@linux.vnet.ibm.com>,
devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] staging: zcache: fix serialization bug in zv stats
Date: Mon, 06 Feb 2012 15:18:52 -0600 [thread overview]
Message-ID: <4F3043BC.6060301@linux.vnet.ibm.com> (raw)
In-Reply-To: <1325263335-16254-1-git-send-email-sjenning@linux.vnet.ibm.com>
Hey Greg,
Just wanted to bump this fix again. It's small and already Acked by
Dan Magenheimer. It can go in an -rc release.
https://lkml.org/lkml/2011/12/30/48
Congrats on becoming a Linux Foundation Fellow!
--
Seth
On 12/30/2011 10:42 AM, Seth Jennings wrote:
> In a multithreaded workload, the zv_curr_dist_counts
> and zv_cumul_dist_counts statistics are being corrupted
> because the increments and decrements in zv_create
> and zv_free are not atomic.
>
> This patch converts these statistics and their corresponding
> increments/decrements/reads to atomic operations.
>
> Based on v3.2-rc7
>
> Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
> ---
> drivers/staging/zcache/zcache-main.c | 14 +++++++-------
> 1 files changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/staging/zcache/zcache-main.c b/drivers/staging/zcache/zcache-main.c
> index 56c1f9c..d39bb51 100644
> --- a/drivers/staging/zcache/zcache-main.c
> +++ b/drivers/staging/zcache/zcache-main.c
> @@ -655,8 +655,8 @@ static unsigned int zv_max_zsize = (PAGE_SIZE / 8) * 7;
> */
> static unsigned int zv_max_mean_zsize = (PAGE_SIZE / 8) * 5;
>
> -static unsigned long zv_curr_dist_counts[NCHUNKS];
> -static unsigned long zv_cumul_dist_counts[NCHUNKS];
> +static atomic_t zv_curr_dist_counts[NCHUNKS];
> +static atomic_t zv_cumul_dist_counts[NCHUNKS];
>
> static struct zv_hdr *zv_create(struct xv_pool *xvpool, uint32_t pool_id,
> struct tmem_oid *oid, uint32_t index,
> @@ -675,8 +675,8 @@ static struct zv_hdr *zv_create(struct xv_pool *xvpool, uint32_t pool_id,
> &page, &offset, ZCACHE_GFP_MASK);
> if (unlikely(ret))
> goto out;
> - zv_curr_dist_counts[chunks]++;
> - zv_cumul_dist_counts[chunks]++;
> + atomic_inc(&zv_curr_dist_counts[chunks]);
> + atomic_inc(&zv_cumul_dist_counts[chunks]);
> zv = kmap_atomic(page, KM_USER0) + offset;
> zv->index = index;
> zv->oid = *oid;
> @@ -698,7 +698,7 @@ static void zv_free(struct xv_pool *xvpool, struct zv_hdr *zv)
>
> ASSERT_SENTINEL(zv, ZVH);
> BUG_ON(chunks >= NCHUNKS);
> - zv_curr_dist_counts[chunks]--;
> + atomic_dec(&zv_curr_dist_counts[chunks]);
> size -= sizeof(*zv);
> BUG_ON(size == 0);
> INVERT_SENTINEL(zv, ZVH);
> @@ -738,7 +738,7 @@ static int zv_curr_dist_counts_show(char *buf)
> char *p = buf;
>
> for (i = 0; i < NCHUNKS; i++) {
> - n = zv_curr_dist_counts[i];
> + n = atomic_read(&zv_curr_dist_counts[i]);
> p += sprintf(p, "%lu ", n);
> chunks += n;
> sum_total_chunks += i * n;
> @@ -754,7 +754,7 @@ static int zv_cumul_dist_counts_show(char *buf)
> char *p = buf;
>
> for (i = 0; i < NCHUNKS; i++) {
> - n = zv_cumul_dist_counts[i];
> + n = atomic_read(&zv_cumul_dist_counts[i]);
> p += sprintf(p, "%lu ", n);
> chunks += n;
> sum_total_chunks += i * n;
next prev parent reply other threads:[~2012-02-06 21:20 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-30 16:42 [PATCH] staging: zcache: fix serialization bug in zv stats Seth Jennings
2012-02-06 21:18 ` Seth Jennings [this message]
[not found] <<1325263335-16254-1-git-send-email-sjenning@linux.vnet.ibm.com>
2011-12-30 17:02 ` Dan Magenheimer
2011-12-30 17:27 ` Seth Jennings
2011-12-30 17:31 ` Dan Magenheimer
2011-12-30 17:35 ` Seth Jennings
2012-01-03 21:38 ` Konrad Rzeszutek Wilk
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=4F3043BC.6060301@linux.vnet.ibm.com \
--to=sjenning@linux.vnet.ibm.com \
--cc=brking@linux.vnet.ibm.com \
--cc=dan.magenheimer@oracle.com \
--cc=devel@driverdev.osuosl.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.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.