mirror of
https://github.com/systemd/systemd.git
synced 2025-03-22 06:50:18 +03:00
[PATCH] scsi_id changes for use with udev %N and %p
Changes to scsi_id to support the udev %N and %p substitutions: - Update version from .7 to .8 - change TMP_DIR back to /tmp - if DEVPATH is set assume hotplug_mode (use syslog for logging, and does not output some warnings) - Always output a newline after the id is printed - Allow command line options to override settings when hotplug_mode is set - update man page - update generator script to use the %N and %p substitutions.
This commit is contained in:
parent
20da7623c7
commit
07544a93d6
@ -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.7
|
||||
SCSI_ID_VERSION=0.8
|
||||
|
||||
prefix =
|
||||
etcdir = ${prefix}/etc
|
||||
|
@ -60,7 +60,7 @@ do
|
||||
if [ $first_line = "yes" ]
|
||||
then
|
||||
first_line=no
|
||||
echo "BUS=\"scsi\", PROGRAM=\"${scsi_id}\", RESULT=\"${id}\", NAME=\"${prefix}${name}%n\""
|
||||
echo "BUS=\"scsi\", PROGRAM=\"${scsi_id} -d %N -s %p\", RESULT=\"${id}\", NAME=\"${prefix}${name}%n\""
|
||||
echo
|
||||
echo "# Further RESULT keys use the result of the last PROGRAM rule."
|
||||
echo "# Be careful not to add any rules containing PROGRAM key between here"
|
||||
|
@ -53,9 +53,10 @@ identifier starts with the NAA value of 6):
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.BI subsystem
|
||||
When called with only a single argument without a leading \-, runs in a hotplug
|
||||
mode, and expects the environment variable DEVPATH to specify the
|
||||
corresponding sysfs device. See section below on usage with \fBudev\fP.
|
||||
Deprecated method: when called with only a single argument without a
|
||||
leading \-, runs in a hotplug mode, and expects the environment variable
|
||||
DEVPATH to specify the 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
|
||||
@ -66,6 +67,8 @@ 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
|
||||
\fBdevice\fP, such as \fB/dev/sdc\fP.
|
||||
This argument should also be used when invoked via udev to avoid problems
|
||||
with creation of temporary files on not-yet writable directories.
|
||||
.TP
|
||||
.BI \-f "\| config\-file"
|
||||
Read configuration and black/white list entries from
|
||||
@ -106,15 +109,15 @@ Display version number and exit.
|
||||
.RE
|
||||
|
||||
.SH USAGE WITH UDEV
|
||||
|
||||
If \fBscsi_id\fP is invoked with one argument without a leading \-, it
|
||||
assumes it is called for a hotplug event, and looks for the sysfs device
|
||||
in the DEVPATH environment variable.
|
||||
in the DEVPATH environment variable. This mode is deprecated, but
|
||||
available for backwards compatibility.
|
||||
|
||||
This mode is used when run via the \fBudev\fP PROGRAM key. Passing any
|
||||
arguments or options as part of the PROGRAM rule breaks this assumption,
|
||||
and the results will likely not be as expected.
|
||||
|
||||
When in this mode, all errors and warnings are sent via syslog.
|
||||
If the DEVPATH environment variable is set, scsi_id assumes it has been
|
||||
invoked via udev (or some other hotplug program), and all errors or
|
||||
warnings are sent using syslog.
|
||||
|
||||
To determine the specific value needed in a RESULT key, use the \-s option,
|
||||
for example:
|
||||
@ -131,7 +134,7 @@ of 312345:
|
||||
|
||||
.sp
|
||||
.nf
|
||||
BUS="scsi", PROGRAM="/sbin/scsi_id", RESULT="312345", NAME="disk%n"
|
||||
BUS="scsi", PROGRAM="/sbin/scsi_id -d %N -s %p", RESULT="312345", NAME="disk%n"
|
||||
.fi
|
||||
.P
|
||||
|
||||
|
@ -44,8 +44,8 @@
|
||||
/*
|
||||
* temporary names for mknod.
|
||||
*/
|
||||
#define TMP_DIR "/dev"
|
||||
#define TMP_PREFIX "tmp-scsi"
|
||||
#define TMP_DIR "/tmp"
|
||||
#define TMP_PREFIX "scsi"
|
||||
|
||||
/*
|
||||
* XXX Note the 'e' (send output to stderr in all cases), and 'c' (callout)
|
||||
@ -736,9 +736,7 @@ static int scsi_id(const char *target_path, char *maj_min_dev)
|
||||
format_serial(serial);
|
||||
if (display_bus_id)
|
||||
printf("%s: ", scsi_dev->name);
|
||||
printf("%s", serial);
|
||||
if (!hotplug_mode)
|
||||
printf("\n");
|
||||
printf("%s\n", serial);
|
||||
dprintf("%s\n", serial);
|
||||
retval = 0;
|
||||
}
|
||||
@ -762,11 +760,6 @@ int main(int argc, char **argv)
|
||||
if (getenv("DEBUG"))
|
||||
debug++;
|
||||
|
||||
if ((argc == 2) && (argv[1][0] != '-')) {
|
||||
hotplug_mode = 1;
|
||||
dprintf("hotplug assumed\n");
|
||||
}
|
||||
|
||||
dprintf("argc is %d\n", argc);
|
||||
if (sysfs_get_mnt_path(sysfs_mnt_path, MAX_NAME_LEN)) {
|
||||
log_message(LOG_WARNING, "sysfs_get_mnt_path failed: %s\n",
|
||||
@ -774,27 +767,19 @@ int main(int argc, char **argv)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (hotplug_mode) {
|
||||
devpath = getenv("DEVPATH");
|
||||
if (devpath) {
|
||||
/*
|
||||
* There is a kernel race creating attributes, if called
|
||||
* directly, uncomment the sleep.
|
||||
* This implies that we were invoked via udev or hotplug.
|
||||
*/
|
||||
/* sleep(1); */
|
||||
|
||||
devpath = getenv("DEVPATH");
|
||||
if (!devpath) {
|
||||
log_message(LOG_WARNING, "DEVPATH is not set\n");
|
||||
exit(1);
|
||||
}
|
||||
hotplug_mode = 1;
|
||||
sys_specified = 1;
|
||||
|
||||
strncpy(target_path, sysfs_mnt_path, MAX_NAME_LEN);
|
||||
strncat(target_path, devpath, MAX_NAME_LEN);
|
||||
}
|
||||
|
||||
/*
|
||||
* Override any command line options set via the config file. This
|
||||
* is the only way to set options when in hotplug mode.
|
||||
* Get config file options.
|
||||
*/
|
||||
newargv = NULL;
|
||||
retval = get_file_options(NULL, NULL, &newargc, &newargv);
|
||||
@ -806,11 +791,13 @@ int main(int argc, char **argv)
|
||||
exit(1);
|
||||
free(newargv);
|
||||
}
|
||||
if (!hotplug_mode) {
|
||||
if (set_options(argc, argv, short_options, target_path,
|
||||
maj_min_dev) < 0)
|
||||
/*
|
||||
* Get command line options (overriding any config file or DEVPATH
|
||||
* settings).
|
||||
*/
|
||||
if (set_options(argc, argv, short_options, target_path,
|
||||
maj_min_dev) < 0)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!sys_specified) {
|
||||
log_message(LOG_WARNING, "-s must be specified\n");
|
||||
|
Loading…
x
Reference in New Issue
Block a user