From: Dongli Zhang <dongli.zhang@oracle.com>
To: "Roger Pau Monné" <roger.pau@citrix.com>
Cc: linux-block@vger.kernel.org, xen-devel@lists.xenproject.org,
axboe@kernel.dk, linux-kernel@vger.kernel.org,
konrad.wilk@oracle.com
Subject: Re: [Xen-devel] [PATCH 1/1] xen-blkback: do not wake up shutdown_wq after xen_blkif_schedule() is stopped
Date: Thu, 17 Jan 2019 10:10:00 +0800 [thread overview]
Message-ID: <30770f68-34e0-d707-b087-c43f0b51cd81@oracle.com> (raw)
In-Reply-To: <20190116145215.igakzdkklc6f7h6k@mac>
Hi Roger,
On 2019/1/16 下午10:52, Roger Pau Monné wrote:
> On Wed, Jan 16, 2019 at 09:47:41PM +0800, Dongli Zhang wrote:
>> There is no need to wake up xen_blkif_schedule() as kthread_stop() is able
>> to already wake up the kernel thread.
>>
>> Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com>
>> ---
>> drivers/block/xen-blkback/xenbus.c | 4 +---
>> 1 file changed, 1 insertion(+), 3 deletions(-)
>>
>> diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c
>> index a4bc74e..37ac59e 100644
>> --- a/drivers/block/xen-blkback/xenbus.c
>> +++ b/drivers/block/xen-blkback/xenbus.c
>> @@ -254,10 +254,8 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
>> if (!ring->active)
>> continue;
>>
>> - if (ring->xenblkd) {
>> + if (ring->xenblkd)
>> kthread_stop(ring->xenblkd);
>> - wake_up(&ring->shutdown_wq);
>
> I've now realized that shutdown_wq is basically useless, and should be
> removed, could you please do it in this patch?
I do not think shutdown_wq is useless.
It is used to halt the xen_blkif_schedule() kthread when
RING_REQUEST_PROD_OVERFLOW() returns true in __do_block_io_op():
1121 static int
1122 __do_block_io_op(struct xen_blkif_ring *ring)
... ...
1134 if (RING_REQUEST_PROD_OVERFLOW(&blk_rings->common, rp)) {
1135 rc = blk_rings->common.rsp_prod_pvt;
1136 pr_warn("Frontend provided bogus ring requests (%d - %d =
%d). Halting ring processing on dev=%04x\n",
1137 rp, rc, rp - rc, ring->blkif->vbd.pdevice);
1138 return -EACCES;
1139 }
If there is bogus/invalid ring requests, __do_block_io_op() would return -EACCES
without modifying prod/cons index.
Without shutdown_wq (just simply assuming we remove the below code without
handling -EACCES in xen_blkif_schedule()), the kernel thread would continue the
while loop.
648 if (ret == -EACCES)
649 wait_event_interruptible(ring->shutdown_wq,
650 kthread_should_stop());
If xen_blkif_be_int() is triggered again (let's assume there is no optimization
on guest part and guest would send event for every request it puts on ring
buffer), we may come to do_block_io_op() again.
As the prod/cons index are not modified last time the code runs into
do_block_io_op() to process bogus request, we would hit the bogus request issue
again.
With shutdown_wq, the kernel kthread is blocked forever until such queue/ring is
destroyed. If we remove shutdown_wq, we are changing the policy to handle bogus
requests on ring buffer?
Please correct me if my understanding is wrong.
Thank you very much!
Dongli Zhang
next prev parent reply other threads:[~2019-01-17 2:07 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-16 13:47 Dongli Zhang
2019-01-16 14:29 ` Roger Pau Monné
2019-01-16 14:52 ` Roger Pau Monné
2019-01-17 2:10 ` Dongli Zhang [this message]
2019-01-17 8:20 ` [Xen-devel] " Roger Pau Monné
2019-01-17 10:23 ` Dongli Zhang
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=30770f68-34e0-d707-b087-c43f0b51cd81@oracle.com \
--to=dongli.zhang@oracle.com \
--cc=axboe@kernel.dk \
--cc=konrad.wilk@oracle.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=roger.pau@citrix.com \
--cc=xen-devel@lists.xenproject.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
all inboxes | Powered by JetHome®