diff mbox

[v1] xen/grant-table: log the lack of grants

Message ID 20170707182344.9646-1-wen.gang.wang@oracle.com (mailing list archive)
State New, archived
Headers show

Commit Message

Wengang Wang July 7, 2017, 6:23 p.m. UTC
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>
---
 drivers/xen/grant-table.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Comments

Wengang Wang July 13, 2017, 5:42 p.m. UTC | #1
Hi,

Anyone can you please review this patch?

thanks,

wengang


On 07/07/2017 11:23 AM, Wengang Wang wrote:
> 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>
> ---
>   drivers/xen/grant-table.c | 9 ++++++++-
>   1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c
> index d6786b8..2c6a911 100644
> --- a/drivers/xen/grant-table.c
> +++ b/drivers/xen/grant-table.c
> @@ -42,6 +42,7 @@
>   #include <linux/delay.h>
>   #include <linux/hardirq.h>
>   #include <linux/workqueue.h>
> +#include <linux/ratelimit.h>
>   
>   #include <xen/xen.h>
>   #include <xen/interface/xen.h>
> @@ -1072,8 +1073,14 @@ static int gnttab_expand(unsigned int req_entries)
>   	cur = nr_grant_frames;
>   	extra = ((req_entries + (grefs_per_grant_frame-1)) /
>   		 grefs_per_grant_frame);
> -	if (cur + extra > gnttab_max_grant_frames())
> +	if (cur + extra > gnttab_max_grant_frames()) {
> +		pr_warn_ratelimited("xen/grant-table: max_grant_frames reached"
> +				    " cur=%u extra=%u limit=%u"
> +				    " gnttab_free_count=%u req_entries=%u\n",
> +				    cur, extra, gnttab_max_grant_frames(),
> +				    gnttab_free_count, req_entries);
>   		return -ENOSPC;
> +	}
>   
>   	rc = gnttab_map(cur, cur + extra - 1);
>   	if (rc == 0)
Julien Grall July 14, 2017, 2:18 p.m. UTC | #2
On 07/13/2017 06:42 PM, Wengang wrote:
> Hi,

Hello,


> Anyone can you please review this patch?

Most of the developer community were at Xen Summit this week, so you may 
expect some delay in review.

However, in general it is better to CC relevant maintainers of your code 
to raise attention on your patch. I did it for you this time.

Cheers,

> 
> thanks,
> 
> wengang
> 
> 
> On 07/07/2017 11:23 AM, Wengang Wang wrote:
>> 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>
>> ---
>>   drivers/xen/grant-table.c | 9 ++++++++-
>>   1 file changed, 8 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c
>> index d6786b8..2c6a911 100644
>> --- a/drivers/xen/grant-table.c
>> +++ b/drivers/xen/grant-table.c
>> @@ -42,6 +42,7 @@
>>   #include <linux/delay.h>
>>   #include <linux/hardirq.h>
>>   #include <linux/workqueue.h>
>> +#include <linux/ratelimit.h>
>>   #include <xen/xen.h>
>>   #include <xen/interface/xen.h>
>> @@ -1072,8 +1073,14 @@ static int gnttab_expand(unsigned int req_entries)
>>       cur = nr_grant_frames;
>>       extra = ((req_entries + (grefs_per_grant_frame-1)) /
>>            grefs_per_grant_frame);
>> -    if (cur + extra > gnttab_max_grant_frames())
>> +    if (cur + extra > gnttab_max_grant_frames()) {
>> +        pr_warn_ratelimited("xen/grant-table: max_grant_frames reached"
>> +                    " cur=%u extra=%u limit=%u"
>> +                    " gnttab_free_count=%u req_entries=%u\n",
>> +                    cur, extra, gnttab_max_grant_frames(),
>> +                    gnttab_free_count, req_entries);
>>           return -ENOSPC;
>> +    }
>>       rc = gnttab_map(cur, cur + extra - 1);
>>       if (rc == 0)
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> https://lists.xen.org/xen-devel
Jürgen Groß July 18, 2017, 7:11 a.m. UTC | #3
On 07/07/17 20:23, Wengang Wang wrote:
> 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>


Thanks,

Juergen
Jürgen Groß July 18, 2017, 8 a.m. UTC | #4
On 07/07/17 20:23, Wengang Wang wrote:
> 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>

Committed to xen/tip for-linus-4.13


Thanks,

Juergen
diff mbox

Patch

diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c
index d6786b8..2c6a911 100644
--- a/drivers/xen/grant-table.c
+++ b/drivers/xen/grant-table.c
@@ -42,6 +42,7 @@ 
 #include <linux/delay.h>
 #include <linux/hardirq.h>
 #include <linux/workqueue.h>
+#include <linux/ratelimit.h>
 
 #include <xen/xen.h>
 #include <xen/interface/xen.h>
@@ -1072,8 +1073,14 @@  static int gnttab_expand(unsigned int req_entries)
 	cur = nr_grant_frames;
 	extra = ((req_entries + (grefs_per_grant_frame-1)) /
 		 grefs_per_grant_frame);
-	if (cur + extra > gnttab_max_grant_frames())
+	if (cur + extra > gnttab_max_grant_frames()) {
+		pr_warn_ratelimited("xen/grant-table: max_grant_frames reached"
+				    " cur=%u extra=%u limit=%u"
+				    " gnttab_free_count=%u req_entries=%u\n",
+				    cur, extra, gnttab_max_grant_frames(),
+				    gnttab_free_count, req_entries);
 		return -ENOSPC;
+	}
 
 	rc = gnttab_map(cur, cur + extra - 1);
 	if (rc == 0)