diff options
| author | Seymour, Shane M <shane.seymour@hpe.com> | 2015-10-12 00:31:17 -0400 |
|---|---|---|
| committer | James Bottomley <JBottomley@Odin.com> | 2015-11-09 20:17:27 -0500 |
| commit | d9b43a10f0d04564c6e05de3728c3cbba64c644d (patch) | |
| tree | 5661a5a688a92e9260af7e7d5cea0a04acca5cf3 /drivers/scsi | |
| parent | c59ab4e5afade13fdb65efc99c07fb8455aecba5 (diff) | |
st: allow debug output to be enabled or disabled via sysfs
Change st driver to allow enabling or disabling debug output
via sysfs file /sys/bus/scsi/drivers/st/debug_flag.
Previously the only way to enable debug output was:
1. loading the driver with the module parameter debug_flag=1
2. an ioctl call (this method was also the only way to dynamically
disable debug output).
To use the ioctl you need a second tape drive (if you are
actively testing the first tape drive) since a second process
cannot open the first tape drive if it is in use.
The this change is only functional if the value of the macro
DEBUG in st.c is a non-zero value (which it is by default).
Signed-off-by: Shane Seymour <shane.seymour@hpe.com>
Reviewed-by: Laurence Oberman <oberman.l@gmail.com>
Acked-by: Kai Mäkisara <kai.makisara@kolumbus.fi>
Signed-off-by: James Bottomley <JBottomley@Odin.com>
Diffstat (limited to 'drivers/scsi')
| -rw-r--r-- | drivers/scsi/st.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c index b37b9b00c4b4..e0a1e52a04e7 100644 --- a/drivers/scsi/st.c +++ b/drivers/scsi/st.c | |||
| @@ -4452,11 +4452,41 @@ static ssize_t version_show(struct device_driver *ddd, char *buf) | |||
| 4452 | } | 4452 | } |
| 4453 | static DRIVER_ATTR_RO(version); | 4453 | static DRIVER_ATTR_RO(version); |
| 4454 | 4454 | ||
| 4455 | #if DEBUG | ||
| 4456 | static ssize_t debug_flag_store(struct device_driver *ddp, | ||
| 4457 | const char *buf, size_t count) | ||
| 4458 | { | ||
| 4459 | /* We only care what the first byte of the data is the rest is unused. | ||
| 4460 | * if it's a '1' we turn on debug and if it's a '0' we disable it. All | ||
| 4461 | * other values have -EINVAL returned if they are passed in. | ||
| 4462 | */ | ||
| 4463 | if (count > 0) { | ||
| 4464 | if (buf[0] == '0') { | ||
| 4465 | debugging = NO_DEBUG; | ||
| 4466 | return count; | ||
| 4467 | } else if (buf[0] == '1') { | ||
| 4468 | debugging = 1; | ||
| 4469 | return count; | ||
| 4470 | } | ||
| 4471 | } | ||
| 4472 | return -EINVAL; | ||
| 4473 | } | ||
| 4474 | |||
| 4475 | static ssize_t debug_flag_show(struct device_driver *ddp, char *buf) | ||
| 4476 | { | ||
| 4477 | return scnprintf(buf, PAGE_SIZE, "%d\n", debugging); | ||
| 4478 | } | ||
| 4479 | static DRIVER_ATTR_RW(debug_flag); | ||
| 4480 | #endif | ||
| 4481 | |||
| 4455 | static struct attribute *st_drv_attrs[] = { | 4482 | static struct attribute *st_drv_attrs[] = { |
| 4456 | &driver_attr_try_direct_io.attr, | 4483 | &driver_attr_try_direct_io.attr, |
| 4457 | &driver_attr_fixed_buffer_size.attr, | 4484 | &driver_attr_fixed_buffer_size.attr, |
| 4458 | &driver_attr_max_sg_segs.attr, | 4485 | &driver_attr_max_sg_segs.attr, |
| 4459 | &driver_attr_version.attr, | 4486 | &driver_attr_version.attr, |
| 4487 | #if DEBUG | ||
| 4488 | &driver_attr_debug_flag.attr, | ||
| 4489 | #endif | ||
| 4460 | NULL, | 4490 | NULL, |
| 4461 | }; | 4491 | }; |
| 4462 | ATTRIBUTE_GROUPS(st_drv); | 4492 | ATTRIBUTE_GROUPS(st_drv); |
