Hello Kai

Thanks. 

Here is v3

This patch adds a debug_flag parameter that can be set on module load, and 
allows the DEBUG facility without a module recompile.
Note that now DEBUG 1 is the default with this patch.

Usage: modprobe st debug_flag=1

Signed-off-by: Laurence Oberman <lober...@redhat.com>

diff -Nur a/Documentation/scsi/st.txt b/Documentation/scsi/st.txt
--- a/Documentation/scsi/st.txt 2014-10-19 09:36:52.243863716 -0400
+++ b/Documentation/scsi/st.txt 2014-10-19 09:43:19.222863447 -0400
@@ -506,9 +506,11 @@
 
 DEBUGGING HINTS
 
-To enable debugging messages, edit st.c and #define DEBUG 1. As seen
-above, debugging can be switched off with an ioctl if debugging is
-compiled into the driver. The debugging output is not voluminous.
+Debugging code is now compiled in by default but debugging is turned off with 
+the kernel module parameter debug_flag defaulting to 0.
+Debugging can still be switched on and off with an ioctl.
+To enable debug at module load time add debug_flag=1 to the module load 
+options, the debugging output is not voluminous.
 
 If the tape seems to hang, I would be very interested to hear where
 the driver is waiting. With the command 'ps -l' you can see the state

diff -Nur a/drivers/scsi/st.c b/drivers/scsi/st.c
--- a/drivers/scsi/st.c 2014-10-19 09:35:45.673863756 -0400
+++ b/drivers/scsi/st.c 2014-10-19 09:35:30.621863483 -0400
@@ -56,7 +56,8 @@
 
 /* The driver prints some debugging information on the console if DEBUG
    is defined and non-zero. */
-#define DEBUG 0
+#define DEBUG 1
+#define NO_DEBUG 0
 
 #define ST_DEB_MSG  KERN_NOTICE
 #if DEBUG
@@ -80,6 +81,7 @@
 static int try_direct_io = TRY_DIRECT_IO;
 static int try_rdio = 1;
 static int try_wdio = 1;
+static int debug_flag = 0;
 
 static struct class st_sysfs_class;
 static const struct attribute_group *st_dev_groups[];
@@ -100,6 +102,9 @@
 MODULE_PARM_DESC(max_sg_segs, "Maximum number of scatter/gather segments to 
use (256)");
 module_param_named(try_direct_io, try_direct_io, int, 0);
 MODULE_PARM_DESC(try_direct_io, "Try direct I/O between user buffer and tape 
drive (1)");
+module_param_named(debug_flag, debug_flag, int, 0);
+MODULE_PARM_DESC(debug_flag, "Enable DEBUG, same as setting debugging=1");
+
 
 /* Extra parameters for testing */
 module_param_named(try_rdio, try_rdio, int, 0);
@@ -124,6 +129,9 @@
        },
        {
                "try_direct_io", &try_direct_io
+        },
+        {
+                "debug_flag", &debug_flag
        }
 };
 #endif
@@ -4309,6 +4317,10 @@
        printk(KERN_INFO "st: Version %s, fixed bufsize %d, s/g segs %d\n",
                verstr, st_fixed_buffer_size, st_max_sg_segs);
 
+        debugging = (debug_flag > 0) ? debug_flag : NO_DEBUG;
+         if (debugging)
+                printk(KERN_INFO "st: Debugging enabled debug_flag = 
%d\n",debugging);
+
        err = class_register(&st_sysfs_class);
        if (err) {
                pr_err("Unable register sysfs class for SCSI tapes\n");


----- Original Message -----
From: "Kai Mäkisara (Kolumbus)" <kai.makis...@kolumbus.fi>
To: "Laurence Oberman" <lober...@redhat.com>
Cc: "Rob Evers" <rev...@redhat.com>, linux-scsi@vger.kernel.org
Sent: Sunday, October 19, 2014 4:54:10 AM
Subject: Re: [PATCH]: add debug flag parameter for SCSI tape driver - 2nd 
request

Hello,

I am responding to this, but noticed your next, fixed version.

> On 17.10.2014, at 23.20, Laurence Oberman <lober...@redhat.com> wrote:
> 
> Hello Kai
> 
> You have seen this patch before. The first time around, given that we don't 
> enable DEBUG by default, I let it go.
> However we have been looking into defining DEBUG 1 by default here at Redhat 
> and then setting the default to disabled.
> 
> Are you open to considering changing the driver based on this patch.
> i.e. default DEFINE 1 and adding this code with default set to off.
> 
Yes. I certainly think defining DEBUG 1 and changing the default to zero should 
be done if it is useful for supporting users. The runtime overhead is 
negligible and the extra code does not matter nowadays (it did matter, at least 
theoretically, for years ago).

I am not so sure about the module option. When the debugging code is compiled 
in, debugging can be enabled and disabled for each device by the MTIOCTOP ioctl 
(e.g., mtst -f tape_device stsetoptions debug). The module option enables 
debugging for all tape devices. However, if you think this additional module 
option is useful, I am not against it. It does not remove the possibility for 
controlling debugging for each device for those who want to do it that way.

Anyway, you should modify the documentation (Documentation/scsi/st.txt) 
according to the changes.

> Note that with DEBUG 0, as you know you need to change that and recompile. 
> That is exactly what I am trying to avoid with Enterprise customers.
> 
I have also noticed this when someone has asked me about some tape problems.

> This patch adds a debug_flag parameter that can be set on module load, and 
> allows the DEBUG facility without a module recompile.
> Note that now DEBUG 1 is the default with this patch.
> 
> Usage: modprobe st debug_flag=1
> 
> Signed-off-by: Laurence Oberman <lober...@redhat.com>
> 
> diff -Nur a/st.c b/st.c
> --- a/st.c    2014-10-17 16:15:54.103810627 -0400
> +++ b/st.c    2014-10-17 16:22:12.303810392 -0400
> @@ -56,7 +56,7 @@
> 
> /* The driver prints some debugging information on the console if DEBUG
>    is defined and non-zero. */
> -#define DEBUG 0
> +#define DEBUG 1
> 
> #define ST_DEB_MSG  KERN_NOTICE
> #if DEBUG
> @@ -80,6 +80,7 @@
> static int try_direct_io = TRY_DIRECT_IO;
> static int try_rdio = 1;
> static int try_wdio = 1;
> +static int debug_flag = 0;
> 
> static struct class st_sysfs_class;
> static const struct attribute_group *st_dev_groups[];
> @@ -100,6 +101,9 @@
> MODULE_PARM_DESC(max_sg_segs, "Maximum number of scatter/gather segments to 
> use (256)");
> module_param_named(try_direct_io, try_direct_io, int, 0);
> MODULE_PARM_DESC(try_direct_io, "Try direct I/O between user buffer and tape 
> drive (1)");
> +module_param_named(debug_flag, debug_flag, int, 0);
> +MODULE_PARM_DESC(debug_flag, "Enable DEBUG, same as setting debugging=1");
> +
> 
> /* Extra parameters for testing */
> module_param_named(try_rdio, try_rdio, int, 0);
> @@ -124,6 +128,9 @@
>       },
>       {
>               "try_direct_io", &try_direct_io
> +        },
> +        {
> +                "debug_flag", &debug_flag
>       }
> };
> #endif
> @@ -4306,6 +4313,11 @@
> 
>       validate_options();
> 
> +        debugging = (debug_flag > 0) ? debug_flag : DEBUG;
> +         if (debugging)
> +                printk(KERN_INFO "st: Debugging enabled debug_flag = 
> %d\n",debugging);
> +
> +

I think you have an extra newline here?

I also think that the kernel log would look nicer if the print below would be 
before setting the option. The driver would introduce itself first and print 
the debug flag status after that.

>       printk(KERN_INFO "st: Version %s, fixed bufsize %d, s/g segs %d\n",
>               verstr, st_fixed_buffer_size, st_max_sg_segs);

Thanks,
Kai

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to