]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/scsi/st.c
Merge branch 'linux-4.4' of https://github.com/skeggsb/linux into drm-fixes
[karo-tx-linux.git] / drivers / scsi / st.c
index b37b9b00c4b460ca97b44720d5aee1405c2d89ef..2e522951b619740b08a712695dfca31962b16de0 100644 (file)
@@ -4083,6 +4083,7 @@ static int create_one_cdev(struct scsi_tape *tape, int mode, int rew)
        }
        cdev->owner = THIS_MODULE;
        cdev->ops = &st_fops;
+       STm->cdevs[rew] = cdev;
 
        error = cdev_add(cdev, cdev_devno, 1);
        if (error) {
@@ -4091,7 +4092,6 @@ static int create_one_cdev(struct scsi_tape *tape, int mode, int rew)
                pr_err("st%d: Device not attached.\n", dev_num);
                goto out_free;
        }
-       STm->cdevs[rew] = cdev;
 
        i = mode << (4 - ST_NBR_MODE_BITS);
        snprintf(name, 10, "%s%s%s", rew ? "n" : "",
@@ -4110,8 +4110,9 @@ static int create_one_cdev(struct scsi_tape *tape, int mode, int rew)
        return 0;
 out_free:
        cdev_del(STm->cdevs[rew]);
-       STm->cdevs[rew] = NULL;
 out:
+       STm->cdevs[rew] = NULL;
+       STm->devs[rew] = NULL;
        return error;
 }
 
@@ -4452,11 +4453,41 @@ static ssize_t version_show(struct device_driver *ddd, char *buf)
 }
 static DRIVER_ATTR_RO(version);
 
+#if DEBUG
+static ssize_t debug_flag_store(struct device_driver *ddp,
+       const char *buf, size_t count)
+{
+/* We only care what the first byte of the data is the rest is unused.
+ * if it's a '1' we turn on debug and if it's a '0' we disable it. All
+ * other values have -EINVAL returned if they are passed in.
+ */
+       if (count > 0) {
+               if (buf[0] == '0') {
+                       debugging = NO_DEBUG;
+                       return count;
+               } else if (buf[0] == '1') {
+                       debugging = 1;
+                       return count;
+               }
+       }
+       return -EINVAL;
+}
+
+static ssize_t debug_flag_show(struct device_driver *ddp, char *buf)
+{
+       return scnprintf(buf, PAGE_SIZE, "%d\n", debugging);
+}
+static DRIVER_ATTR_RW(debug_flag);
+#endif
+
 static struct attribute *st_drv_attrs[] = {
        &driver_attr_try_direct_io.attr,
        &driver_attr_fixed_buffer_size.attr,
        &driver_attr_max_sg_segs.attr,
        &driver_attr_version.attr,
+#if DEBUG
+       &driver_attr_debug_flag.attr,
+#endif
        NULL,
 };
 ATTRIBUTE_GROUPS(st_drv);