From mboxrd@z Thu Jan 1 00:00:00 1970 From: Patrick Mansfield Date: Wed, 23 Jun 2004 20:31:39 +0000 Subject: [PATCH] update udev scsi_id to scsi_id 0.5 Message-Id: <20040623133139.A27025@beaverton.ibm.com> List-Id: References: <20040116114859.A8548@beaverton.ibm.com> In-Reply-To: <20040116114859.A8548@beaverton.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: linux-hotplug@vger.kernel.org Hi - Greg can you please apply? Patch against current udev bk. This patch syncs the scsi_id in the udev tree to version 0.5. diff -uprN -X /home/patman/dontdiff udev-bk/extras/orig-scsi_id/ChangeLog udev-bk/extras/scsi_id/ChangeLog --- udev-bk/extras/orig-scsi_id/ChangeLog Wed Jun 16 14:39:17 2004 +++ udev-bk/extras/scsi_id/ChangeLog Wed Jun 23 11:58:56 2004 @@ -1,3 +1,42 @@ +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. + +2004-jun-17: + * Makefile: Olaf Hering add spotless target (already in udev). + +2004-jun-17: + * scsi_serial.c: Include linux/compiler.h so we can build with + klibc using kernel headers. + +2004-may-24: + * scsi_id.c: Rename major and minor to maj min to avoid compiler + warnings when compiled with -D_GNU_SOURCE. + +2004-mar-30: + * scsi_id.config: Minor wording changes + +2004-mar-30: + * scsi_id.h: Don't supply a makedev() when built under klibc. + +2004-mar-30: + * scsi_id.c: Ken Brush Have the command line + options override generic options. + +2004-mar-05: + * scsi_serial.c: Log INQUIRY failure, including the + failing page code and vpd values. And add a dprintf() to + the scsi_inquiry function. + +2004-mar-02: + * gen_scsi_id_udev_rules.sh: Per bug report from Atul Sabharwal + change to not require that sysfs be + in the mount tab (and default to "/sys"), and fix so scsi_id + results containing spaces work correctly. + +2004-mar-02: + * scsi_id.8: Escape '-' with '\-'. + 2004-feb-25: * scsi_id.8: Add verbage about usage with udev, and running via hotplug. diff -uprN -X /home/patman/dontdiff udev-bk/extras/orig-scsi_id/Makefile udev-bk/extras/scsi_id/Makefile --- udev-bk/extras/orig-scsi_id/Makefile Wed Jun 16 14:39:17 2004 +++ udev-bk/extras/scsi_id/Makefile Thu Jun 17 14:46:46 2004 @@ -14,7 +14,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -SCSI_ID_VERSION=0.4 +SCSI_ID_VERSION=0.5 prefix etcdir = ${prefix}/etc @@ -71,5 +71,6 @@ clean: rm -f $(PROG) $(OBJS) $(GEN_HEADER) spotless: clean + $(PROG): $(OBJS) $(LD) $(LDFLAGS) -o $(PROG) $(CRT0) $(OBJS) $(SYSFS) $(LIB_OBJS) $(ARCH_LIB_OBJS) diff -uprN -X /home/patman/dontdiff udev-bk/extras/orig-scsi_id/TODO udev-bk/extras/scsi_id/TODO --- udev-bk/extras/orig-scsi_id/TODO Wed Jun 16 14:39:17 2004 +++ udev-bk/extras/scsi_id/TODO Mon May 24 14:55:39 2004 @@ -1,6 +1,9 @@ -- Document that config file options override command line options, or fix - the code. This means a '-b' in the config file disables any -g on the - command line. +- 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. - Add code to check that SCSI commands get back enough data for their intended usage, mainly callers of scsi_inquiry(). diff -uprN -X /home/patman/dontdiff udev-bk/extras/orig-scsi_id/gen_scsi_id_udev_rules.sh udev-bk/extras/scsi_id/gen_scsi_id_udev_rules.sh --- udev-bk/extras/orig-scsi_id/gen_scsi_id_udev_rules.sh Wed Jun 16 14:39:17 2004 +++ udev-bk/extras/scsi_id/gen_scsi_id_udev_rules.sh Tue Mar 2 16:35:19 2004 @@ -27,22 +27,12 @@ prefix=disk- scsi_id=/sbin/scsi_id -dump_ids() -{ - cd ${sysfs_dir}/block - for b in sd* - do - echo -n "$b " - $scsi_id -s /block/$b - if [ $? != 0 ] - then - echo $0 failed for device $b >&2 - exit 1 - fi - done -} - sysfs_dir=$(mount | awk '$5 = "sysfs" {print $3}') +if [ "$sysfs_dir" = "" ] +then + sysfs_dir="/sys" + echo "Using sysfs mount point \"$sysfs_dir\"" >&2 +fi c=$(ls /${sysfs_dir}/block/sd* 2>/dev/null | wc -l) if [ $c = 0 ] @@ -56,12 +46,17 @@ echo "# Start of autogenerated scsi_id r echo "# rules to your liking." echo "#" first_line=yes -dump_ids | while read in + +# +cd ${sysfs_dir}/block +for name in sd* do - set $in - name=$1 - shift - id="$*" + id=$($scsi_id -s /block/$name) + if [ $? != 0 ] + then + echo $0 failed for device $name exiting >&2 + exit 1 + fi if [ $first_line = "yes" ] then first_line=no diff -uprN -X /home/patman/dontdiff udev-bk/extras/orig-scsi_id/release-notes udev-bk/extras/scsi_id/release-notes --- udev-bk/extras/orig-scsi_id/release-notes Wed Jun 16 14:39:17 2004 +++ udev-bk/extras/scsi_id/release-notes Wed Jun 23 12:14:25 2004 @@ -1,49 +1,42 @@ -Version 0.4 of scsi_id is available at: +Version 0.5 of scsi_id is available at: -http://www-124.ibm.com/storageio/scsi_id/scsi_id-0.4.tar.gz +http://www-124.ibm.com/storageio/scsi_id/scsi_id-0.5.tar.gz scsi_id is a program to generate a unique identifier for a given SCSI device. -It is primarily for use with the udev callout key. It could also be used -for automatic multi-path configuration or device mapper configuration. +It is primarily for use with the udev program key, or hotplug scripts that +want persistent naming of scsi devices. It could also be used for +automatic multi-path configuration or device mapper configuration. -Version 0.4 requires: +Version 0.5 requires: - Linux kernel 2.6 - libsysfs 0.4.0 Major changes since the last release: - - Support block device partitions + - Ken Brush have the command line options + override generic options. - - Added a script to auto-generate udev rules. The script is not - installed but is part of the tarball. + - Fix the gen_scsi_id_udev_rules.sh to handle spaces in the id. -Detailed changes: + - Don't supply a makedev() when built with klibc. Also, the + scsi_id supplied makedev() was using the old major/minor method. - - Add man page verbage about usage with udev, and running via - hotplug + - Include compiler.h so we can build against klibc, as recent sg.h + changes need a define for __user. - - Disable support for -e (all output to stderr) as it cannot be - used in any useful way, and the -c (device specific callout) as - the code is incomplete and has no users. +Other changes: - - Don't print errno for NULL return from sysfs_get_classdev_device. + - Increase the MAX_SERIAL_LEN from 128 to 256, as some (possibly + broken devics) are returning very long id's - - Get rid of dead/leftover code that checked if we are on a scsi - bus. + - Add spotless target (via Olaf Hering's udev patch) - - ":" consistently in output messages. + - minor wording changes in scsi_id.config - - Add missing new lines for some error messages. + - Log INQUIRY failure, including the failing page code and vpd + values - - open O_NONBLOCK so we handle tape drives without tapes loaded. - - - Remove hacks based on KLIBC define to get around problems when - building with udev (udev libsysfs files were rearranged). - - - As done in udev code, support partitions via looking for a - parent of the target path. Uses libsysfs functions to do most of - the work, and includes changing a lot of variables to be struct - sysfs_device instead of sysfs_class_device. + - Escape '-' with '\-' in the man page. diff -uprN -X /home/patman/dontdiff udev-bk/extras/orig-scsi_id/scsi_id.8 udev-bk/extras/scsi_id/scsi_id.8 --- udev-bk/extras/orig-scsi_id/scsi_id.8 Wed Jun 16 14:39:17 2004 +++ udev-bk/extras/scsi_id/scsi_id.8 Tue Mar 2 16:32:42 2004 @@ -12,12 +12,12 @@ all SCSI devices that properly support p If a result is generated it is sent to standard output, and the program exits with a zero value. If no identifier is output, the program exits -with a non-zero value. +with a non\-zero value. \fBscsi_id\fP is primarily for use by other utilities such as \fBudev\fP that require a unique SCSI identifier. -By default all devices are assume black listed, the \fB-g\fP option must +By default all devices are assume black listed, the \fB\-g\fP option must be specified on the command line or in the config file for any useful behaviour. @@ -58,18 +58,18 @@ mode, and expects the environment variab corresponding sysfs device. See section below on usage with \fBudev\fP. .TP .BI \-b -The default behaviour - treat the device as black listed, and do nothing -unless a white listed device is found in the scsi_id config-file. +The default behaviour \- treat the device as black listed, and do nothing +unless a white listed device is found in the scsi_id config\-file. .TP .BI \-d "\| device\^" Instead of determining and creating a device node based on a sysfs dev -entry as done for the \fB-s\fP, send SG_IO commands to +entry as done for the \fB\-s\fP, send SG_IO commands to \fBdevice\fP, such as \fB/dev/sdc\fP. .TP -.BI \-f "\| config-file" +.BI \-f "\| config\-file" Read configuration and black/white list entries from -.B config-file +.B config\-file rather than the default .B /etc/scsi_id.config file. @@ -89,9 +89,9 @@ Use SCSI INQUIRY VPD page code 0x80 or 0 query the available VPD pages, and use page 0x83 if found, else page 0x80 if found, else nothing. .TP -.BI \-s "\| sysfs-device" +.BI \-s "\| sysfs\-device" Generate an id for the -.B sysfs-device. +.B sysfs\-device. The sysfs mount point must not be included. For example, use /block/sd, not /sys/block/sd. .TP @@ -113,7 +113,7 @@ and the results will likely not be as ex When in this mode, all errors and warnings are sent via syslog. -To determine the specific value needed in a RESULT key, use the -s option, +To determine the specific value needed in a RESULT key, use the \-s option, for example: .sp diff -uprN -X /home/patman/dontdiff udev-bk/extras/orig-scsi_id/scsi_id.c udev-bk/extras/scsi_id/scsi_id.c --- udev-bk/extras/orig-scsi_id/scsi_id.c Wed Jun 16 14:39:17 2004 +++ udev-bk/extras/scsi_id/scsi_id.c Mon May 24 15:14:32 2004 @@ -111,7 +111,7 @@ int sysfs_get_attr(const char *devpath, return sysfs_read_attribute_value(attr_path, value, SYSFS_NAME_LEN); } -static int get_major_minor(const char *devpath, int *major, int *minor) +static int get_major_minor(const char *devpath, int *maj, int *min) { char dev_value[MAX_ATTR_LEN]; @@ -129,7 +129,7 @@ static int get_major_minor(const char *d } dprintf("dev value %s", dev_value); /* dev_value has a trailing \n */ - if (sscanf(dev_value, "%u:%u", major, minor) != 2) { + if (sscanf(dev_value, "%u:%u", maj, min) != 2) { log_message(LOG_WARNING, "%s: invalid dev major/minor\n", devpath); return -1; @@ -140,18 +140,18 @@ static int get_major_minor(const char *d static int create_tmp_dev(const char *devpath, char *tmpdev, int dev_type) { - int major, minor; + int maj, min; dprintf("(%s)\n", devpath); - if (get_major_minor(devpath, &major, &minor)) + if (get_major_minor(devpath, &maj, &min)) return -1; snprintf(tmpdev, MAX_NAME_LEN, "%s/%s-maj%d-min%d-%u", - TMP_DIR, TMP_PREFIX, major, minor, getpid()); + TMP_DIR, TMP_PREFIX, maj, min, getpid()); dprintf("tmpdev '%s'\n", tmpdev); - if (mknod(tmpdev, 0600 | dev_type, makedev(major, minor))) { + if (mknod(tmpdev, 0600 | dev_type, makedev(maj, min))) { log_message(LOG_WARNING, "mknod failed: %s\n", strerror(errno)); return -1; } @@ -759,10 +759,6 @@ int main(int argc, char **argv) strncpy(target_path, sysfs_mnt_path, MAX_NAME_LEN); strncat(target_path, devpath, MAX_NAME_LEN); - } else { - if (set_options(argc, argv, short_options, target_path, - maj_min_dev) < 0) - exit(1); } /* @@ -778,6 +774,11 @@ int main(int argc, char **argv) maj_min_dev) < 0) exit(1); free(newargv); + } + if (!hotplug_mode) { + if (set_options(argc, argv, short_options, target_path, + maj_min_dev) < 0) + exit(1); } if (!sys_specified) { diff -uprN -X /home/patman/dontdiff udev-bk/extras/orig-scsi_id/scsi_id.config udev-bk/extras/scsi_id/scsi_id.config --- udev-bk/extras/orig-scsi_id/scsi_id.config Wed Jun 16 14:39:17 2004 +++ udev-bk/extras/scsi_id/scsi_id.config Tue Mar 30 08:22:38 2004 @@ -9,12 +9,12 @@ # INQUIRY product identification field. Per the SCSI INQUIRY, the vendor # is limited to 8 bytes, model to 16 bytes. # -# The first maching line found is used. Short matches match longer ones, +# The first matching line found is used. Short matches match longer ones, # if you do not want such a match space fill the extra bytes. If no model # is specified, only the vendor string need match. # -# The "option" line is searched when scsi_id first starts up (for use with -# hotplug during boot). +# The "options" line is searched for when scsi_id starts up, and is +# primarily for use with hotplug. # # options= # @@ -32,12 +32,12 @@ options=-b # vendor=someone, model=nicedrive, options=-g -# If you all the scsi devices are your system support valid id's, remove -# the -b line above, and mark all devices as good: +# If you know all the scsi devices on your system support valid id's, +# remove the options=-b line, and mark all devices as good: ## options=-g # Then black list any offenders. Missing entries here could be dangerous -# if you rely on the id for naming or multi-path configuration! +# if you rely on the id for persistent naming or multi-path configuration. ## vendor=ELBONIA, model=borken, options=-b diff -uprN -X /home/patman/dontdiff udev-bk/extras/orig-scsi_id/scsi_id.h udev-bk/extras/scsi_id/scsi_id.h --- udev-bk/extras/orig-scsi_id/scsi_id.h Wed Jun 16 14:39:17 2004 +++ udev-bk/extras/scsi_id/scsi_id.h Wed Jun 23 11:58:56 2004 @@ -37,7 +37,7 @@ * MAX_SERIAL_LEN: the maximum length of the serial number, including * added prefixes such as vendor and product (model) strings. */ -#define MAX_SERIAL_LEN 128 +#define MAX_SERIAL_LEN 256 /* * MAX_BUFFER_LEN: maximum buffer size and line length used while reading @@ -52,10 +52,6 @@ extern int scsi_get_serial (struct sysfs len); extern void log_message (int level, const char *format, ...) __attribute__ ((format (printf, 2, 3))); - -#ifdef __KLIBC__ -#define makedev(major, minor) ((major) << 8) | (minor) -#endif #ifndef u8 typedef unsigned char u8; diff -uprN -X /home/patman/dontdiff udev-bk/extras/orig-scsi_id/scsi_serial.c udev-bk/extras/scsi_id/scsi_serial.c --- udev-bk/extras/orig-scsi_id/scsi_serial.c Wed Jun 16 14:39:17 2004 +++ udev-bk/extras/scsi_id/scsi_serial.c Thu Jun 17 11:29:24 2004 @@ -30,6 +30,7 @@ #include #include #include +#include /* need __user when built via klibc */ #include #include #include "scsi_id.h" @@ -312,6 +313,8 @@ static int scsi_inquiry(struct sysfs_dev buffer = inq + OFFSET; resend: + dprintf("%s evpd %d, page 0x%x\n", scsi_dev->name, evpd, page); + memset(&io_hdr, 0, sizeof(struct sg_io_hdr)); io_hdr.interface_id = 'S'; io_hdr.cmd_len = sizeof(inq_cmd); @@ -351,6 +354,11 @@ resend: } retval = -1; } + + if (retval < 0) + log_message(LOG_WARNING, + "%s: Unable to get INQUIRY vpd %d page 0x%x.\n", + scsi_dev->name, evpd, page); free(inq); return retval; ------------------------------------------------------- This SF.Net email sponsored by Black Hat Briefings & Training. Attend Black Hat Briefings & Training, Las Vegas July 24-29 - digital self defense, top technical experts, no vendor pitches, unmatched networking opportunities. Visit www.blackhat.com _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net Linux-hotplug-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel