lkml.org 
[lkml]   [2015]   [Feb]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: + zram-rework-reset-and-destroy-path-fix.patch added to -mm tree
On Wed, 4 Feb 2015 10:07:20 +0900 Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> wrote:

> Set dev_id to zero and fix zram_devices allocation error handling
> path, can pass uninit dev_id to destroy_devices().
>
> cosmetic:
> change destroy_devices() message from pr_debug() to pr_info(), as
> proposed by Minchan Kim.
>

Seems unnecessarily complicated. What about

--- a/drivers/block/zram/zram_drv.c~zram-rework-reset-and-destroy-path-fix-2-fix
+++ a/drivers/block/zram/zram_drv.c
@@ -1141,7 +1141,8 @@ static void destroy_devices(unsigned int

static int __init zram_init(void)
{
- int ret = -ENOMEM, dev_id = 0;
+ int ret;
+ int dev_id;

if (num_devices > max_num_devices) {
pr_warn("Invalid value for num_devices: %u\n",
@@ -1157,20 +1158,23 @@ static int __init zram_init(void)

/* Allocate the device array and initialize each one */
zram_devices = kzalloc(num_devices * sizeof(struct zram), GFP_KERNEL);
- if (!zram_devices)
- goto out_error;
+ if (!zram_devices) {
+ ret = -ENOMEM;
+ goto out;
+ }

for (dev_id = 0; dev_id < num_devices; dev_id++) {
ret = create_device(&zram_devices[dev_id], dev_id);
if (ret)
- goto out_error;
+ goto out_devices;
}

pr_info("Created %u device(s)\n", num_devices);
return 0;

-out_error:
+out_devices:
destroy_devices(dev_id);
+out:
return ret;
}

which yields
static int __init zram_init(void)
{
int ret;
int dev_id;
if (num_devices > max_num_devices) {
pr_warn("Invalid value for num_devices: %u\n",
num_devices);
return -EINVAL;
}
zram_major = register_blkdev(0, "zram");
if (zram_major <= 0) {
pr_warn("Unable to get major number\n");
return -EBUSY;
}
/* Allocate the device array and initialize each one */
zram_devices = kzalloc(num_devices * sizeof(struct zram), GFP_KERNEL);
if (!zram_devices) {
ret = -ENOMEM;
goto out;
}
for (dev_id = 0; dev_id < num_devices; dev_id++) {
ret = create_device(&zram_devices[dev_id], dev_id);
if (ret)
goto out_devices;
}
pr_info("Created %u device(s)\n", num_devices);
return 0;

out_devices:
destroy_devices(dev_id);
out:
return ret;
}

_



\
 
 \ /
  Last update: 2015-02-04 23:41    [W:0.129 / U:0.196 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site