linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] zram: do not set ZRAM_IDLE bit for idlepage writeback in writeback_store()
@ 2020-01-21 11:35 Yue Hu
  2020-01-23  2:23 ` Minchan Kim
  0 siblings, 1 reply; 4+ messages in thread
From: Yue Hu @ 2020-01-21 11:35 UTC (permalink / raw)
  To: minchan, ngupta, sergey.senozhatsky.work; +Cc: linux-kernel, huyue2

From: Yue Hu <huyue2@yulong.com>

Currently, we will call zram_set_flag() to set ZRAM_IDLE bit even for
idlepage writeback. That is pointless. Let's set it only for hugepage mode.

Signed-off-by: Yue Hu <huyue2@yulong.com>
---
 drivers/block/zram/zram_drv.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 4285e75..eef5767 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -689,16 +689,18 @@ static ssize_t writeback_store(struct device *dev,
 		if (mode == IDLE_WRITEBACK &&
 			  !zram_test_flag(zram, index, ZRAM_IDLE))
 			goto next;
-		if (mode == HUGE_WRITEBACK &&
-			  !zram_test_flag(zram, index, ZRAM_HUGE))
-			goto next;
+		if (mode == HUGE_WRITEBACK) {
+			if (!zram_test_flag(zram, index, ZRAM_HUGE))
+				goto next;
+			/* Need for hugepage writeback racing */
+			zram_set_flag(zram, index, ZRAM_IDLE);
+		}
+
 		/*
 		 * Clearing ZRAM_UNDER_WB is duty of caller.
 		 * IOW, zram_free_page never clear it.
 		 */
 		zram_set_flag(zram, index, ZRAM_UNDER_WB);
-		/* Need for hugepage writeback racing */
-		zram_set_flag(zram, index, ZRAM_IDLE);
 		zram_slot_unlock(zram, index);
 		if (zram_bvec_read(zram, &bvec, index, 0, NULL)) {
 			zram_slot_lock(zram, index);
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] zram: do not set ZRAM_IDLE bit for idlepage writeback in writeback_store()
  2020-01-21 11:35 [PATCH] zram: do not set ZRAM_IDLE bit for idlepage writeback in writeback_store() Yue Hu
@ 2020-01-23  2:23 ` Minchan Kim
  2020-01-23  2:39   ` Yue Hu
  0 siblings, 1 reply; 4+ messages in thread
From: Minchan Kim @ 2020-01-23  2:23 UTC (permalink / raw)
  To: Yue Hu; +Cc: ngupta, sergey.senozhatsky.work, linux-kernel, huyue2

On Tue, Jan 21, 2020 at 07:35:57PM +0800, Yue Hu wrote:
> From: Yue Hu <huyue2@yulong.com>
> 
> Currently, we will call zram_set_flag() to set ZRAM_IDLE bit even for
> idlepage writeback. That is pointless. Let's set it only for hugepage mode.

Could you be more specific? What do you see the problem with that?

> 
> Signed-off-by: Yue Hu <huyue2@yulong.com>
> ---
>  drivers/block/zram/zram_drv.c | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
> index 4285e75..eef5767 100644
> --- a/drivers/block/zram/zram_drv.c
> +++ b/drivers/block/zram/zram_drv.c
> @@ -689,16 +689,18 @@ static ssize_t writeback_store(struct device *dev,
>  		if (mode == IDLE_WRITEBACK &&
>  			  !zram_test_flag(zram, index, ZRAM_IDLE))
>  			goto next;
> -		if (mode == HUGE_WRITEBACK &&
> -			  !zram_test_flag(zram, index, ZRAM_HUGE))
> -			goto next;
> +		if (mode == HUGE_WRITEBACK) {
> +			if (!zram_test_flag(zram, index, ZRAM_HUGE))
> +				goto next;
> +			/* Need for hugepage writeback racing */
> +			zram_set_flag(zram, index, ZRAM_IDLE);
> +		}
> +
>  		/*
>  		 * Clearing ZRAM_UNDER_WB is duty of caller.
>  		 * IOW, zram_free_page never clear it.
>  		 */
>  		zram_set_flag(zram, index, ZRAM_UNDER_WB);
> -		/* Need for hugepage writeback racing */
> -		zram_set_flag(zram, index, ZRAM_IDLE);
>  		zram_slot_unlock(zram, index);
>  		if (zram_bvec_read(zram, &bvec, index, 0, NULL)) {
>  			zram_slot_lock(zram, index);
> -- 
> 1.9.1
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] zram: do not set ZRAM_IDLE bit for idlepage writeback in writeback_store()
  2020-01-23  2:23 ` Minchan Kim
@ 2020-01-23  2:39   ` Yue Hu
  2020-01-23 23:25     ` Minchan Kim
  0 siblings, 1 reply; 4+ messages in thread
From: Yue Hu @ 2020-01-23  2:39 UTC (permalink / raw)
  To: Minchan Kim; +Cc: ngupta, sergey.senozhatsky.work, linux-kernel, huyue2

On Wed, 22 Jan 2020 18:23:05 -0800
Minchan Kim <minchan@kernel.org> wrote:

> On Tue, Jan 21, 2020 at 07:35:57PM +0800, Yue Hu wrote:
> > From: Yue Hu <huyue2@yulong.com>
> > 
> > Currently, we will call zram_set_flag() to set ZRAM_IDLE bit even for
> > idlepage writeback. That is pointless. Let's set it only for hugepage mode.  
> 
> Could you be more specific? What do you see the problem with that?

If current writeback mode is idle, ZRAM_IDLE bit will be check firstly for this
slot. Then go to call zram_set_flag(, , ZRAM_IDLE) if it's marked as ZRAM_IDLE.
So, it's duplicated setting, am i right? 

Thx.

> 
> > 
> > Signed-off-by: Yue Hu <huyue2@yulong.com>
> > ---
> >  drivers/block/zram/zram_drv.c | 12 +++++++-----
> >  1 file changed, 7 insertions(+), 5 deletions(-)
> > 
> > diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
> > index 4285e75..eef5767 100644
> > --- a/drivers/block/zram/zram_drv.c
> > +++ b/drivers/block/zram/zram_drv.c
> > @@ -689,16 +689,18 @@ static ssize_t writeback_store(struct device *dev,
> >  		if (mode == IDLE_WRITEBACK &&
> >  			  !zram_test_flag(zram, index, ZRAM_IDLE))
> >  			goto next;
> > -		if (mode == HUGE_WRITEBACK &&
> > -			  !zram_test_flag(zram, index, ZRAM_HUGE))
> > -			goto next;
> > +		if (mode == HUGE_WRITEBACK) {
> > +			if (!zram_test_flag(zram, index, ZRAM_HUGE))
> > +				goto next;
> > +			/* Need for hugepage writeback racing */
> > +			zram_set_flag(zram, index, ZRAM_IDLE);
> > +		}
> > +
> >  		/*
> >  		 * Clearing ZRAM_UNDER_WB is duty of caller.
> >  		 * IOW, zram_free_page never clear it.
> >  		 */
> >  		zram_set_flag(zram, index, ZRAM_UNDER_WB);
> > -		/* Need for hugepage writeback racing */
> > -		zram_set_flag(zram, index, ZRAM_IDLE);
> >  		zram_slot_unlock(zram, index);
> >  		if (zram_bvec_read(zram, &bvec, index, 0, NULL)) {
> >  			zram_slot_lock(zram, index);
> > -- 
> > 1.9.1
> >   


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] zram: do not set ZRAM_IDLE bit for idlepage writeback in writeback_store()
  2020-01-23  2:39   ` Yue Hu
@ 2020-01-23 23:25     ` Minchan Kim
  0 siblings, 0 replies; 4+ messages in thread
From: Minchan Kim @ 2020-01-23 23:25 UTC (permalink / raw)
  To: Yue Hu; +Cc: ngupta, sergey.senozhatsky.work, linux-kernel, huyue2

On Thu, Jan 23, 2020 at 10:39:36AM +0800, Yue Hu wrote:
> On Wed, 22 Jan 2020 18:23:05 -0800
> Minchan Kim <minchan@kernel.org> wrote:
> 
> > On Tue, Jan 21, 2020 at 07:35:57PM +0800, Yue Hu wrote:
> > > From: Yue Hu <huyue2@yulong.com>
> > > 
> > > Currently, we will call zram_set_flag() to set ZRAM_IDLE bit even for
> > > idlepage writeback. That is pointless. Let's set it only for hugepage mode.  
> > 
> > Could you be more specific? What do you see the problem with that?
> 
> If current writeback mode is idle, ZRAM_IDLE bit will be check firstly for this
> slot. Then go to call zram_set_flag(, , ZRAM_IDLE) if it's marked as ZRAM_IDLE.
> So, it's duplicated setting, am i right? 

As I wrote down in the description, it aims for the race with hugepage writeback.
Without it, there is no way to detect the slot is reallocated and marked
with huge again but it's new data so zram could free the page
unintentionally.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-01-23 23:25 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-21 11:35 [PATCH] zram: do not set ZRAM_IDLE bit for idlepage writeback in writeback_store() Yue Hu
2020-01-23  2:23 ` Minchan Kim
2020-01-23  2:39   ` Yue Hu
2020-01-23 23:25     ` Minchan Kim

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).