linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] zram: close udev startup race condition as default groups
@ 2018-11-14  5:52 Minchan Kim
  2018-11-14  7:09 ` Hannes Reinecke
  2018-11-15 17:45 ` Sasha Levin
  0 siblings, 2 replies; 9+ messages in thread
From: Minchan Kim @ 2018-11-14  5:52 UTC (permalink / raw)
  To: stable
  Cc: LKML, Andrew Morton, Minchan Kim, Sergey Senozhatsky,
	Hannes Reinecke, Howard Chen

commit fef912bf860e upstream.
commit 98af4d4df889 upstream.

I got a report from Howard Chen that he saw zram and sysfs race(ie,
zram block device file is created but sysfs for it isn't yet)
when he tried to create new zram devices via hotadd knob.

v4.20 kernel fixes it by [1, 2] but it's too large size to merge
into -stable so this patch fixes the problem by registering defualt
group by Greg KH's approach[3].

This patch should be applied to every stable tree [3.16+] currently
existing from kernel.org because the problem was introduced at 2.6.37
by [4].

[1] fef912bf860e, block: genhd: add 'groups' argument to device_add_disk
[2] 98af4d4df889, zram: register default groups with device_add_disk()
[3] http://kroah.com/log/blog/2013/06/26/how-to-create-a-sysfs-file-correctly/
[4] 33863c21e69e9, Staging: zram: Replace ioctls with sysfs interface

Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Hannes Reinecke <hare@suse.com>
Tested-by: Howard Chen <howardsoc@google.com>
Signed-off-by: Minchan Kim <minchan@kernel.org>
---
 drivers/block/zram/zram_drv.c | 26 ++++++--------------------
 1 file changed, 6 insertions(+), 20 deletions(-)

diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index a1d6b5597c17..66921427d109 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -1636,6 +1636,11 @@ static const struct attribute_group zram_disk_attr_group = {
 	.attrs = zram_disk_attrs,
 };
 
+static const struct attribute_group *zram_disk_attr_groups[] = {
+	&zram_disk_attr_group,
+	NULL,
+};
+
 /*
  * Allocate and initialize new zram device. the function returns
  * '>= 0' device_id upon success, and negative value otherwise.
@@ -1716,24 +1721,15 @@ static int zram_add(void)
 
 	zram->disk->queue->backing_dev_info->capabilities |=
 			(BDI_CAP_STABLE_WRITES | BDI_CAP_SYNCHRONOUS_IO);
+	disk_to_dev(zram->disk)->groups = zram_disk_attr_groups;
 	add_disk(zram->disk);
 
-	ret = sysfs_create_group(&disk_to_dev(zram->disk)->kobj,
-				&zram_disk_attr_group);
-	if (ret < 0) {
-		pr_err("Error creating sysfs group for device %d\n",
-				device_id);
-		goto out_free_disk;
-	}
 	strlcpy(zram->compressor, default_compressor, sizeof(zram->compressor));
 
 	zram_debugfs_register(zram);
 	pr_info("Added device: %s\n", zram->disk->disk_name);
 	return device_id;
 
-out_free_disk:
-	del_gendisk(zram->disk);
-	put_disk(zram->disk);
 out_free_queue:
 	blk_cleanup_queue(queue);
 out_free_idr:
@@ -1762,16 +1758,6 @@ static int zram_remove(struct zram *zram)
 	mutex_unlock(&bdev->bd_mutex);
 
 	zram_debugfs_unregister(zram);
-	/*
-	 * Remove sysfs first, so no one will perform a disksize
-	 * store while we destroy the devices. This also helps during
-	 * hot_remove -- zram_reset_device() is the last holder of
-	 * ->init_lock, no later/concurrent disksize_store() or any
-	 * other sysfs handlers are possible.
-	 */
-	sysfs_remove_group(&disk_to_dev(zram->disk)->kobj,
-			&zram_disk_attr_group);
-
 	/* Make sure all the pending I/O are finished */
 	fsync_bdev(bdev);
 	zram_reset_device(zram);
-- 
2.19.1.930.g4563a0d9d0-goog


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

* Re: [PATCH] zram: close udev startup race condition as default groups
  2018-11-14  5:52 [PATCH] zram: close udev startup race condition as default groups Minchan Kim
@ 2018-11-14  7:09 ` Hannes Reinecke
  2018-11-15 17:45 ` Sasha Levin
  1 sibling, 0 replies; 9+ messages in thread
From: Hannes Reinecke @ 2018-11-14  7:09 UTC (permalink / raw)
  To: Minchan Kim, stable; +Cc: LKML, Andrew Morton, Sergey Senozhatsky, Howard Chen

On 11/14/18 6:52 AM, Minchan Kim wrote:
> commit fef912bf860e upstream.
> commit 98af4d4df889 upstream.
> 
> I got a report from Howard Chen that he saw zram and sysfs race(ie,
> zram block device file is created but sysfs for it isn't yet)
> when he tried to create new zram devices via hotadd knob.
> 
> v4.20 kernel fixes it by [1, 2] but it's too large size to merge
> into -stable so this patch fixes the problem by registering defualt
> group by Greg KH's approach[3].
> 
> This patch should be applied to every stable tree [3.16+] currently
> existing from kernel.org because the problem was introduced at 2.6.37
> by [4].
> 
> [1] fef912bf860e, block: genhd: add 'groups' argument to device_add_disk
> [2] 98af4d4df889, zram: register default groups with device_add_disk()
> [3] http://kroah.com/log/blog/2013/06/26/how-to-create-a-sysfs-file-correctly/
> [4] 33863c21e69e9, Staging: zram: Replace ioctls with sysfs interface
> 
> Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
> Cc: Hannes Reinecke <hare@suse.com>
> Tested-by: Howard Chen <howardsoc@google.com>
> Signed-off-by: Minchan Kim <minchan@kernel.org>
> ---
>   drivers/block/zram/zram_drv.c | 26 ++++++--------------------
>   1 file changed, 6 insertions(+), 20 deletions(-)
> 
Actually, I have a similar patch for NVMe in older revisions, so maybe I 
should push it to -stable, too.

Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		               zSeries & Storage
hare@suse.com			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

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

* Re: [PATCH] zram: close udev startup race condition as default groups
  2018-11-14  5:52 [PATCH] zram: close udev startup race condition as default groups Minchan Kim
  2018-11-14  7:09 ` Hannes Reinecke
@ 2018-11-15 17:45 ` Sasha Levin
  2018-11-16 15:48   ` Minchan Kim
                     ` (4 more replies)
  1 sibling, 5 replies; 9+ messages in thread
From: Sasha Levin @ 2018-11-15 17:45 UTC (permalink / raw)
  To: Minchan Kim
  Cc: stable, LKML, Andrew Morton, Sergey Senozhatsky, Hannes Reinecke,
	Howard Chen

On Wed, Nov 14, 2018 at 02:52:23PM +0900, Minchan Kim wrote:
>commit fef912bf860e upstream.
>commit 98af4d4df889 upstream.
>
>I got a report from Howard Chen that he saw zram and sysfs race(ie,
>zram block device file is created but sysfs for it isn't yet)
>when he tried to create new zram devices via hotadd knob.
>
>v4.20 kernel fixes it by [1, 2] but it's too large size to merge
>into -stable so this patch fixes the problem by registering defualt
>group by Greg KH's approach[3].
>
>This patch should be applied to every stable tree [3.16+] currently
>existing from kernel.org because the problem was introduced at 2.6.37
>by [4].
>
>[1] fef912bf860e, block: genhd: add 'groups' argument to device_add_disk
>[2] 98af4d4df889, zram: register default groups with device_add_disk()
>[3] http://kroah.com/log/blog/2013/06/26/how-to-create-a-sysfs-file-correctly/
>[4] 33863c21e69e9, Staging: zram: Replace ioctls with sysfs interface
>
>Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
>Cc: Hannes Reinecke <hare@suse.com>
>Tested-by: Howard Chen <howardsoc@google.com>
>Signed-off-by: Minchan Kim <minchan@kernel.org>

I've queued this for 4.19 and 4.18, but it doesn't apply to anything
older than that.

--
Thanks,
Sasha

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

* Re: [PATCH] zram: close udev startup race condition as default groups
  2018-11-15 17:45 ` Sasha Levin
@ 2018-11-16 15:48   ` Minchan Kim
  2018-11-23  6:25   ` [PATCH for v4.14] " Minchan Kim
                     ` (3 subsequent siblings)
  4 siblings, 0 replies; 9+ messages in thread
From: Minchan Kim @ 2018-11-16 15:48 UTC (permalink / raw)
  To: Sasha Levin
  Cc: stable, LKML, Andrew Morton, Sergey Senozhatsky, Hannes Reinecke,
	Howard Chen

On Thu, Nov 15, 2018 at 12:45:04PM -0500, Sasha Levin wrote:
> On Wed, Nov 14, 2018 at 02:52:23PM +0900, Minchan Kim wrote:
> > commit fef912bf860e upstream.
> > commit 98af4d4df889 upstream.
> > 
> > I got a report from Howard Chen that he saw zram and sysfs race(ie,
> > zram block device file is created but sysfs for it isn't yet)
> > when he tried to create new zram devices via hotadd knob.
> > 
> > v4.20 kernel fixes it by [1, 2] but it's too large size to merge
> > into -stable so this patch fixes the problem by registering defualt
> > group by Greg KH's approach[3].
> > 
> > This patch should be applied to every stable tree [3.16+] currently
> > existing from kernel.org because the problem was introduced at 2.6.37
> > by [4].
> > 
> > [1] fef912bf860e, block: genhd: add 'groups' argument to device_add_disk
> > [2] 98af4d4df889, zram: register default groups with device_add_disk()
> > [3] http://kroah.com/log/blog/2013/06/26/how-to-create-a-sysfs-file-correctly/
> > [4] 33863c21e69e9, Staging: zram: Replace ioctls with sysfs interface
> > 
> > Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
> > Cc: Hannes Reinecke <hare@suse.com>
> > Tested-by: Howard Chen <howardsoc@google.com>
> > Signed-off-by: Minchan Kim <minchan@kernel.org>
> 
> I've queued this for 4.19 and 4.18, but it doesn't apply to anything
> older than that.

Thanks for the review, Hannes.

Sasha, I will send separate patches for older stable kernel.
Thanks for picking the patch.

> 
> --
> Thanks,
> Sasha

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

* [PATCH for v4.14] zram: close udev startup race condition as default groups
  2018-11-15 17:45 ` Sasha Levin
  2018-11-16 15:48   ` Minchan Kim
@ 2018-11-23  6:25   ` Minchan Kim
  2018-11-23 18:50     ` Sasha Levin
  2018-11-23  6:28   ` [PATCH for 4.9] " Minchan Kim
                     ` (2 subsequent siblings)
  4 siblings, 1 reply; 9+ messages in thread
From: Minchan Kim @ 2018-11-23  6:25 UTC (permalink / raw)
  To: stable
  Cc: Andrew Morton, hare, LKML, sashal, Minchan Kim,
	Sergey Senozhatsky, Howard Chen

commit fef912bf860e upstream.
commit 98af4d4df889 upstream.

I got a report from Howard Chen that he saw zram and sysfs race(ie,
zram block device file is created but sysfs for it isn't yet)
when he tried to create new zram devices via hotadd knob.

v4.20 kernel fixes it by [1, 2] but it's too large size to merge
into -stable so this patch fixes the problem by registering defualt
group by Greg KH's approach[3].

This patch should be applied to every stable tree [3.16+] currently
existing from kernel.org because the problem was introduced at 2.6.37
by [4].

[1] fef912bf860e, block: genhd: add 'groups' argument to device_add_disk
[2] 98af4d4df889, zram: register default groups with device_add_disk()
[3] http://kroah.com/log/blog/2013/06/26/how-to-create-a-sysfs-file-correctly/
[4] 33863c21e69e9, Staging: zram: Replace ioctls with sysfs interface

Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Hannes Reinecke <hare@suse.com>
Tested-by: Howard Chen <howardsoc@google.com>
Signed-off-by: Minchan Kim <minchan@kernel.org>
---
 drivers/block/zram/zram_drv.c | 26 ++++++--------------------
 1 file changed, 6 insertions(+), 20 deletions(-)

diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 1e2648e4c286..27b202c64c84 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -1491,6 +1491,11 @@ static const struct attribute_group zram_disk_attr_group = {
 	.attrs = zram_disk_attrs,
 };
 
+static const struct attribute_group *zram_disk_attr_groups[] = {
+	&zram_disk_attr_group,
+	NULL,
+};
+
 /*
  * Allocate and initialize new zram device. the function returns
  * '>= 0' device_id upon success, and negative value otherwise.
@@ -1568,23 +1573,14 @@ static int zram_add(void)
 	if (ZRAM_LOGICAL_BLOCK_SIZE == PAGE_SIZE)
 		blk_queue_max_write_zeroes_sectors(zram->disk->queue, UINT_MAX);
 
+	disk_to_dev(zram->disk)->groups = zram_disk_attr_groups;
 	add_disk(zram->disk);
 
-	ret = sysfs_create_group(&disk_to_dev(zram->disk)->kobj,
-				&zram_disk_attr_group);
-	if (ret < 0) {
-		pr_err("Error creating sysfs group for device %d\n",
-				device_id);
-		goto out_free_disk;
-	}
 	strlcpy(zram->compressor, default_compressor, sizeof(zram->compressor));
 
 	pr_info("Added device: %s\n", zram->disk->disk_name);
 	return device_id;
 
-out_free_disk:
-	del_gendisk(zram->disk);
-	put_disk(zram->disk);
 out_free_queue:
 	blk_cleanup_queue(queue);
 out_free_idr:
@@ -1612,16 +1608,6 @@ static int zram_remove(struct zram *zram)
 	zram->claim = true;
 	mutex_unlock(&bdev->bd_mutex);
 
-	/*
-	 * Remove sysfs first, so no one will perform a disksize
-	 * store while we destroy the devices. This also helps during
-	 * hot_remove -- zram_reset_device() is the last holder of
-	 * ->init_lock, no later/concurrent disksize_store() or any
-	 * other sysfs handlers are possible.
-	 */
-	sysfs_remove_group(&disk_to_dev(zram->disk)->kobj,
-			&zram_disk_attr_group);
-
 	/* Make sure all the pending I/O are finished */
 	fsync_bdev(bdev);
 	zram_reset_device(zram);
-- 
2.20.0.rc0.387.gc7a69e6b6c-goog


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

* [PATCH for 4.9] zram: close udev startup race condition as default groups
  2018-11-15 17:45 ` Sasha Levin
  2018-11-16 15:48   ` Minchan Kim
  2018-11-23  6:25   ` [PATCH for v4.14] " Minchan Kim
@ 2018-11-23  6:28   ` Minchan Kim
  2018-11-23  6:30   ` [PATCH] [PATCH for v4.4] " Minchan Kim
  2018-11-23  6:30   ` [PATCH] [PATCH for v3.18] " Minchan Kim
  4 siblings, 0 replies; 9+ messages in thread
From: Minchan Kim @ 2018-11-23  6:28 UTC (permalink / raw)
  To: stable
  Cc: Andrew Morton, hare, LKML, sashal, Minchan Kim,
	Sergey Senozhatsky, Howard Chen

commit fef912bf860e upstream.
commit 98af4d4df889 upstream.

I got a report from Howard Chen that he saw zram and sysfs race(ie,
zram block device file is created but sysfs for it isn't yet)
when he tried to create new zram devices via hotadd knob.

v4.20 kernel fixes it by [1, 2] but it's too large size to merge
into -stable so this patch fixes the problem by registering defualt
group by Greg KH's approach[3].

This patch should be applied to every stable tree [3.16+] currently
existing from kernel.org because the problem was introduced at 2.6.37
by [4].

[1] fef912bf860e, block: genhd: add 'groups' argument to device_add_disk
[2] 98af4d4df889, zram: register default groups with device_add_disk()
[3] http://kroah.com/log/blog/2013/06/26/how-to-create-a-sysfs-file-correctly/
[4] 33863c21e69e9, Staging: zram: Replace ioctls with sysfs interface

Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Hannes Reinecke <hare@suse.com>
Tested-by: Howard Chen <howardsoc@google.com>
Signed-off-by: Minchan Kim <minchan@kernel.org>
---
 drivers/block/zram/zram_drv.c | 26 ++++++--------------------
 1 file changed, 6 insertions(+), 20 deletions(-)

diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index b7c0b69a02f5..d64a53d3270a 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -1223,6 +1223,11 @@ static struct attribute_group zram_disk_attr_group = {
 	.attrs = zram_disk_attrs,
 };
 
+static const struct attribute_group *zram_disk_attr_groups[] = {
+	&zram_disk_attr_group,
+	NULL,
+};
+
 /*
  * Allocate and initialize new zram device. the function returns
  * '>= 0' device_id upon success, and negative value otherwise.
@@ -1303,24 +1308,15 @@ static int zram_add(void)
 		zram->disk->queue->limits.discard_zeroes_data = 0;
 	queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, zram->disk->queue);
 
+	disk_to_dev(zram->disk)->groups = zram_disk_attr_groups;
 	add_disk(zram->disk);
 
-	ret = sysfs_create_group(&disk_to_dev(zram->disk)->kobj,
-				&zram_disk_attr_group);
-	if (ret < 0) {
-		pr_err("Error creating sysfs group for device %d\n",
-				device_id);
-		goto out_free_disk;
-	}
 	strlcpy(zram->compressor, default_compressor, sizeof(zram->compressor));
 	zram->meta = NULL;
 
 	pr_info("Added device: %s\n", zram->disk->disk_name);
 	return device_id;
 
-out_free_disk:
-	del_gendisk(zram->disk);
-	put_disk(zram->disk);
 out_free_queue:
 	blk_cleanup_queue(queue);
 out_free_idr:
@@ -1348,16 +1344,6 @@ static int zram_remove(struct zram *zram)
 	zram->claim = true;
 	mutex_unlock(&bdev->bd_mutex);
 
-	/*
-	 * Remove sysfs first, so no one will perform a disksize
-	 * store while we destroy the devices. This also helps during
-	 * hot_remove -- zram_reset_device() is the last holder of
-	 * ->init_lock, no later/concurrent disksize_store() or any
-	 * other sysfs handlers are possible.
-	 */
-	sysfs_remove_group(&disk_to_dev(zram->disk)->kobj,
-			&zram_disk_attr_group);
-
 	/* Make sure all the pending I/O are finished */
 	fsync_bdev(bdev);
 	zram_reset_device(zram);
-- 
2.20.0.rc0.387.gc7a69e6b6c-goog


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

* [PATCH] [PATCH for v4.4] zram: close udev startup race condition as default groups
  2018-11-15 17:45 ` Sasha Levin
                     ` (2 preceding siblings ...)
  2018-11-23  6:28   ` [PATCH for 4.9] " Minchan Kim
@ 2018-11-23  6:30   ` Minchan Kim
  2018-11-23  6:30   ` [PATCH] [PATCH for v3.18] " Minchan Kim
  4 siblings, 0 replies; 9+ messages in thread
From: Minchan Kim @ 2018-11-23  6:30 UTC (permalink / raw)
  To: stable
  Cc: Andrew Morton, hare, LKML, sashal, Minchan Kim,
	Sergey Senozhatsky, Howard Chen

commit fef912bf860e upstream.
commit 98af4d4df889 upstream.

I got a report from Howard Chen that he saw zram and sysfs race(ie,
zram block device file is created but sysfs for it isn't yet)
when he tried to create new zram devices via hotadd knob.

v4.20 kernel fixes it by [1, 2] but it's too large size to merge
into -stable so this patch fixes the problem by registering defualt
group by Greg KH's approach[3].

This patch should be applied to every stable tree [3.16+] currently
existing from kernel.org because the problem was introduced at 2.6.37
by [4].

[1] fef912bf860e, block: genhd: add 'groups' argument to device_add_disk
[2] 98af4d4df889, zram: register default groups with device_add_disk()
[3] http://kroah.com/log/blog/2013/06/26/how-to-create-a-sysfs-file-correctly/
[4] 33863c21e69e9, Staging: zram: Replace ioctls with sysfs interface

Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Hannes Reinecke <hare@suse.com>
Tested-by: Howard Chen <howardsoc@google.com>
Signed-off-by: Minchan Kim <minchan@kernel.org>
---
 drivers/block/zram/zram_drv.c | 26 ++++++--------------------
 1 file changed, 6 insertions(+), 20 deletions(-)

diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 502406c9e6e1..616ee4f9c233 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -1184,6 +1184,11 @@ static struct attribute_group zram_disk_attr_group = {
 	.attrs = zram_disk_attrs,
 };
 
+static const struct attribute_group *zram_disk_attr_groups[] = {
+	&zram_disk_attr_group,
+	NULL,
+};
+
 /*
  * Allocate and initialize new zram device. the function returns
  * '>= 0' device_id upon success, and negative value otherwise.
@@ -1264,15 +1269,9 @@ static int zram_add(void)
 		zram->disk->queue->limits.discard_zeroes_data = 0;
 	queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, zram->disk->queue);
 
+	disk_to_dev(zram->disk)->groups = zram_disk_attr_groups;
 	add_disk(zram->disk);
 
-	ret = sysfs_create_group(&disk_to_dev(zram->disk)->kobj,
-				&zram_disk_attr_group);
-	if (ret < 0) {
-		pr_err("Error creating sysfs group for device %d\n",
-				device_id);
-		goto out_free_disk;
-	}
 	strlcpy(zram->compressor, default_compressor, sizeof(zram->compressor));
 	zram->meta = NULL;
 	zram->max_comp_streams = 1;
@@ -1280,9 +1279,6 @@ static int zram_add(void)
 	pr_info("Added device: %s\n", zram->disk->disk_name);
 	return device_id;
 
-out_free_disk:
-	del_gendisk(zram->disk);
-	put_disk(zram->disk);
 out_free_queue:
 	blk_cleanup_queue(queue);
 out_free_idr:
@@ -1310,16 +1306,6 @@ static int zram_remove(struct zram *zram)
 	zram->claim = true;
 	mutex_unlock(&bdev->bd_mutex);
 
-	/*
-	 * Remove sysfs first, so no one will perform a disksize
-	 * store while we destroy the devices. This also helps during
-	 * hot_remove -- zram_reset_device() is the last holder of
-	 * ->init_lock, no later/concurrent disksize_store() or any
-	 * other sysfs handlers are possible.
-	 */
-	sysfs_remove_group(&disk_to_dev(zram->disk)->kobj,
-			&zram_disk_attr_group);
-
 	/* Make sure all the pending I/O are finished */
 	fsync_bdev(bdev);
 	zram_reset_device(zram);
-- 
2.20.0.rc0.387.gc7a69e6b6c-goog


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

* [PATCH] [PATCH for v3.18] zram: close udev startup race condition as default groups
  2018-11-15 17:45 ` Sasha Levin
                     ` (3 preceding siblings ...)
  2018-11-23  6:30   ` [PATCH] [PATCH for v4.4] " Minchan Kim
@ 2018-11-23  6:30   ` Minchan Kim
  4 siblings, 0 replies; 9+ messages in thread
From: Minchan Kim @ 2018-11-23  6:30 UTC (permalink / raw)
  To: stable
  Cc: Andrew Morton, hare, LKML, sashal, Minchan Kim,
	Sergey Senozhatsky, Howard Chen

commit fef912bf860e upstream.
commit 98af4d4df889 upstream.

I got a report from Howard Chen that he saw zram and sysfs race(ie,
zram block device file is created but sysfs for it isn't yet)
when he tried to create new zram devices via hotadd knob.

v4.20 kernel fixes it by [1, 2] but it's too large size to merge
into -stable so this patch fixes the problem by registering defualt
group by Greg KH's approach[3].

This patch should be applied to every stable tree [3.16+] currently
existing from kernel.org because the problem was introduced at 2.6.37
by [4].

[1] fef912bf860e, block: genhd: add 'groups' argument to device_add_disk
[2] 98af4d4df889, zram: register default groups with device_add_disk()
[3] http://kroah.com/log/blog/2013/06/26/how-to-create-a-sysfs-file-correctly/
[4] 33863c21e69e9, Staging: zram: Replace ioctls with sysfs interface

Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Hannes Reinecke <hare@suse.com>
Tested-by: Howard Chen <howardsoc@google.com>
Signed-off-by: Minchan Kim <minchan@kernel.org>
---
 drivers/block/zram/zram_drv.c | 18 ++++++------------
 1 file changed, 6 insertions(+), 12 deletions(-)

diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 7e94459a489a..5f4e6a3c2dde 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -999,6 +999,11 @@ static struct attribute_group zram_disk_attr_group = {
 	.attrs = zram_disk_attrs,
 };
 
+static const struct attribute_group *zram_disk_attr_groups[] = {
+	&zram_disk_attr_group,
+	NULL,
+};
+
 static int create_device(struct zram *zram, int device_id)
 {
 	int ret = -ENOMEM;
@@ -1060,22 +1065,14 @@ static int create_device(struct zram *zram, int device_id)
 		zram->disk->queue->limits.discard_zeroes_data = 0;
 	queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, zram->disk->queue);
 
+	disk_to_dev(zram->disk)->groups = zram_disk_attr_groups;
 	add_disk(zram->disk);
 
-	ret = sysfs_create_group(&disk_to_dev(zram->disk)->kobj,
-				&zram_disk_attr_group);
-	if (ret < 0) {
-		pr_warn("Error creating sysfs group");
-		goto out_free_disk;
-	}
 	strlcpy(zram->compressor, default_compressor, sizeof(zram->compressor));
 	zram->meta = NULL;
 	zram->max_comp_streams = 1;
 	return 0;
 
-out_free_disk:
-	del_gendisk(zram->disk);
-	put_disk(zram->disk);
 out_free_queue:
 	blk_cleanup_queue(zram->queue);
 out:
@@ -1084,9 +1081,6 @@ static int create_device(struct zram *zram, int device_id)
 
 static void destroy_device(struct zram *zram)
 {
-	sysfs_remove_group(&disk_to_dev(zram->disk)->kobj,
-			&zram_disk_attr_group);
-
 	del_gendisk(zram->disk);
 	put_disk(zram->disk);
 
-- 
2.20.0.rc0.387.gc7a69e6b6c-goog


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

* Re: [PATCH for v4.14] zram: close udev startup race condition as default groups
  2018-11-23  6:25   ` [PATCH for v4.14] " Minchan Kim
@ 2018-11-23 18:50     ` Sasha Levin
  0 siblings, 0 replies; 9+ messages in thread
From: Sasha Levin @ 2018-11-23 18:50 UTC (permalink / raw)
  To: Minchan Kim
  Cc: stable, Andrew Morton, hare, LKML, Sergey Senozhatsky, Howard Chen

On Fri, Nov 23, 2018 at 03:25:50PM +0900, Minchan Kim wrote:
>commit fef912bf860e upstream.
>commit 98af4d4df889 upstream.
>
>I got a report from Howard Chen that he saw zram and sysfs race(ie,
>zram block device file is created but sysfs for it isn't yet)
>when he tried to create new zram devices via hotadd knob.
>
>v4.20 kernel fixes it by [1, 2] but it's too large size to merge
>into -stable so this patch fixes the problem by registering defualt
>group by Greg KH's approach[3].
>
>This patch should be applied to every stable tree [3.16+] currently
>existing from kernel.org because the problem was introduced at 2.6.37
>by [4].
>
>[1] fef912bf860e, block: genhd: add 'groups' argument to device_add_disk
>[2] 98af4d4df889, zram: register default groups with device_add_disk()
>[3] http://kroah.com/log/blog/2013/06/26/how-to-create-a-sysfs-file-correctly/
>[4] 33863c21e69e9, Staging: zram: Replace ioctls with sysfs interface
>
>Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
>Cc: Hannes Reinecke <hare@suse.com>
>Tested-by: Howard Chen <howardsoc@google.com>
>Signed-off-by: Minchan Kim <minchan@kernel.org>

I've queued all 4 to their respective branches, thank you.

--
Thanks,
Sasha

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

end of thread, other threads:[~2018-11-23 18:51 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-11-14  5:52 [PATCH] zram: close udev startup race condition as default groups Minchan Kim
2018-11-14  7:09 ` Hannes Reinecke
2018-11-15 17:45 ` Sasha Levin
2018-11-16 15:48   ` Minchan Kim
2018-11-23  6:25   ` [PATCH for v4.14] " Minchan Kim
2018-11-23 18:50     ` Sasha Levin
2018-11-23  6:28   ` [PATCH for 4.9] " Minchan Kim
2018-11-23  6:30   ` [PATCH] [PATCH for v4.4] " Minchan Kim
2018-11-23  6:30   ` [PATCH] [PATCH for v3.18] " 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).