diff mbox series

brd: add cond_resched to brd_free_pages

Message ID alpine.LRH.2.02.1905091252300.19234@file01.intranet.prod.int.rdu2.redhat.com (mailing list archive)
State New, archived
Headers show
Series brd: add cond_resched to brd_free_pages | expand

Commit Message

Mikulas Patocka May 9, 2019, 4:54 p.m. UTC
The loop that frees all the pages can take unbounded amount of time, so
add cond_resched() to it.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>

---
 drivers/block/brd.c |    2 ++
 1 file changed, 2 insertions(+)

Comments

Jens Axboe May 9, 2019, 4:56 p.m. UTC | #1
On 5/9/19 10:54 AM, Mikulas Patocka wrote:
> The loop that frees all the pages can take unbounded amount of time, so
> add cond_resched() to it.

Looks fine to me, would be nice with a comment on why the cond_resched()
is needed though.
Mikulas Patocka May 9, 2019, 6:50 p.m. UTC | #2
On Thu, 9 May 2019, Jens Axboe wrote:

> On 5/9/19 10:54 AM, Mikulas Patocka wrote:
> > The loop that frees all the pages can take unbounded amount of time, so
> > add cond_resched() to it.
> 
> Looks fine to me, would be nice with a comment on why the cond_resched()
> is needed though.
> 
> -- 
> Jens Axboe

OK - here I added the comment.

Mikulas



From: Mikulas Patocka <mpatocka@redhat.com>
Subject: [PATCH] brd: add cond_resched to brd_free_pages

The loop that frees all the pages can take unbounded amount of time, so
add cond_resched() to it.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>

---
 drivers/block/brd.c |    6 ++++++
 1 file changed, 6 insertions(+)

Index: linux-2.6/drivers/block/brd.c
===================================================================
--- linux-2.6.orig/drivers/block/brd.c	2019-05-09 20:46:23.000000000 +0200
+++ linux-2.6/drivers/block/brd.c	2019-05-09 20:47:43.000000000 +0200
@@ -158,6 +158,12 @@ static void brd_free_pages(struct brd_de
 		pos++;
 
 		/*
+		 * It takes 3.4 seconds to remove 80GiB ramdisk.
+		 * So, we need cond_resched to avoid stalling the CPU.
+		 */
+		cond_resched();
+
+		/*
 		 * This assumes radix_tree_gang_lookup always returns as
 		 * many pages as possible. If the radix-tree code changes,
 		 * so will this have to.
Jens Axboe May 9, 2019, 6:51 p.m. UTC | #3
On 5/9/19 12:50 PM, Mikulas Patocka wrote:
> 
> 
> On Thu, 9 May 2019, Jens Axboe wrote:
> 
>> On 5/9/19 10:54 AM, Mikulas Patocka wrote:
>>> The loop that frees all the pages can take unbounded amount of time, so
>>> add cond_resched() to it.
>>
>> Looks fine to me, would be nice with a comment on why the cond_resched()
>> is needed though.
>>
>> -- 
>> Jens Axboe
> 
> OK - here I added the comment.

Great thanks, applied.
diff mbox series

Patch

Index: linux-4.19.41/drivers/block/brd.c
===================================================================
--- linux-4.19.41.orig/drivers/block/brd.c	2019-01-22 12:26:42.000000000 +0100
+++ linux-4.19.41/drivers/block/brd.c	2019-05-09 17:09:11.000000000 +0200
@@ -157,6 +157,8 @@  static void brd_free_pages(struct brd_de
 
 		pos++;
 
+		cond_resched();
+
 		/*
 		 * This assumes radix_tree_gang_lookup always returns as
 		 * many pages as possible. If the radix-tree code changes,