mirror of
https://github.com/systemd/systemd.git
synced 2025-03-19 22:50:17 +03:00
[PATCH] add IGNORE rule type
On Wed, Dec 31, 2003 at 11:24:53AM -0800, Greg KH wrote: > > There should be a possibility to tell udev not to create a device node. > > > > device-mapper: Usually set up by libdevmapper (or EVMS tools) which > > creates the device node on its own under /dev/mapper/<name>. > > > > With udev a second device is created named /dev/dm-<minor> which is not > > really needed. > > Good point. Ok, I'll agree with you. Care to make up a patch for this > kind of feature? Yes, I can try. There was no way to tell not to do anything so I created one. Errors are signalled via negative return values, so I thought that a positive, non-zero one could mean to ignore the device. I don't like it but perhaps you have a better solution.
This commit is contained in:
parent
c53735efc9
commit
f1db055ab2
@ -49,4 +49,5 @@ REPLACE, KERNEL="ttyUSB0", NAME="pl2303"
|
||||
# if this is a ide cdrom, name it the default name, and create a symlink to cdrom
|
||||
CALLOUT, BUS="ide", PROGRAM="/bin/cat /proc/ide/%k/media", ID="cdrom", NAME="%k", SYMLINK="cdrom"
|
||||
|
||||
|
||||
# device mapper creates its own device nodes
|
||||
IGNORE, KERNEL="dm-[0-9]*"
|
||||
|
@ -41,3 +41,6 @@ REPLACE, KERNEL="video[0-9]*", NAME="v4l/video%n"
|
||||
REPLACE, KERNEL="radio[0-9]*", NAME="v4l/radio%n"
|
||||
REPLACE, KERNEL="vbi[0-9]*", NAME="v4l/vbi%n"
|
||||
REPLACE, KERNEL="vtx[0-9]*", NAME="v4l/vtx%n"
|
||||
|
||||
# dm devices
|
||||
IGNORE, KERNEL="dm-[0-9]*"
|
||||
|
27
namedev.c
27
namedev.c
@ -298,6 +298,27 @@ exit:
|
||||
return; /* here to prevent compiler warning... */
|
||||
}
|
||||
|
||||
static int do_ignore(struct sysfs_class_device *class_dev, struct udevice *udev, struct sysfs_device *sysfs_device)
|
||||
{
|
||||
struct config_device *dev;
|
||||
struct list_head *tmp;
|
||||
|
||||
list_for_each(tmp, &config_device_list) {
|
||||
dev = list_entry(tmp, struct config_device, node);
|
||||
if (dev->type != IGNORE)
|
||||
continue;
|
||||
|
||||
dbg("compare name '%s' with '%s'", dev->kernel_name, class_dev->name);
|
||||
if (strcmp_pattern(dev->kernel_name, class_dev->name) != 0)
|
||||
continue;
|
||||
|
||||
dbg("found name, '%s' will be ignored", dev->kernel_name);
|
||||
|
||||
return 0;
|
||||
}
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static int exec_callout(struct config_device *dev, char *value, int len)
|
||||
{
|
||||
int retval;
|
||||
@ -734,6 +755,12 @@ int namedev_name_device(struct sysfs_class_device *class_dev, struct udevice *ud
|
||||
dbg("kernel_number='%s'", udev->kernel_number);
|
||||
|
||||
/* rules are looked at in priority order */
|
||||
retval = do_ignore(class_dev, udev, sysfs_device);
|
||||
if (retval == 0) {
|
||||
dbg("name, '%s' is being ignored", class_dev->name);
|
||||
return 1;
|
||||
}
|
||||
|
||||
retval = do_callout(class_dev, udev, sysfs_device);
|
||||
if (retval == 0)
|
||||
goto found;
|
||||
|
@ -36,6 +36,7 @@ enum config_type {
|
||||
TOPOLOGY = 3,
|
||||
REPLACE = 4,
|
||||
CALLOUT = 5,
|
||||
IGNORE = 6,
|
||||
};
|
||||
|
||||
#define BUS_SIZE 30
|
||||
@ -50,6 +51,7 @@ enum config_type {
|
||||
#define TYPE_TOPOLOGY "TOPOLOGY"
|
||||
#define TYPE_REPLACE "REPLACE"
|
||||
#define TYPE_CALLOUT "CALLOUT"
|
||||
#define TYPE_IGNORE "IGNORE"
|
||||
|
||||
#define FIELD_BUS "BUS"
|
||||
#define FIELD_ID "ID"
|
||||
|
@ -110,6 +110,10 @@ void dump_config_dev(struct config_device *dev)
|
||||
dbg_parse("CALLOUT name='%s', bus='%s', program='%s', id='%s'",
|
||||
dev->name, dev->bus, dev->exec_program, dev->id);
|
||||
break;
|
||||
case IGNORE:
|
||||
dbg_parse("IGNORE name='%s', kernel_name='%s'",
|
||||
dev->name, dev->kernel_name);
|
||||
break;
|
||||
default:
|
||||
dbg_parse("unknown type of method");
|
||||
}
|
||||
@ -209,6 +213,11 @@ int namedev_init_rules(void)
|
||||
goto keys;
|
||||
}
|
||||
|
||||
if (strcasecmp(temp2, TYPE_IGNORE) == 0) {
|
||||
dev.type = IGNORE;
|
||||
goto keys;
|
||||
}
|
||||
|
||||
dbg_parse("unknown type of method '%s'", temp2);
|
||||
goto error;
|
||||
keys:
|
||||
@ -323,6 +332,12 @@ keys:
|
||||
(*dev.exec_program == '\0'))
|
||||
goto error;
|
||||
break;
|
||||
case IGNORE:
|
||||
dbg_parse(TYPE_IGNORE "name='%s', kernel_name='%s'",
|
||||
dev.name, dev.kernel_name);
|
||||
if ((*dev.kernel_name == '\0'))
|
||||
goto error;
|
||||
break;
|
||||
default:
|
||||
dbg_parse("unknown type of method");
|
||||
goto error;
|
||||
|
8
udev.8
8
udev.8
@ -161,9 +161,15 @@ device position on bus, like physical port of USB device
|
||||
string replacement of the kernel device name
|
||||
.br
|
||||
.RB "key: " KERNEL
|
||||
.TP
|
||||
.B IGNORE
|
||||
tell udev to not care about creation of this device, e.g. because the
|
||||
device is already handled by another program
|
||||
.br
|
||||
.RB "key: " KERNEL
|
||||
.P
|
||||
The methods are applied in the following order:
|
||||
.BR CALLOUT ", " LABEL ", " NUMBER ", " TOPOLOGY ", " REPLACE "."
|
||||
.BR IGNORE ", " CALLOUT ", " LABEL ", " NUMBER ", " TOPOLOGY ", " REPLACE "."
|
||||
.P
|
||||
.RB "The " NAME " ," SYMLINK " and " PROGRAM
|
||||
fields support simple printf-like string substitution:
|
||||
|
Loading…
x
Reference in New Issue
Block a user