The function nullb_device_power_store() returns -ENOMEM when null_add_dev() fails. null_add_dev() can fail with return value other than -ENOMEM such as -EINVAL when Zoned Block Device option is used, see : nullb_device_power_store() null_add_dev() null_init_zoned_dev() return -EINVAL; When trying to load the module having -ENOMEM value returned on the command line creates confusion when pleanty of memory is free on the machine. Instead of hardcoding -ENOMEM return the value of null_add_dev() function. Signed-off-by: Chaitanya Kulkarni <kch@xxxxxxxxxx> --- * without this patch nr_zones set to 23 :- loading devices ++ seq 0 1 + for i in `seq 0 $NN` + NULLB_DIR=config/nullb/nullb0 + mkdir config/nullb/nullb0 + echo 1 + echo 23 + echo 0 + echo 1 + echo 512 + echo 2048 + echo 1 ./nullbtests.sh: line 23: echo: write error: Cannot allocate memory * with this patch nr_zones set to 23 :- + for i in `seq 0 $NN` + NULLB_DIR=config/nullb/nullb1 + mkdir config/nullb/nullb1 + echo 1 + echo 23 + echo 1 + echo 512 + echo 2048 + echo 1 ./nullbtests.sh: line 23: echo: write error: Invalid argument --- drivers/block/null_blk/main.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/block/null_blk/main.c b/drivers/block/null_blk/main.c index 323af5c9c802..1666bd9c4ad7 100644 --- a/drivers/block/null_blk/main.c +++ b/drivers/block/null_blk/main.c @@ -431,9 +431,10 @@ static ssize_t nullb_device_power_store(struct config_item *item, if (!dev->power && newp) { if (test_and_set_bit(NULLB_DEV_FL_UP, &dev->flags)) return count; - if (null_add_dev(dev)) { + ret = null_add_dev(dev); + if (ret) { clear_bit(NULLB_DEV_FL_UP, &dev->flags); - return -ENOMEM; + return ret; } set_bit(NULLB_DEV_FL_CONFIGURED, &dev->flags); -- 2.29.0