* Re: + zram-rework-reset-and-destroy-path-fix.patch added to -mm tree [not found] <54d155bf.k9GCVwDVqT17beYC%akpm@linux-foundation.org> @ 2015-02-04 1:07 ` Sergey Senozhatsky 2015-02-04 22:29 ` Andrew Morton 0 siblings, 1 reply; 4+ messages in thread From: Sergey Senozhatsky @ 2015-02-04 1:07 UTC (permalink / raw) To: linux-kernel Cc: akpm, jmarchan, minchan, ngupta, opensource.ganesh, sergey.senozhatsky, mm-commits On (02/03/15 15:11), akpm@linux-foundation.org wrote: > tweak comment > Thank you, sir. Andrew, can you please squash the following patch? --- >From 22f0be96df55513a3d764ea880d5b3e99669f8f7 Mon Sep 17 00:00:00 2001 From: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Date: Wed, 4 Feb 2015 09:59:06 +0900 Subject: [PATCH] zram: set default dev_id value to zero in zram_init() 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. Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> --- drivers/block/zram/zram_drv.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 79c5da9..0bb4fa0 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -1138,12 +1138,12 @@ static void destroy_devices(unsigned int nr) kfree(zram_devices); unregister_blkdev(zram_major, "zram"); - pr_debug("Destroyed %u device(s)\n", nr); + pr_info("Destroyed %u device(s)\n", nr); } static int __init zram_init(void) { - int ret, dev_id; + int ret = -ENOMEM, dev_id = 0; if (num_devices > max_num_devices) { pr_warn("Invalid value for num_devices: %u\n", @@ -1159,10 +1159,8 @@ 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) { - ret = -ENOMEM; + if (!zram_devices) goto out_error; - } for (dev_id = 0; dev_id < num_devices; dev_id++) { ret = create_device(&zram_devices[dev_id], dev_id); -- 2.3.0.rc2 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: + zram-rework-reset-and-destroy-path-fix.patch added to -mm tree 2015-02-04 1:07 ` + zram-rework-reset-and-destroy-path-fix.patch added to -mm tree Sergey Senozhatsky @ 2015-02-04 22:29 ` Andrew Morton 2015-02-05 0:20 ` Sergey Senozhatsky 2015-02-05 0:36 ` Sergey Senozhatsky 0 siblings, 2 replies; 4+ messages in thread From: Andrew Morton @ 2015-02-04 22:29 UTC (permalink / raw) To: Sergey Senozhatsky Cc: linux-kernel, jmarchan, minchan, ngupta, opensource.ganesh, sergey.senozhatsky, mm-commits 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; } _ ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: + zram-rework-reset-and-destroy-path-fix.patch added to -mm tree 2015-02-04 22:29 ` Andrew Morton @ 2015-02-05 0:20 ` Sergey Senozhatsky 2015-02-05 0:36 ` Sergey Senozhatsky 1 sibling, 0 replies; 4+ messages in thread From: Sergey Senozhatsky @ 2015-02-05 0:20 UTC (permalink / raw) To: Andrew Morton Cc: Sergey Senozhatsky, linux-kernel, jmarchan, minchan, ngupta, opensource.ganesh, sergey.senozhatsky, mm-commits Hello, sorry for late response On (02/04/15 14:29), Andrew Morton wrote: > 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; we need to rollback `zram_major = register_blkdev(0, "zram");' which is done in destroy_devices(). -ss ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: + zram-rework-reset-and-destroy-path-fix.patch added to -mm tree 2015-02-04 22:29 ` Andrew Morton 2015-02-05 0:20 ` Sergey Senozhatsky @ 2015-02-05 0:36 ` Sergey Senozhatsky 1 sibling, 0 replies; 4+ messages in thread From: Sergey Senozhatsky @ 2015-02-05 0:36 UTC (permalink / raw) To: Andrew Morton Cc: Sergey Senozhatsky, linux-kernel, jmarchan, minchan, ngupta, opensource.ganesh, sergey.senozhatsky, mm-commits On (02/04/15 14:29), Andrew Morton wrote: > which yields > /* not sure if my previous email has been delived, seems there are some connectivity problems on my side */ we need to unregister_blkdev(), 'out' label does not do it. how about the following one (looks simple): > 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_error; + unregister_blkdev(zram_major, "zram"); + return -ENOMEM; > } > > 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; > } ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-02-05 0:36 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <54d155bf.k9GCVwDVqT17beYC%akpm@linux-foundation.org> 2015-02-04 1:07 ` + zram-rework-reset-and-destroy-path-fix.patch added to -mm tree Sergey Senozhatsky 2015-02-04 22:29 ` Andrew Morton 2015-02-05 0:20 ` Sergey Senozhatsky 2015-02-05 0:36 ` Sergey Senozhatsky
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).