From: Gao Xiang <gaoxiang25@huawei.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
<devel@driverdev.osuosl.org>
Cc: Chao Yu <yuchao0@huawei.com>, LKML <linux-kernel@vger.kernel.org>,
<linux-erofs@lists.ozlabs.org>, Chao Yu <chao@kernel.org>,
Miao Xie <miaoxie@huawei.com>, <weidu.du@huawei.com>,
Fang Wei <fangwei1@huawei.com>,
Dan Carpenter <dan.carpenter@oracle.com>,
Gao Xiang <gaoxiang25@huawei.com>
Subject: [PATCH v2 3/5] staging: erofs: move shrink accounting inside the function
Date: Wed, 16 Jan 2019 21:10:10 +0800 [thread overview]
Message-ID: <20190116131010.44542-1-gaoxiang25@huawei.com> (raw)
In-Reply-To: <75258956-db6f-501e-f022-536134c53911@huawei.com>
This patch moves the &erofs_global_shrink_cnt accounting
from the caller to erofs_workgroup_get(). It's cleaner and
it matches erofs_workgroup_put() better. No behavior change.
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
---
change log v2:
- fix commit message as Dan Carpenter pointed out to make more clear.
Thanks,
Gao Xiang
drivers/staging/erofs/utils.c | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/drivers/staging/erofs/utils.c b/drivers/staging/erofs/utils.c
index d24945aab133..5695efaeb43a 100644
--- a/drivers/staging/erofs/utils.c
+++ b/drivers/staging/erofs/utils.c
@@ -34,29 +34,29 @@ static atomic_long_t erofs_global_shrink_cnt;
#define __erofs_workgroup_get(grp) atomic_inc(&(grp)->refcount)
#define __erofs_workgroup_put(grp) atomic_dec(&(grp)->refcount)
-static int erofs_workgroup_get(struct erofs_workgroup *grp, int *ocnt)
+static int erofs_workgroup_get(struct erofs_workgroup *grp)
{
int o;
repeat:
o = erofs_wait_on_workgroup_freezed(grp);
-
if (unlikely(o <= 0))
return -1;
if (unlikely(atomic_cmpxchg(&grp->refcount, o, o + 1) != o))
goto repeat;
- *ocnt = o;
+ /* decrease refcount paired by erofs_workgroup_put */
+ if (unlikely(o == 1))
+ atomic_long_dec(&erofs_global_shrink_cnt);
return 0;
}
-struct erofs_workgroup *erofs_find_workgroup(
- struct super_block *sb, pgoff_t index, bool *tag)
+struct erofs_workgroup *erofs_find_workgroup(struct super_block *sb,
+ pgoff_t index, bool *tag)
{
struct erofs_sb_info *sbi = EROFS_SB(sb);
struct erofs_workgroup *grp;
- int oldcount;
repeat:
rcu_read_lock();
@@ -65,15 +65,12 @@ struct erofs_workgroup *erofs_find_workgroup(
*tag = xa_pointer_tag(grp);
grp = xa_untag_pointer(grp);
- if (erofs_workgroup_get(grp, &oldcount)) {
+ if (erofs_workgroup_get(grp)) {
/* prefer to relax rcu read side */
rcu_read_unlock();
goto repeat;
}
- /* decrease refcount added by erofs_workgroup_put */
- if (unlikely(oldcount == 1))
- atomic_long_dec(&erofs_global_shrink_cnt);
DBG_BUGON(index != grp->index);
}
rcu_read_unlock();
--
2.14.4
next prev parent reply other threads:[~2019-01-16 13:11 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-16 8:59 [PATCH 1/5] staging: erofs: sunset erofs_workstation_cleanup_all Gao Xiang
2019-01-16 8:59 ` [PATCH 2/5] staging: erofs: localize erofs_workgroup_get Gao Xiang
2019-01-16 9:20 ` Chao Yu
2019-01-16 8:59 ` [PATCH 3/5] staging: erofs: decrease the shrink count in erofs_workgroup_get Gao Xiang
2019-01-16 9:27 ` Chao Yu
2019-01-16 10:45 ` Dan Carpenter
2019-01-16 13:01 ` Gao Xiang
2019-01-16 13:10 ` Gao Xiang [this message]
2019-01-16 8:59 ` [PATCH 4/5] staging: erofs: staticize erofs_shrink_count, erofs_shrink_scan Gao Xiang
2019-01-16 9:28 ` Chao Yu
2019-01-16 8:59 ` [PATCH 5/5] staging: erofs: drop the extern prefix for function definitions Gao Xiang
2019-01-16 9:29 ` Chao Yu
2019-01-16 9:19 ` [PATCH 1/5] staging: erofs: sunset erofs_workstation_cleanup_all Chao Yu
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=20190116131010.44542-1-gaoxiang25@huawei.com \
--to=gaoxiang25@huawei.com \
--cc=chao@kernel.org \
--cc=dan.carpenter@oracle.com \
--cc=devel@driverdev.osuosl.org \
--cc=fangwei1@huawei.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-erofs@lists.ozlabs.org \
--cc=linux-kernel@vger.kernel.org \
--cc=miaoxie@huawei.com \
--cc=weidu.du@huawei.com \
--cc=yuchao0@huawei.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).