]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - drivers/lightnvm/core.c
Merge branches 'for-4.11/upstream-fixes', 'for-4.12/accutouch', 'for-4.12/cp2112...
[mirror_ubuntu-artful-kernel.git] / drivers / lightnvm / core.c
index b2cd3d6f2a31e0b5eae7eaf51e433d57a297a559..5262ba66a7a74c94d91d2c5815eb5bf19f2c62a2 100644 (file)
@@ -289,6 +289,9 @@ static int nvm_create_tgt(struct nvm_dev *dev, struct nvm_ioctl_create *create)
        set_capacity(tdisk, tt->capacity(targetdata));
        add_disk(tdisk);
 
+       if (tt->sysfs_init && tt->sysfs_init(tdisk))
+               goto err_sysfs;
+
        t->type = tt;
        t->disk = tdisk;
        t->dev = tgt_dev;
@@ -298,6 +301,9 @@ static int nvm_create_tgt(struct nvm_dev *dev, struct nvm_ioctl_create *create)
        mutex_unlock(&dev->mlock);
 
        return 0;
+err_sysfs:
+       if (tt->exit)
+               tt->exit(targetdata);
 err_init:
        put_disk(tdisk);
 err_queue:
@@ -320,6 +326,9 @@ static void __nvm_remove_target(struct nvm_target *t)
        del_gendisk(tdisk);
        blk_cleanup_queue(q);
 
+       if (tt->sysfs_exit)
+               tt->sysfs_exit(tdisk);
+
        if (tt->exit)
                tt->exit(tdisk->private_data);
 
@@ -1093,9 +1102,14 @@ static int __nvm_configure_create(struct nvm_ioctl_create *create)
        }
        s = &create->conf.s;
 
-       if (s->lun_begin > s->lun_end || s->lun_end > dev->geo.nr_luns) {
+       if (s->lun_begin == -1 && s->lun_end == -1) {
+               s->lun_begin = 0;
+               s->lun_end = dev->geo.nr_luns - 1;
+       }
+
+       if (s->lun_begin > s->lun_end || s->lun_end >= dev->geo.nr_luns) {
                pr_err("nvm: lun out of bound (%u:%u > %u)\n",
-                       s->lun_begin, s->lun_end, dev->geo.nr_luns);
+                       s->lun_begin, s->lun_end, dev->geo.nr_luns - 1);
                return -EINVAL;
        }