public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Tejun Heo <tj@kernel.org>
To: Vivek Goyal <vgoyal@redhat.com>
Cc: axboe@kernel.dk, ctalbott@google.com, rni@google.com,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 08/17] blkcg: shoot down blkio_groups on elevator switch
Date: Mon, 23 Jan 2012 07:49:54 -0800	[thread overview]
Message-ID: <20120123154954.GC12652@google.com> (raw)
In-Reply-To: <20120123153648.GE25986@redhat.com>

Hello,

On Mon, Jan 23, 2012 at 10:36:48AM -0500, Vivek Goyal wrote:
> IIUC, above is racy w.r.t cgroup removal and elevator switch. Assume that
> elevator swtich is taking place and we have queue lock held and we try to
> clear the groups on the queue. Parallely somebody is trying to delete a
> cgroup and has been partially successful in doing so by taking off the
> group from blkcg list (blkiocg_destroy()). 
> 
> Now clear_queue() will complete with one or more groups possibly still
> left on cfqd list because of cgroup deletion race and that can cause
> problmes.

Yeah, the fun of smart-ass locking.  Ultimately, the locking will be
the same locking scheme as ioc's will be used - ie. any modifications
take both locks and there's no limbo state.  Things are so tightly
entangled and I'm finding it very challenging to sequence patches in
the exact order.  I'll see if I can re-sequence locking update before
this but I might just as well declare that there's transitional race
condition in the patch.

There are also a couple other issues that I found yesterday while
updating further patches.

* blkio_list_lock has locking order reversal.  This isn't difficult to
  fix.

* root_group too gets shot down across elv switch.  It needs to be
  reinitialized afterwards.  This one too turns out to be pretty
  tricky to sequence right.

It probably isn't too easy to see the direction at this point, so...

* There will be single blkg per cgroup-request_queue pair regardless
  of the number of policies.  Each blkg carries common part and opaque
  data part for each policy and is managed by blkcg core layer.

* Set of enabled policies will become per-queue property.

Thanks.

-- 
tejun

  reply	other threads:[~2012-01-23 15:50 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-22  3:25 [PATCHSET] blkcg: kill policy node and blkg->dev, take#2 Tejun Heo
2012-01-22  3:25 ` [PATCH 01/17] blkcg: make CONFIG_BLK_CGROUP bool Tejun Heo
2012-01-23 15:00   ` Vivek Goyal
2012-01-23 15:34     ` Tejun Heo
2012-01-22  3:25 ` [PATCH 02/17] cfq: don't register propio policy if !CONFIG_CFQ_GROUP_IOSCHED Tejun Heo
2012-01-22  3:25 ` [PATCH 03/17] elevator: clear auxiliary data earlier during elevator switch Tejun Heo
2012-01-22  3:25 ` [PATCH 04/17] elevator: make elevator_init_fn() return 0/-errno Tejun Heo
2012-01-22  3:25 ` [PATCH 05/17] block: implement blk_queue_bypass_start/end() Tejun Heo
2012-01-22  3:25 ` [PATCH 06/17] block: extend queue bypassing to cover blkcg policies Tejun Heo
2012-01-22  3:25 ` [PATCH 07/17] blkcg: make blkio_list_lock irq-safe Tejun Heo
2012-01-22  3:25 ` [PATCH 08/17] blkcg: shoot down blkio_groups on elevator switch Tejun Heo
2012-01-23 15:20   ` Vivek Goyal
2012-01-23 15:36     ` Vivek Goyal
2012-01-23 15:49       ` Tejun Heo [this message]
2012-01-23 15:39     ` Tejun Heo
2012-01-23 15:52       ` Vivek Goyal
2012-01-23 15:57         ` Tejun Heo
2012-01-23 16:10           ` Vivek Goyal
2012-01-23 16:13             ` Vivek Goyal
2012-01-23 16:20               ` Tejun Heo
2012-01-23 16:28                 ` Vivek Goyal
2012-01-23 16:32                   ` Tejun Heo
2012-01-23 16:16             ` Tejun Heo
2012-01-23 16:25               ` Vivek Goyal
2012-01-23 17:10                 ` Tejun Heo
2012-01-23 18:27                   ` Vivek Goyal
2012-01-23 18:43                     ` Tejun Heo
2012-01-23 19:33                       ` Tejun Heo
2012-01-23 19:57                         ` Vivek Goyal
2012-01-23 20:33                           ` Tejun Heo
2012-01-23 20:43                       ` Lennart Poettering
2012-01-23 20:47                         ` Tejun Heo
2012-01-23 21:03                           ` Vivek Goyal
2012-01-23 20:40                     ` Lennart Poettering
2012-01-23 18:32                   ` Vivek Goyal
2012-01-23 18:51                     ` Tejun Heo
2012-01-22  3:25 ` [PATCH 09/17] blkcg: move rcu_read_lock() outside of blkio_group get functions Tejun Heo
2012-01-22  3:25 ` [PATCH 10/17] blkcg: update blkg get functions take blkio_cgroup as parameter Tejun Heo
2012-01-22  3:25 ` [PATCH 11/17] blkcg: use q and plid instead of opaque void * for blkio_group association Tejun Heo
2012-01-22  3:25 ` [PATCH 12/17] blkcg: add blkio_policy[] array and allow one policy per policy ID Tejun Heo
2012-01-22  3:25 ` [PATCH 13/17] blkcg: use the usual get blkg path for root blkio_group Tejun Heo
2012-01-22  3:25 ` [PATCH 14/17] blkcg: factor out blkio_group creation Tejun Heo
2012-01-22  3:25 ` [PATCH 15/17] blkcg: don't allow or retain configuration of missing devices Tejun Heo
2012-01-22  3:25 ` [PATCH 16/17] blkcg: kill blkio_policy_node Tejun Heo
2012-01-22  3:25 ` [PATCH 17/17] blkcg: kill the mind-bending blkg->dev Tejun Heo

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=20120123154954.GC12652@google.com \
    --to=tj@kernel.org \
    --cc=axboe@kernel.dk \
    --cc=ctalbott@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rni@google.com \
    --cc=vgoyal@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox