From: Vivek Goyal <vgoyal@redhat.com>
To: Tejun Heo <tj@kernel.org>
Cc: axboe@kernel.dk, linux-kernel@vger.kernel.org, ctalbott@google.com
Subject: Re: [PATCH 10/10] block: fix request_queue lifetime handling by making blk_queue_cleanup() proper shutdown
Date: Wed, 19 Oct 2011 12:18:40 -0400 [thread overview]
Message-ID: <20111019161840.GG1140@redhat.com> (raw)
In-Reply-To: <1318998384-22525-11-git-send-email-tj@kernel.org>
On Tue, Oct 18, 2011 at 09:26:24PM -0700, Tejun Heo wrote:
[..]
> void blk_cleanup_queue(struct request_queue *q)
> {
> - /*
> - * We know we have process context here, so we can be a little
> - * cautious and ensure that pending block actions on this device
> - * are done before moving on. Going into this function, we should
> - * not have processes doing IO to this device.
> - */
> - blk_sync_queue(q);
> -
> - del_timer_sync(&q->backing_dev_info.laptop_mode_wb_timer);
> + /* mark @q DEAD, no new request or merges will be allowed afterwards */
> mutex_lock(&q->sysfs_lock);
> - queue_flag_set_unlocked(QUEUE_FLAG_DEAD, q);
> + spin_lock_irq(q->queue_lock);
> + queue_flag_set(QUEUE_FLAG_NOMERGES, q);
> + queue_flag_set(QUEUE_FLAG_NOXMERGES, q);
> + queue_flag_set(QUEUE_FLAG_DEAD, q);
> + spin_unlock_irq(q->queue_lock);
> mutex_unlock(&q->sysfs_lock);
>
> + /* drain all requests queued before DEAD marking */
> + blk_drain_queue(q, true);
> +
> + /* @q won't process any more request, flush async actions */
> + del_timer_sync(&q->backing_dev_info.laptop_mode_wb_timer);
> + blk_sync_queue(q);
> +
> + /* @q is and will stay empty, shutdown and put */
> if (q->elevator)
> elevator_exit(q->elevator);
> -
> blk_throtl_exit(q);
This is based on for-next tree? I am cloning it now. In Linus tree,
I see that blk_throtl_exit() has been moved to blk_release_queue() again.
So now we probably need to bring it back in blk_cleanup_queue(). That
[..]
> diff --git a/block/blk-throttle.c b/block/blk-throttle.c
> index 900a0c9..8edb949 100644
> --- a/block/blk-throttle.c
> +++ b/block/blk-throttle.c
> @@ -309,6 +309,10 @@ static struct throtl_grp * throtl_get_tg(struct throtl_data *td)
> struct blkio_cgroup *blkcg;
> struct request_queue *q = td->queue;
>
> + /* no throttling for dead queue */
> + if (unlikely(test_bit(QUEUE_FLAG_DEAD, &q->queue_flags)))
> + return NULL;
> +
May be blk_throtl_bio() is probably a better place to do this check, just
before callig throtl_get_tg().
Thanks
Vivek
next prev parent reply other threads:[~2011-10-19 16:18 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-19 4:26 [PATCHSET block/for-next] fix request_queue life-cycle management Tejun Heo
2011-10-19 4:26 ` [PATCH 01/10] block: make gendisk hold a reference to its queue Tejun Heo
2011-10-19 4:26 ` [PATCH 02/10] block: fix genhd refcounting in blkio_policy_parse_and_set() Tejun Heo
2011-10-19 13:26 ` Vivek Goyal
2011-10-19 16:29 ` Tejun Heo
2011-10-19 16:59 ` Vivek Goyal
2011-10-19 22:05 ` Tejun Heo
2011-10-19 22:07 ` Tejun Heo
2011-10-19 23:51 ` Tejun Heo
2011-10-20 13:41 ` Vivek Goyal
2011-10-20 16:11 ` Tejun Heo
2011-10-20 16:16 ` Kay Sievers
2011-10-20 17:50 ` Vivek Goyal
2011-10-20 17:47 ` Vivek Goyal
2011-10-19 4:26 ` [PATCH 03/10] block: move blk_throtl prototypes to block/blk.h Tejun Heo
2011-10-19 13:33 ` Vivek Goyal
2011-10-19 4:26 ` [PATCH 04/10] block: pass around REQ_* flags instead of broken down booleans during request alloc/free Tejun Heo
2011-10-19 13:44 ` Vivek Goyal
2011-10-19 16:31 ` Tejun Heo
2011-10-19 4:26 ` [PATCH 05/10] block: drop unnecessary blk_get/put_queue() in scsi_cmd_ioctl() and blk_get_tg() Tejun Heo
2011-10-19 13:52 ` Vivek Goyal
2011-10-19 16:35 ` Tejun Heo
2011-10-19 4:26 ` [PATCH 06/10] block: reorganize queue draining Tejun Heo
2011-10-19 4:26 ` [PATCH 07/10] block: reorganize throtl_get_tg() and blk_throtl_bio() Tejun Heo
2011-10-19 14:56 ` Vivek Goyal
2011-10-19 17:06 ` Tejun Heo
2011-10-19 17:19 ` Vivek Goyal
2011-10-19 17:30 ` Tejun Heo
2011-10-19 17:45 ` Vivek Goyal
2011-10-19 17:49 ` Tejun Heo
2011-10-19 4:26 ` [PATCH 08/10] block: make get_request[_wait]() fail if queue is dead Tejun Heo
2011-10-19 15:22 ` Vivek Goyal
2011-10-19 4:26 ` [PATCH 09/10] block: drop @tsk from attempt_plug_merge() and explain sync rules Tejun Heo
2011-10-19 4:26 ` [PATCH 10/10] block: fix request_queue lifetime handling by making blk_queue_cleanup() proper shutdown Tejun Heo
2011-10-19 12:43 ` Jens Axboe
2011-10-19 17:13 ` Tejun Heo
2011-10-19 18:04 ` Jens Axboe
2011-10-19 16:18 ` Vivek Goyal [this message]
2011-10-19 17:12 ` Tejun Heo
2011-10-19 17:29 ` Vivek Goyal
2011-10-19 17:33 ` Tejun Heo
2011-10-19 4:29 ` [PATCHSET block/for-next] fix request_queue life-cycle management Tejun Heo
2011-10-19 12:44 ` Jens Axboe
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=20111019161840.GG1140@redhat.com \
--to=vgoyal@redhat.com \
--cc=axboe@kernel.dk \
--cc=ctalbott@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=tj@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 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).