All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bob Liu <bob.liu@oracle.com>
To: xen-devel@lists.xen.org
Cc: konrad.wilk@oracle.com, linux-kernel@vger.kernel.org,
	david.vrabel@citrix.com, roger.pau@citrix.com,
	junxiao.bi@oracle.com, Bob Liu <bob.liu@oracle.com>
Subject: [PATCH] xen/blkfront: restart request queue when there is enough persistent_gnts_c
Date: Tue,  6 Jan 2015 21:19:03 +0800	[thread overview]
Message-ID: <1420550343-14013-1-git-send-email-bob.liu@oracle.com> (raw)

When there is no enough free grants, gnttab_alloc_grant_references()
will fail and block request queue will stop.
If the system is always lack of grants, blkif_restart_queue_callback() can't be
scheduled and block request queue can't be restart(block I/O hang).

But when there are former requests complete, some grants may free to
persistent_gnts_c, we can give the request queue another chance to restart and
avoid block hang.

Reported-by: Junxiao Bi <junxiao.bi@oracle.com>
Signed-off-by: Bob Liu <bob.liu@oracle.com>
---
 drivers/block/xen-blkfront.c |   11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 2236c6f..dd30f99 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -1125,6 +1125,17 @@ static void blkif_completion(struct blk_shadow *s, struct blkfront_info *info,
 			}
 		}
 	}
+
+	/*
+	 * Request queue would be stopped if failed to alloc enough grants and
+	 * won't be restarted until gnttab_free_count >= info->callback->count.
+	 *
+	 * But there is another case, once we have enough persistent grants we
+	 * can try to restart the request queue instead of continue to wait for
+	 * 'gnttab_free_count'.
+	 */
+	if (info->persistent_gnts_c >= info->callback.count)
+		schedule_work(&info->work);
 }
 
 static irqreturn_t blkif_interrupt(int irq, void *dev_id)
-- 
1.7.10.4


             reply	other threads:[~2015-01-06 13:19 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-06 13:19 Bob Liu [this message]
2015-01-09 15:51 ` [PATCH] xen/blkfront: restart request queue when there is enough persistent_gnts_c Roger Pau Monné
2015-01-12  7:06   ` Bob Liu
2015-01-12  7:06   ` Bob Liu
2015-01-12  7:09   ` Bob Liu
2015-01-12 11:36     ` Roger Pau Monné
2015-01-12 11:36     ` Roger Pau Monné
2015-01-12 13:04       ` David Vrabel
2015-01-12 13:04       ` David Vrabel
2015-01-12 15:14         ` Roger Pau Monné
2015-01-12 15:14         ` Roger Pau Monné
2015-01-13  9:49       ` Bob Liu
2015-01-13  9:49       ` Bob Liu
2015-01-13  9:50       ` Bob Liu
2015-01-13  9:50       ` Bob Liu
2015-01-12  7:09   ` Bob Liu
2015-01-09 15:51 ` Roger Pau Monné
  -- strict thread matches above, loose matches on Subject: below --
2015-01-06 13:19 Bob Liu

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=1420550343-14013-1-git-send-email-bob.liu@oracle.com \
    --to=bob.liu@oracle.com \
    --cc=david.vrabel@citrix.com \
    --cc=junxiao.bi@oracle.com \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=roger.pau@citrix.com \
    --cc=xen-devel@lists.xen.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.