[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:
christophe@saout.de 2004-01-10 00:55:28 -08:00 committed by Greg KH
parent c53735efc9
commit f1db055ab2
7 changed files with 59 additions and 2 deletions

View File

@ -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]*"

View File

@ -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]*"

View File

@ -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;

View File

@ -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"

View File

@ -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
View File

@ -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:

3
udev.c
View File

@ -221,6 +221,9 @@ exit_sysbus:
sysbus_disconnect();
exit:
if (retval > 0)
retval = 0;
return -retval;
}