Re: [Xen-devel] [PATCH v2 4/4] xen-blkif: drop struct blkif_request_segment_aligned

2014-02-12 Thread Egger, Christoph
On 07.02.14 04:38, Matthew Rushton wrote:
>> This was wrongly introduced in commit 402b27f9, the only difference
>> between blkif_request_segment_aligned and blkif_request_segment is
>> that the former has a named padding, while both share the same
>> memory layout.
>>
>> Also correct a few minor glitches in the description, including for it
>> to no longer assume PAGE_SIZE == 4096.
> 
> Tested-by: Matt Rushton 
> 
> *Corrected subject line from last email and resent. I tested the set and
> everything looks solid. I also reviewed patch 2 and 3.
> 

Tested-by: Christoph Egger 
Reviewed-by: Christoph Egger 

Christoph

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [Xen-devel] [PATCH v2 3/4] xen-blkback: fix shutdown race

2014-02-12 Thread Egger, Christoph
On 07.02.14 04:23, Matthew Rushton wrote:
> On 04/02/14 10:26, Roger Pau Monne wrote:
>> Introduce a new variable to keep track of the number of in-flight
>> requests. We need to make sure that when xen_blkif_put is called the
>> request has already been freed and we can safely free xen_blkif, which
>> was not the case before.
> 
> Tested-by: Matt Rushton 
> Reviewed-by: Matt Rushton 

Tested-by: Christoph Egger 
Reviewed-by: Christoph Egger 

Christoph

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [Xen-devel] [PATCH v2 2/4] xen-blkback: fix memory leaks

2014-02-12 Thread Egger, Christoph
On 07.02.14 04:15, Matthew Rushton wrote:
> On 04/02/14 10:26, Roger Pau Monne wrote:
>> I've at least identified two possible memory leaks in blkback, both
>> related to the shutdown path of a VBD:
>> 
>> - blkback doesn't wait for any pending purge work to finish before
>>   cleaning the list of free_pages. The purge work will call
>>   put_free_pages and thus we might end up with pages being added to
>>   the free_pages list after we have emptied it. Fix this by making
>>   sure there's no pending purge work before exiting
>>   xen_blkif_schedule, and moving the free_page cleanup code to
>>   xen_blkif_free.
>> - blkback doesn't wait for pending requests to end before cleaning
>>   persistent grants and the list of free_pages. Again this can add
>>   pages to the free_pages list or persistent grants to the
>>   persistent_gnts red-black tree. Fixed by moving the persistent
>>   grants and free_pages cleanup code to xen_blkif_free.
>> 
>> Also, add some checks in xen_blkif_free to make sure we are cleaning
>> everything.
> 
> Tested-by: Matt Rushton 
> Reviewed-by: Matt Rushton 

Tested-by: Christoph Egger 
Reviewed-by: Christoph Egger 

Christoph

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [Xen-devel] [PATCH v2 2/4] xen-blkback: fix memory leaks

2014-02-12 Thread Egger, Christoph
On 07.02.14 04:15, Matthew Rushton wrote:
 On 04/02/14 10:26, Roger Pau Monne wrote:
 I've at least identified two possible memory leaks in blkback, both
 related to the shutdown path of a VBD:
 
 - blkback doesn't wait for any pending purge work to finish before
   cleaning the list of free_pages. The purge work will call
   put_free_pages and thus we might end up with pages being added to
   the free_pages list after we have emptied it. Fix this by making
   sure there's no pending purge work before exiting
   xen_blkif_schedule, and moving the free_page cleanup code to
   xen_blkif_free.
 - blkback doesn't wait for pending requests to end before cleaning
   persistent grants and the list of free_pages. Again this can add
   pages to the free_pages list or persistent grants to the
   persistent_gnts red-black tree. Fixed by moving the persistent
   grants and free_pages cleanup code to xen_blkif_free.
 
 Also, add some checks in xen_blkif_free to make sure we are cleaning
 everything.
 
 Tested-by: Matt Rushton mrush...@amazon.com
 Reviewed-by: Matt Rushton mrush...@amazon.com

Tested-by: Christoph Egger cheg...@amazon.de
Reviewed-by: Christoph Egger cheg...@amazon.de

Christoph

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [Xen-devel] [PATCH v2 3/4] xen-blkback: fix shutdown race

2014-02-12 Thread Egger, Christoph
On 07.02.14 04:23, Matthew Rushton wrote:
 On 04/02/14 10:26, Roger Pau Monne wrote:
 Introduce a new variable to keep track of the number of in-flight
 requests. We need to make sure that when xen_blkif_put is called the
 request has already been freed and we can safely free xen_blkif, which
 was not the case before.
 
 Tested-by: Matt Rushton mrush...@amazon.com
 Reviewed-by: Matt Rushton mrush...@amazon.com

Tested-by: Christoph Egger cheg...@amazon.de
Reviewed-by: Christoph Egger cheg...@amazon.de

Christoph

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [Xen-devel] [PATCH v2 4/4] xen-blkif: drop struct blkif_request_segment_aligned

2014-02-12 Thread Egger, Christoph
On 07.02.14 04:38, Matthew Rushton wrote:
 This was wrongly introduced in commit 402b27f9, the only difference
 between blkif_request_segment_aligned and blkif_request_segment is
 that the former has a named padding, while both share the same
 memory layout.

 Also correct a few minor glitches in the description, including for it
 to no longer assume PAGE_SIZE == 4096.
 
 Tested-by: Matt Rushton mrush...@amazon.com
 
 *Corrected subject line from last email and resent. I tested the set and
 everything looks solid. I also reviewed patch 2 and 3.
 

Tested-by: Christoph Egger cheg...@amazon.de
Reviewed-by: Christoph Egger cheg...@amazon.de

Christoph

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [Xen-devel] [PATCH] xen-blkback: fix memory leak when persistent grants are used

2014-01-24 Thread Egger, Christoph
On 23.01.14 20:28, Matt Wilson wrote:
> From: Matt Rushton 
> 
> Currently shrink_free_pagepool() is called before the pages used for
> persistent grants are released via free_persistent_gnts(). This
> results in a memory leak when a VBD that uses persistent grants is
> torn down.

This memory leak was introduced with commit
c6cc142dac52e62e1e8a2aff5de1300202b96c66 xen-blkback: use balloon pages
for all mappings

Christoph

> Cc: Konrad Rzeszutek Wilk 
> Cc: "Roger Pau Monné" 
> Cc: Ian Campbell 
> Cc: David Vrabel 
> Cc: linux-kernel@vger.kernel.org
> Cc: xen-de...@lists.xen.org
> Cc: Anthony Liguori 
> Signed-off-by: Matt Rushton 
> Signed-off-by: Matt Wilson 
> ---
>  drivers/block/xen-blkback/blkback.c |6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/block/xen-blkback/blkback.c 
> b/drivers/block/xen-blkback/blkback.c
> index 6620b73..30ef7b3 100644
> --- a/drivers/block/xen-blkback/blkback.c
> +++ b/drivers/block/xen-blkback/blkback.c
> @@ -625,9 +625,6 @@ purge_gnt_list:
>   print_stats(blkif);
>   }
>  
> - /* Since we are shutting down remove all pages from the buffer */
> - shrink_free_pagepool(blkif, 0 /* All */);
> -
>   /* Free all persistent grant pages */
>   if (!RB_EMPTY_ROOT(>persistent_gnts))
>   free_persistent_gnts(blkif, >persistent_gnts,
> @@ -636,6 +633,9 @@ purge_gnt_list:
>   BUG_ON(!RB_EMPTY_ROOT(>persistent_gnts));
>   blkif->persistent_gnt_c = 0;
>  
> + /* Since we are shutting down remove all pages from the buffer */
> + shrink_free_pagepool(blkif, 0 /* All */);
> +
>   if (log_stats)
>   print_stats(blkif);
>  
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [Xen-devel] [PATCH] xen-blkback: fix memory leak when persistent grants are used

2014-01-24 Thread Egger, Christoph
On 23.01.14 20:28, Matt Wilson wrote:
 From: Matt Rushton mrush...@amazon.com
 
 Currently shrink_free_pagepool() is called before the pages used for
 persistent grants are released via free_persistent_gnts(). This
 results in a memory leak when a VBD that uses persistent grants is
 torn down.

This memory leak was introduced with commit
c6cc142dac52e62e1e8a2aff5de1300202b96c66 xen-blkback: use balloon pages
for all mappings

Christoph

 Cc: Konrad Rzeszutek Wilk konrad.w...@oracle.com
 Cc: Roger Pau Monné roger@citrix.com
 Cc: Ian Campbell ian.campb...@citrix.com
 Cc: David Vrabel david.vra...@citrix.com
 Cc: linux-kernel@vger.kernel.org
 Cc: xen-de...@lists.xen.org
 Cc: Anthony Liguori aligu...@amazon.com
 Signed-off-by: Matt Rushton mrush...@amazon.com
 Signed-off-by: Matt Wilson m...@amazon.com
 ---
  drivers/block/xen-blkback/blkback.c |6 +++---
  1 file changed, 3 insertions(+), 3 deletions(-)
 
 diff --git a/drivers/block/xen-blkback/blkback.c 
 b/drivers/block/xen-blkback/blkback.c
 index 6620b73..30ef7b3 100644
 --- a/drivers/block/xen-blkback/blkback.c
 +++ b/drivers/block/xen-blkback/blkback.c
 @@ -625,9 +625,6 @@ purge_gnt_list:
   print_stats(blkif);
   }
  
 - /* Since we are shutting down remove all pages from the buffer */
 - shrink_free_pagepool(blkif, 0 /* All */);
 -
   /* Free all persistent grant pages */
   if (!RB_EMPTY_ROOT(blkif-persistent_gnts))
   free_persistent_gnts(blkif, blkif-persistent_gnts,
 @@ -636,6 +633,9 @@ purge_gnt_list:
   BUG_ON(!RB_EMPTY_ROOT(blkif-persistent_gnts));
   blkif-persistent_gnt_c = 0;
  
 + /* Since we are shutting down remove all pages from the buffer */
 + shrink_free_pagepool(blkif, 0 /* All */);
 +
   if (log_stats)
   print_stats(blkif);
  
 

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [Xen-devel] [PATCH RFC 4/4] xen-block: introduce a new request type to unmap grants

2013-07-10 Thread Egger, Christoph
On 10.07.13 11:19, Roger Pau Monné wrote:
> On 08/07/13 21:41, Konrad Rzeszutek Wilk wrote:
>> On Mon, Jul 08, 2013 at 03:03:27PM +0200, Roger Pau Monne wrote:
>>> Right now blkfront has no way to unmap grant refs, if using persistent
>>> grants once a grant is used blkfront cannot assure if blkback will
>>> have this grant mapped or not. To solve this problem, a new request
>>> type (BLKIF_OP_UNMAP) that allows requesting blkback to unmap certain
>>> grants is introduced.
>>
>> I don't think this is the right way of doing it. It is a new operation
>> (BLKIF_OP_UNMAP) that has nothing to do with READ/WRITE. All it is
>> is just some way for the frontend to say: unmap this grant if you can.
>>
>> As such I would think a better mechanism would be to have a new
>> grant mechanism that can say: 'I am done with this grant you can
>> remove it' - that is called to the hypervisor. The hypervisor
>> can then figure out whether it is free or not and lazily delete it.
>> (And the guest would be notified when it is freed).
> 
> I have a patch that I think implements something quite similar to what 
> you describe, but it doesn't require any new patch to the hypervisor 
> side. From blkfront we can check what grants blkback has chosen to 
> persistently map and only keep those.
> 
> This is different from my previous approach, were blkfront could 
> specifically request blkback to unmap certain grants, but it still 
> prevents blkfront from hoarding all grants (unless blkback is 
> persistently mapping every possible grant). With this patch the number 
> of persistent grants in blkfront will be the same as in blkback, so 
> basically the backend can control how many grants will be persistently 
> mapped. 

According to your blog
http://blog.xen.org/index.php/2012/11/23/improving-block-protocol-scalability-with-persistent-grants/
persistent grants in the frontend gives an benefit even when the backend does 
not support
persistent grants. Is this still the case with this patch?

Christoph


> ---
> From 1ede72ba10a7ec13d57ba6d2af54e86a099d7125 Mon Sep 17 00:00:00 2001
> From: Roger Pau Monne 
> Date: Wed, 10 Jul 2013 10:22:19 +0200
> Subject: [PATCH RFC] xen-blkfront: revoke foreign access for grants not
>  mapped by the backend
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
> 
> There's no need to keep the foreign access in a grant if it is not
> persistently mapped by the backend. This allows us to free grants that
> are not mapped by the backend, thus preventing blkfront from hoarding
> all grants.
> 
> The main effect of this is that blkfront will only persistently map
> the same grants as the backend, and it will always try to use grants
> that are already mapped by the backend. Also the number of persistent
> grants in blkfront is the same as in blkback (and is controlled by the
> value in blkback).
> 
> Signed-off-by: Roger Pau Monné 
> Cc: Konrad Rzeszutek Wilk 
> ---
>  drivers/block/xen-blkfront.c |   33 +
>  1 files changed, 29 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
> index 3d445c0..6ba88c1 100644
> --- a/drivers/block/xen-blkfront.c
> +++ b/drivers/block/xen-blkfront.c
> @@ -1022,13 +1022,38 @@ static void blkif_completion(struct blk_shadow *s, 
> struct blkfront_info *info,
>   }
>   /* Add the persistent grant into the list of free grants */
>   for (i = 0; i < nseg; i++) {
> - list_add(>grants_used[i]->node, >persistent_gnts);
> - info->persistent_gnts_c++;
> + if (gnttab_query_foreign_access(s->grants_used[i]->gref)) {
> + /*
> +  * If the grant is still mapped by the backend (the
> +  * backend has chosen to make this grant persistent)
> +  * we add it at the head of the list, so it will be
> +  * reused first.
> +  */
> + list_add(>grants_used[i]->node, 
> >persistent_gnts);
> + info->persistent_gnts_c++;
> + } else {
> + /*
> +  * If the grant is not mapped by the backend we end the
> +  * foreign access and add it to the tail of the list,
> +  * so it will not be picked again unless we run out of
> +  * persistent grants.
> +  */
> + gnttab_end_foreign_access(s->grants_used[i]->gref, 0, 
> 0UL);
> + s->grants_used[i]->gref = GRANT_INVALID_REF;
> + list_add_tail(>grants_used[i]->node, 
> >persistent_gnts);
> + }
>   }
>   if (s->req.operation == BLKIF_OP_INDIRECT) {
>   for (i = 0; i < INDIRECT_GREFS(nseg); i++) {
> - list_add(>indirect_grants[i]->node, 
> >persistent_gnts);
> - 

Re: [Xen-devel] [PATCH RFC 4/4] xen-block: introduce a new request type to unmap grants

2013-07-10 Thread Egger, Christoph
On 10.07.13 11:19, Roger Pau Monné wrote:
 On 08/07/13 21:41, Konrad Rzeszutek Wilk wrote:
 On Mon, Jul 08, 2013 at 03:03:27PM +0200, Roger Pau Monne wrote:
 Right now blkfront has no way to unmap grant refs, if using persistent
 grants once a grant is used blkfront cannot assure if blkback will
 have this grant mapped or not. To solve this problem, a new request
 type (BLKIF_OP_UNMAP) that allows requesting blkback to unmap certain
 grants is introduced.

 I don't think this is the right way of doing it. It is a new operation
 (BLKIF_OP_UNMAP) that has nothing to do with READ/WRITE. All it is
 is just some way for the frontend to say: unmap this grant if you can.

 As such I would think a better mechanism would be to have a new
 grant mechanism that can say: 'I am done with this grant you can
 remove it' - that is called to the hypervisor. The hypervisor
 can then figure out whether it is free or not and lazily delete it.
 (And the guest would be notified when it is freed).
 
 I have a patch that I think implements something quite similar to what 
 you describe, but it doesn't require any new patch to the hypervisor 
 side. From blkfront we can check what grants blkback has chosen to 
 persistently map and only keep those.
 
 This is different from my previous approach, were blkfront could 
 specifically request blkback to unmap certain grants, but it still 
 prevents blkfront from hoarding all grants (unless blkback is 
 persistently mapping every possible grant). With this patch the number 
 of persistent grants in blkfront will be the same as in blkback, so 
 basically the backend can control how many grants will be persistently 
 mapped. 

According to your blog
http://blog.xen.org/index.php/2012/11/23/improving-block-protocol-scalability-with-persistent-grants/
persistent grants in the frontend gives an benefit even when the backend does 
not support
persistent grants. Is this still the case with this patch?

Christoph


 ---
 From 1ede72ba10a7ec13d57ba6d2af54e86a099d7125 Mon Sep 17 00:00:00 2001
 From: Roger Pau Monne roger@citrix.com
 Date: Wed, 10 Jul 2013 10:22:19 +0200
 Subject: [PATCH RFC] xen-blkfront: revoke foreign access for grants not
  mapped by the backend
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
 
 There's no need to keep the foreign access in a grant if it is not
 persistently mapped by the backend. This allows us to free grants that
 are not mapped by the backend, thus preventing blkfront from hoarding
 all grants.
 
 The main effect of this is that blkfront will only persistently map
 the same grants as the backend, and it will always try to use grants
 that are already mapped by the backend. Also the number of persistent
 grants in blkfront is the same as in blkback (and is controlled by the
 value in blkback).
 
 Signed-off-by: Roger Pau Monné roger@citrix.com
 Cc: Konrad Rzeszutek Wilk konrad.w...@oracle.com
 ---
  drivers/block/xen-blkfront.c |   33 +
  1 files changed, 29 insertions(+), 4 deletions(-)
 
 diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
 index 3d445c0..6ba88c1 100644
 --- a/drivers/block/xen-blkfront.c
 +++ b/drivers/block/xen-blkfront.c
 @@ -1022,13 +1022,38 @@ static void blkif_completion(struct blk_shadow *s, 
 struct blkfront_info *info,
   }
   /* Add the persistent grant into the list of free grants */
   for (i = 0; i  nseg; i++) {
 - list_add(s-grants_used[i]-node, info-persistent_gnts);
 - info-persistent_gnts_c++;
 + if (gnttab_query_foreign_access(s-grants_used[i]-gref)) {
 + /*
 +  * If the grant is still mapped by the backend (the
 +  * backend has chosen to make this grant persistent)
 +  * we add it at the head of the list, so it will be
 +  * reused first.
 +  */
 + list_add(s-grants_used[i]-node, 
 info-persistent_gnts);
 + info-persistent_gnts_c++;
 + } else {
 + /*
 +  * If the grant is not mapped by the backend we end the
 +  * foreign access and add it to the tail of the list,
 +  * so it will not be picked again unless we run out of
 +  * persistent grants.
 +  */
 + gnttab_end_foreign_access(s-grants_used[i]-gref, 0, 
 0UL);
 + s-grants_used[i]-gref = GRANT_INVALID_REF;
 + list_add_tail(s-grants_used[i]-node, 
 info-persistent_gnts);
 + }
   }
   if (s-req.operation == BLKIF_OP_INDIRECT) {
   for (i = 0; i  INDIRECT_GREFS(nseg); i++) {
 - list_add(s-indirect_grants[i]-node, 
 info-persistent_gnts);
 - info-persistent_gnts_c++;
 + if