From: Andrea Righi <righi.andrea@gmail.com>
To: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Paul Menage <menage@google.com>,
Balbir Singh <balbir@linux.vnet.ibm.com>,
Gui Jianfeng <guijianfeng@cn.fujitsu.com>,
agk@sourceware.org, akpm@linux-foundation.org, axboe@kernel.dk,
baramsori72@gmail.com, Carl Henrik Lunde <chlunde@ping.uio.no>,
dave@linux.vnet.ibm.com, Divyesh Shah <dpshah@google.com>,
eric.rannaud@gmail.com, fernando@oss.ntt.co.jp,
Hirokazu Takahashi <taka@valinux.co.jp>,
Li Zefan <lizf@cn.fujitsu.com>,
matt@bluehost.com, dradford@bluehost.com, ngupta@google.com,
randy.dunlap@oracle.com, roberto@unbit.it,
Ryo Tsuruta <ryov@valinux.co.jp>,
Satoshi UCHIDA <s-uchida@ap.jp.nec.com>,
subrata@linux.vnet.ibm.com, yoshikawa.takuya@oss.ntt.co.jp,
containers@lists.linux-foundation.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 3/9] bio-cgroup controller
Date: Wed, 15 Apr 2009 15:07:33 +0200 [thread overview]
Message-ID: <20090415130729.GA16735@linux> (raw)
In-Reply-To: <20090415111528.b796519a.kamezawa.hiroyu@jp.fujitsu.com>
On Wed, Apr 15, 2009 at 11:15:28AM +0900, KAMEZAWA Hiroyuki wrote:
> > +/*
> > + * This function is used to make a given page have the bio-cgroup id of
> > + * the owner of this page.
> > + */
> > +void bio_cgroup_set_owner(struct page *page, struct mm_struct *mm)
> > +{
> > + struct bio_cgroup *biog;
> > + struct page_cgroup *pc;
> > +
> > + if (bio_cgroup_disabled())
> > + return;
> > + pc = lookup_page_cgroup(page);
> > + if (unlikely(!pc))
> > + return;
> > +
> > + pc->bio_cgroup_id = 0; /* 0: default bio_cgroup id */
> > + if (!mm)
> > + return;
> > + /*
> > + * Locking "pc" isn't necessary here since the current process is
> > + * the only one that can access the members related to bio_cgroup.
> > + */
> > + rcu_read_lock();
> > + biog = bio_cgroup_from_task(rcu_dereference(mm->owner));
> > + if (unlikely(!biog))
> > + goto out;
> > + /*
> > + * css_get(&bio->css) isn't called to increment the reference
> > + * count of this bio_cgroup "biog" so pc->bio_cgroup_id might turn
> > + * invalid even if this page is still active.
> > + * This approach is chosen to minimize the overhead.
> > + */
> > + pc->bio_cgroup_id = biog->id;
> > +out:
> > + rcu_read_unlock();
> > +}
> > +
> > +/*
> > + * Change the owner of a given page if necessary.
> > + */
> > +void bio_cgroup_reset_owner(struct page *page, struct mm_struct *mm)
> > +{
> > + /*
> > + * A little trick:
> > + * Just call bio_cgroup_set_owner() for pages which are already
> > + * active since the bio_cgroup_id member of page_cgroup can be
> > + * updated without any locks. This is because an integer type of
> > + * variable can be set a new value at once on modern cpus.
> > + */
> > + bio_cgroup_set_owner(page, mm);
> > +}
> Hmm ? I think all operations are under lock_page() and there are no races.
> Isn't it ?
ehm.. no. Adding this in bio_cgroup_set_owner():
WARN_ON_ONCE(!test_bit(PG_locked, &page->flags));
produces the following:
[ 1.641186] WARNING: at mm/biotrack.c:77 bio_cgroup_set_owner+0xe2/0x100()
[ 1.644534] Hardware name:
[ 1.646955] Modules linked in:
[ 1.650526] Pid: 1, comm: swapper Not tainted 2.6.30-rc2 #77
[ 1.653499] Call Trace:
[ 1.656004] [<ffffffff80269370>] warn_slowpath+0xd0/0x120
[ 1.659062] [<ffffffff8023d69a>] ? save_stack_trace+0x2a/0x50
[ 1.662357] [<ffffffff80291f7f>] ? save_trace+0x3f/0xb0
[ 1.670214] [<ffffffff802e3abd>] ? handle_mm_fault+0x40d/0x8b0
[ 1.673321] [<ffffffff8029586b>] ? __lock_acquire+0x63b/0x1de0
[ 1.676446] [<ffffffff802921ba>] ? get_lock_stats+0x2a/0x60
[ 1.679657] [<ffffffff802921fe>] ? put_lock_stats+0xe/0x30
[ 1.682673] [<ffffffff802e3abd>] ? handle_mm_fault+0x40d/0x8b0
[ 1.685706] [<ffffffff80300e72>] bio_cgroup_set_owner+0xe2/0x100
[ 1.688852] [<ffffffff802e3abd>] ? handle_mm_fault+0x40d/0x8b0
[ 1.692280] [<ffffffff802e3ae2>] handle_mm_fault+0x432/0x8b0
[ 1.695261] [<ffffffff802e408f>] __get_user_pages+0x12f/0x430
[ 1.703507] [<ffffffff802e43c2>] get_user_pages+0x32/0x40
[ 1.706947] [<ffffffff80308bab>] get_arg_page+0x4b/0xb0
[ 1.710287] [<ffffffff80308e3d>] copy_strings+0xfd/0x200
[ 1.714028] [<ffffffff80308f69>] copy_strings_kernel+0x29/0x40
[ 1.717058] [<ffffffff8030a651>] do_execve+0x2c1/0x400
[ 1.720291] [<ffffffff8022d739>] sys_execve+0x49/0x80
[ 1.723209] [<ffffffff802300b8>] kernel_execve+0x68/0xd0
[ 1.726309] [<ffffffff8020930b>] ? init_post+0x18b/0x1b0
[ 1.729585] [<ffffffff80af069b>] kernel_init+0x198/0x1b0
[ 1.735754] [<ffffffff8023003a>] child_rip+0xa/0x20
[ 1.738690] [<ffffffff8022fa00>] ? restore_args+0x0/0x30
[ 1.741663] [<ffffffff80af0503>] ? kernel_init+0x0/0x1b0
[ 1.744683] [<ffffffff80230030>] ? child_rip+0x0/0x20
[ 1.747820] ---[ end trace b9f530261e455c85 ]---
In do_anonymous_page(), bio_cgroup_set_owner() seems to be called
without lock_page() held.
-Andrea
next prev parent reply other threads:[~2009-04-15 13:07 UTC|newest]
Thread overview: 104+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-14 20:21 [PATCH 0/9] cgroup: io-throttle controller (v13) Andrea Righi
2009-04-14 20:21 ` [PATCH 1/9] io-throttle documentation Andrea Righi
2009-04-17 1:24 ` KAMEZAWA Hiroyuki
2009-04-17 1:56 ` Li Zefan
2009-04-17 10:25 ` Andrea Righi
2009-04-17 10:41 ` Andrea Righi
2009-04-17 11:35 ` Fernando Luis Vázquez Cao
2009-04-20 9:38 ` Ryo Tsuruta
2009-04-20 15:00 ` Andrea Righi
2009-04-27 10:45 ` Ryo Tsuruta
2009-04-27 12:15 ` Ryo Tsuruta
2009-04-27 21:56 ` Andrea Righi
2009-04-17 7:34 ` Gui Jianfeng
2009-04-17 7:43 ` KAMEZAWA Hiroyuki
2009-04-17 9:29 ` Gui Jianfeng
2009-04-17 9:55 ` Andrea Righi
2009-04-17 17:39 ` Vivek Goyal
2009-04-17 23:12 ` Andrea Righi
2009-04-19 13:42 ` Vivek Goyal
2009-04-19 15:47 ` Andrea Righi
2009-04-20 21:28 ` Vivek Goyal
2009-04-20 22:05 ` Andrea Righi
2009-04-21 1:08 ` Vivek Goyal
2009-04-21 8:37 ` Andrea Righi
2009-04-21 14:23 ` Vivek Goyal
2009-04-21 18:29 ` Vivek Goyal
2009-04-21 21:36 ` Andrea Righi
2009-04-21 21:28 ` Andrea Righi
2009-04-19 13:54 ` Vivek Goyal
2009-04-14 20:21 ` [PATCH 2/9] res_counter: introduce ratelimiting attributes Andrea Righi
2009-04-14 20:21 ` [PATCH 3/9] bio-cgroup controller Andrea Righi
2009-04-15 2:15 ` KAMEZAWA Hiroyuki
2009-04-15 9:37 ` Andrea Righi
2009-04-15 12:38 ` Ryo Tsuruta
2009-04-15 13:23 ` Andrea Righi
2009-04-15 23:58 ` KAMEZAWA Hiroyuki
2009-04-16 10:42 ` Andrea Righi
2009-04-16 12:00 ` Ryo Tsuruta
2009-04-17 0:04 ` KAMEZAWA Hiroyuki
2009-04-17 9:44 ` Andrea Righi
2009-04-15 13:07 ` Andrea Righi [this message]
2009-04-16 22:29 ` Andrew Morton
2009-04-17 0:20 ` KAMEZAWA Hiroyuki
2009-04-17 0:44 ` Andrew Morton
2009-04-17 1:44 ` Ryo Tsuruta
2009-04-17 4:15 ` Andrew Morton
2009-04-17 7:48 ` Ryo Tsuruta
2009-04-17 1:50 ` Balbir Singh
2009-04-17 9:40 ` Andrea Righi
2009-04-17 1:49 ` Takuya Yoshikawa
2009-04-17 2:24 ` KAMEZAWA Hiroyuki
2009-04-17 7:22 ` Ryo Tsuruta
2009-04-17 8:00 ` KAMEZAWA Hiroyuki
2009-04-17 8:48 ` KAMEZAWA Hiroyuki
2009-04-17 8:51 ` KAMEZAWA Hiroyuki
2009-04-17 11:27 ` Block I/O tracking (was Re: [PATCH 3/9] bio-cgroup controller) Fernando Luis Vázquez Cao
2009-04-17 22:09 ` Andrea Righi
2009-04-17 7:32 ` [PATCH 3/9] bio-cgroup controller Ryo Tsuruta
2009-04-17 10:22 ` Balbir Singh
2009-04-20 11:35 ` Ryo Tsuruta
2009-04-20 14:56 ` Andrea Righi
2009-04-21 11:39 ` Ryo Tsuruta
2009-04-21 15:31 ` Balbir Singh
2009-04-14 20:21 ` [PATCH 4/9] support checking of cgroup subsystem dependencies Andrea Righi
2009-04-14 20:21 ` [PATCH 5/9] io-throttle controller infrastructure Andrea Righi
2009-04-14 20:21 ` [PATCH 6/9] kiothrottled: throttle buffered (writeback) IO Andrea Righi
2009-04-14 20:21 ` [PATCH 7/9] io-throttle instrumentation Andrea Righi
2009-04-14 20:21 ` [PATCH 8/9] export per-task io-throttle statistics to userspace Andrea Righi
2009-04-14 20:21 ` [PATCH 9/9] ext3: do not throttle metadata and journal IO Andrea Righi
2009-04-17 12:38 ` Theodore Tso
2009-04-17 12:50 ` Jens Axboe
2009-04-17 14:39 ` Andrea Righi
2009-04-21 0:18 ` Theodore Tso
2009-04-21 8:30 ` Andrea Righi
2009-04-21 14:06 ` Theodore Tso
2009-04-21 14:31 ` Andrea Righi
2009-04-21 16:35 ` Theodore Tso
2009-04-21 17:23 ` Balbir Singh
2009-04-21 17:46 ` Theodore Tso
2009-04-21 18:14 ` Balbir Singh
2009-04-21 19:14 ` Theodore Tso
2009-04-21 20:49 ` Andrea Righi
2009-04-22 0:33 ` KAMEZAWA Hiroyuki
2009-04-22 1:21 ` KAMEZAWA Hiroyuki
2009-04-22 10:22 ` Andrea Righi
2009-04-23 0:05 ` KAMEZAWA Hiroyuki
2009-04-23 1:22 ` Theodore Tso
2009-04-23 2:54 ` KAMEZAWA Hiroyuki
2009-04-23 4:35 ` Theodore Tso
2009-04-23 4:58 ` Andrew Morton
2009-04-23 5:37 ` KAMEZAWA Hiroyuki
2009-04-23 9:44 ` Andrea Righi
2009-04-23 12:17 ` Theodore Tso
2009-04-23 12:27 ` Theodore Tso
2009-04-23 21:13 ` Andrea Righi
2009-04-24 0:26 ` KAMEZAWA Hiroyuki
2009-04-24 5:14 ` Balbir Singh
2009-04-23 10:03 ` Andrea Righi
2009-04-22 3:30 ` Balbir Singh
2009-04-24 15:10 ` Balbir Singh
2009-04-16 22:24 ` [PATCH 0/9] cgroup: io-throttle controller (v13) Andrew Morton
2009-04-17 9:37 ` Andrea Righi
2009-04-30 13:20 ` Alan D. Brunelle
2009-05-01 11:11 ` Andrea Righi
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=20090415130729.GA16735@linux \
--to=righi.andrea@gmail.com \
--cc=agk@sourceware.org \
--cc=akpm@linux-foundation.org \
--cc=axboe@kernel.dk \
--cc=balbir@linux.vnet.ibm.com \
--cc=baramsori72@gmail.com \
--cc=chlunde@ping.uio.no \
--cc=containers@lists.linux-foundation.org \
--cc=dave@linux.vnet.ibm.com \
--cc=dpshah@google.com \
--cc=dradford@bluehost.com \
--cc=eric.rannaud@gmail.com \
--cc=fernando@oss.ntt.co.jp \
--cc=guijianfeng@cn.fujitsu.com \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lizf@cn.fujitsu.com \
--cc=matt@bluehost.com \
--cc=menage@google.com \
--cc=ngupta@google.com \
--cc=randy.dunlap@oracle.com \
--cc=roberto@unbit.it \
--cc=ryov@valinux.co.jp \
--cc=s-uchida@ap.jp.nec.com \
--cc=subrata@linux.vnet.ibm.com \
--cc=taka@valinux.co.jp \
--cc=yoshikawa.takuya@oss.ntt.co.jp \
/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).