From: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
To: Geliang Tang <geliangtang@gmail.com>
Cc: Minchan Kim <minchan@kernel.org>, Nitin Gupta <ngupta@vflare.org>,
Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] zram: use writer semaphores in device attributes store
Date: Fri, 17 Jun 2016 13:13:01 +0900 [thread overview]
Message-ID: <20160617041301.GA490@swordfish> (raw)
In-Reply-To: <8f203f0623625f4c2065557c7bc8f3b6fd8b6ed2.1466134116.git.geliangtang@gmail.com>
Hello,
On (06/17/16 11:31), Geliang Tang wrote:
[..]
> Since the device attributes store provides write access. This patch uses
> down_write()/up_write() instead of down_read()/up_read() in
> mem_used_max_store() and compact_store().
we use ->init_lock not to make attrs exclusive, but to prevent
concurrent reset/etc.
> Signed-off-by: Geliang Tang <geliangtang@gmail.com>
> ---
> drivers/block/zram/zram_drv.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
> index 7454cf1..cfed743 100644
> --- a/drivers/block/zram/zram_drv.c
> +++ b/drivers/block/zram/zram_drv.c
> @@ -293,13 +293,13 @@ static ssize_t mem_used_max_store(struct device *dev,
> if (err || val != 0)
> return -EINVAL;
>
> - down_read(&zram->init_lock);
> + down_write(&zram->init_lock);
> if (init_done(zram)) {
> struct zram_meta *meta = zram->meta;
> atomic_long_set(&zram->stats.max_used_pages,
> zs_get_total_pages(meta->mem_pool));
> }
> - up_read(&zram->init_lock);
> + up_write(&zram->init_lock);
not critical. can work.
> return len;
> }
> @@ -372,15 +372,15 @@ static ssize_t compact_store(struct device *dev,
> struct zram *zram = dev_to_zram(dev);
> struct zram_meta *meta;
>
> - down_read(&zram->init_lock);
> + down_write(&zram->init_lock);
> if (!init_done(zram)) {
> - up_read(&zram->init_lock);
> + up_write(&zram->init_lock);
> return -EINVAL;
> }
>
> meta = zram->meta;
> zs_compact(meta->mem_pool);
> - up_read(&zram->init_lock);
> + up_write(&zram->init_lock);
pool compaction can take some time. *probably* seconds in the worst
case, when the device is under IO pressure and class' locks are heavily
contended and every class has a considerable number of objects to move.
so I think we don't want to block other attrs while we compact the pool,
compaction takes care of the concurrency internally.
-ss
prev parent reply other threads:[~2016-06-17 4:13 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-17 3:31 [PATCH] zram: use writer semaphores in device attributes store Geliang Tang
2016-06-17 4:13 ` Sergey Senozhatsky [this message]
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=20160617041301.GA490@swordfish \
--to=sergey.senozhatsky.work@gmail.com \
--cc=geliangtang@gmail.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.