aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWengang Wang <wen.gang.wang@oracle.com>2017-07-18 03:40:35 -0400
committerJuergen Gross <jgross@suse.com>2017-07-23 02:09:43 -0400
commit29d11cfd8698038b87458ba4d1329b9da81150a5 (patch)
tree916c500fd8617537daafa63975da37b9d5f713b9
parent0e4d394fe50308f69eb061eb89de78279df1e9dc (diff)
xen/grant-table: log the lack of grants
log a message when we enter this situation: 1) we already allocated the max number of available grants from hypervisor and 2) we still need more (but the request fails because of 1)). Sometimes the lack of grants causes IO hangs in xen_blkfront devices. Adding this log would help debuging. Signed-off-by: Wengang Wang <wen.gang.wang@oracle.com> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Reviewed-by: Junxiao Bi <junxiao.bi@oracle.com> Reviewed-by: Juergen Gross <jgross@suse.com> Signed-off-by: Juergen Gross <jgross@suse.com>
-rw-r--r--drivers/xen/grant-table.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c
index d6786b87e13b..2c6a9114d332 100644
--- a/drivers/xen/grant-table.c
+++ b/drivers/xen/grant-table.c
@@ -42,6 +42,7 @@
42#include <linux/delay.h> 42#include <linux/delay.h>
43#include <linux/hardirq.h> 43#include <linux/hardirq.h>
44#include <linux/workqueue.h> 44#include <linux/workqueue.h>
45#include <linux/ratelimit.h>
45 46
46#include <xen/xen.h> 47#include <xen/xen.h>
47#include <xen/interface/xen.h> 48#include <xen/interface/xen.h>
@@ -1072,8 +1073,14 @@ static int gnttab_expand(unsigned int req_entries)
1072 cur = nr_grant_frames; 1073 cur = nr_grant_frames;
1073 extra = ((req_entries + (grefs_per_grant_frame-1)) / 1074 extra = ((req_entries + (grefs_per_grant_frame-1)) /
1074 grefs_per_grant_frame); 1075 grefs_per_grant_frame);
1075 if (cur + extra > gnttab_max_grant_frames()) 1076 if (cur + extra > gnttab_max_grant_frames()) {
1077 pr_warn_ratelimited("xen/grant-table: max_grant_frames reached"
1078 " cur=%u extra=%u limit=%u"
1079 " gnttab_free_count=%u req_entries=%u\n",
1080 cur, extra, gnttab_max_grant_frames(),
1081 gnttab_free_count, req_entries);
1076 return -ENOSPC; 1082 return -ENOSPC;
1083 }
1077 1084
1078 rc = gnttab_map(cur, cur + extra - 1); 1085 rc = gnttab_map(cur, cur + extra - 1);
1079 if (rc == 0) 1086 if (rc == 0)