[dm-devel] scsi_id output & multipath
christophe.varoqui at free.fr
christophe.varoqui at free.fr
Tue Jul 20 17:42:15 UTC 2004
diff -urN scsi_id-0.5/ChangeLog scsi_id-0.5-dense_id/ChangeLog
--- scsi_id-0.5/ChangeLog 2004-06-23 20:58:56.000000000 +0200
+++ scsi_id-0.5-dense_id/ChangeLog 2004-07-20 19:05:12.000000000 +0200
@@ -1,3 +1,7 @@
+2004-jul-20:
+ * scsi_id.c: add a -u flag to reformat serial output in order
+ to let others use that as a device name
+
2004-jun-23:
* scsi_id.h: increase MAX_SERIAL_LEN from 128 to 256, as some
devices (maybe broken ones) are giving really long id's.
diff -urN scsi_id-0.5/scsi_id.8 scsi_id-0.5-dense_id/scsi_id.8
--- scsi_id-0.5/scsi_id.8 2004-03-03 01:32:42.000000000 +0100
+++ scsi_id-0.5-dense_id/scsi_id.8 2004-07-20 19:39:27.000000000 +0200
@@ -95,6 +95,9 @@
The sysfs mount point must not be included. For example, use /block/sd,
not /sys/block/sd.
.TP
+.BI \-u
+Reformat the output : replace all whitespaces by underscores
+.TP
.BI \-v
Generate verbose debugging output.
.TP
diff -urN scsi_id-0.5/scsi_id.c scsi_id-0.5-dense_id/scsi_id.c
--- scsi_id-0.5/scsi_id.c 2004-05-25 00:14:32.000000000 +0200
+++ scsi_id-0.5-dense_id/scsi_id.c 2004-07-20 19:37:01.000000000 +0200
@@ -52,7 +52,7 @@
* options are not supported, but other code is still left in place for
* now.
*/
-static const char short_options[] = "bd:f:gip:s:vV";
+static const char short_options[] = "bd:f:gip:s:vVu";
/*
* Just duplicate per dev options.
*/
@@ -70,6 +70,7 @@
static int use_stderr;
static int debug;
static int hotplug_mode;
+static int reformat_serial;
void log_message (int level, const char *format, ...)
{
@@ -469,6 +470,10 @@
strncat(target, optarg, MAX_NAME_LEN);
break;
+ case 'u':
+ reformat_serial = 1;
+ break;
+
case 'v':
debug++;
break;
@@ -573,6 +578,23 @@
}
/*
+ * format_serial: replace to whitespaces by underscores for calling
+ * programs that use the serial for device naming (multipath, Suse
+ * naming, etc...)
+ */
+static void format_serial(char *serial)
+{
+ char *p = serial;
+
+ while (*p != '\0') {
+ if (isspace(*p))
+ *p = '_';
+ p++;
+ }
+ return;
+}
+
+/*
* scsi_id: try to get an id, if one is found, printf it to stdout.
* returns a value passed to exit() - 0 if printed an id, else 1. This
* could be expanded, for example, if we want to report a failure like no
@@ -703,6 +725,8 @@
retval = 0;
}
if (!retval) {
+ if (reformat_serial)
+ format_serial(serial);
if (display_bus_id)
printf("%s: ", scsi_dev->name);
printf("%s", serial);
diff -urN scsi_id-0.5/TODO scsi_id-0.5-dense_id/TODO
--- scsi_id-0.5/TODO 2004-05-24 23:55:39.000000000 +0200
+++ scsi_id-0.5-dense_id/TODO 2004-07-20 19:05:37.000000000 +0200
@@ -1,6 +1,3 @@
-- Add an option to replace blanks with spaces, so the generated id can be
- more easily used as a /dev name.
-
- Add a bus white/black list option. So for example, all scsi devices
under USB could easily be blacklisted. This should allow multiple busses
to be listed.
Selon Patrick Mansfield <patmans at us.ibm.com>:
> On Tue, Jul 20, 2004 at 09:55:19AM -0700, Patrick Mansfield wrote:
> > [adding linux-scsi to cc]
>
> Augh, with the correct linux-scsi address.
>
> > On Tue, Jul 20, 2004 at 06:38:31PM +0200, christophe.varoqui at free.fr wrote:
> > > Selon Patrick Mansfield <patmans at us.ibm.com>:
> > >
> > > > Christophe -
> > > >
> > > > On Tue, Jul 20, 2004 at 02:48:10PM +0200, christophe.varoqui at free.fr
> wrote:
> > > > > Hello,
> > > > >
> > > > > the multipath config tool names the devmaps after the uid fetch by
> scsi_id.
> > > > > When such uid is a wwid, everything is well. But when this uid is a
> > > > composite
> > > > > aggregate of diverse info, like with JBODs or direct attached SCSI
> disks,
> > > > the
> > > > > spaces between uid components are problematic.
> > > > >
> > > > > devmap creation should be ok with these spaces, but common usage will
> be
> > > > > compromised (ie mount "/dev/SSEAGATE ST336607LC
> 3JA7LHRB00007441H8FQ"
> > > > /mnt)
> > > > >
> > > > > do you consider packing scsi_id output, or should I do this myself ?
> > > >
> > > > Don't pack it, as that could cause problems (unlikely but possible name
> > > > collisions), just substitute underlines for spaces, either in your
> > > > multipath program, or better send a patch for scsi_id.
> > > >
> > >
> > > is this ok with you ?
> >
> > Yes, but add a new option, -u. Defaulting to the current behaviour (no
> > underline), so we can get both and are backwards compatible.
> >
> > > diff -urN scsi_id-0.5/scsi_id.c scsi_id-0.5-dense_id/scsi_id.c
> > > --- scsi_id-0.5/scsi_id.c 2004-05-25 00:14:32.000000000 +0200
> > > +++ scsi_id-0.5-dense_id/scsi_id.c 2004-07-20 18:35:49.000000000
> +0200
> > > @@ -573,6 +573,23 @@
> > > }
> > >
> > > /*
> > > + * format_serial: replace to whitespaces by underscores for calling
> > > + * programs that use the serial for device naming (multipath, Suse
> > > + * naming, etc...)
> > > + */
> > > +static void format_serial(char *serial)
> > > +{
> > > + char *p = serial;
> > > +
> > > + while (*p != '\0') {
> > > + if (isspace(*p))
> > > + *p = '_';
> > > + p++;
> > > + }
> > > + return;
> > > +}
> > > +
> > > +/*
> > > * scsi_id: try to get an id, if one is found, printf it to stdout.
> > > * returns a value passed to exit() - 0 if printed an id, else 1. This
> > > * could be expanded, for example, if we want to report a failure like
> no
> > > @@ -703,6 +720,7 @@
> > > retval = 0;
> > > }
> > > if (!retval) {
> > > + format_serial(serial);
> > > if (display_bus_id)
> > > printf("%s: ", scsi_dev->name);
> > > printf("%s", serial);
> --
> dm-devel mailing list
> dm-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/dm-devel
>
--
More information about the dm-devel
mailing list