[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
|
# 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"
|
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="radio[0-9]*", NAME="v4l/radio%n"
|
||||||
REPLACE, KERNEL="vbi[0-9]*", NAME="v4l/vbi%n"
|
REPLACE, KERNEL="vbi[0-9]*", NAME="v4l/vbi%n"
|
||||||
REPLACE, KERNEL="vtx[0-9]*", NAME="v4l/vtx%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... */
|
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)
|
static int exec_callout(struct config_device *dev, char *value, int len)
|
||||||
{
|
{
|
||||||
int retval;
|
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);
|
dbg("kernel_number='%s'", udev->kernel_number);
|
||||||
|
|
||||||
/* rules are looked at in priority order */
|
/* 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);
|
retval = do_callout(class_dev, udev, sysfs_device);
|
||||||
if (retval == 0)
|
if (retval == 0)
|
||||||
goto found;
|
goto found;
|
||||||
|
|
|
@ -36,6 +36,7 @@ enum config_type {
|
||||||
TOPOLOGY = 3,
|
TOPOLOGY = 3,
|
||||||
REPLACE = 4,
|
REPLACE = 4,
|
||||||
CALLOUT = 5,
|
CALLOUT = 5,
|
||||||
|
IGNORE = 6,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define BUS_SIZE 30
|
#define BUS_SIZE 30
|
||||||
|
@ -50,6 +51,7 @@ enum config_type {
|
||||||
#define TYPE_TOPOLOGY "TOPOLOGY"
|
#define TYPE_TOPOLOGY "TOPOLOGY"
|
||||||
#define TYPE_REPLACE "REPLACE"
|
#define TYPE_REPLACE "REPLACE"
|
||||||
#define TYPE_CALLOUT "CALLOUT"
|
#define TYPE_CALLOUT "CALLOUT"
|
||||||
|
#define TYPE_IGNORE "IGNORE"
|
||||||
|
|
||||||
#define FIELD_BUS "BUS"
|
#define FIELD_BUS "BUS"
|
||||||
#define FIELD_ID "ID"
|
#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'",
|
dbg_parse("CALLOUT name='%s', bus='%s', program='%s', id='%s'",
|
||||||
dev->name, dev->bus, dev->exec_program, dev->id);
|
dev->name, dev->bus, dev->exec_program, dev->id);
|
||||||
break;
|
break;
|
||||||
|
case IGNORE:
|
||||||
|
dbg_parse("IGNORE name='%s', kernel_name='%s'",
|
||||||
|
dev->name, dev->kernel_name);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
dbg_parse("unknown type of method");
|
dbg_parse("unknown type of method");
|
||||||
}
|
}
|
||||||
|
@ -209,6 +213,11 @@ int namedev_init_rules(void)
|
||||||
goto keys;
|
goto keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (strcasecmp(temp2, TYPE_IGNORE) == 0) {
|
||||||
|
dev.type = IGNORE;
|
||||||
|
goto keys;
|
||||||
|
}
|
||||||
|
|
||||||
dbg_parse("unknown type of method '%s'", temp2);
|
dbg_parse("unknown type of method '%s'", temp2);
|
||||||
goto error;
|
goto error;
|
||||||
keys:
|
keys:
|
||||||
|
@ -323,6 +332,12 @@ keys:
|
||||||
(*dev.exec_program == '\0'))
|
(*dev.exec_program == '\0'))
|
||||||
goto error;
|
goto error;
|
||||||
break;
|
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:
|
default:
|
||||||
dbg_parse("unknown type of method");
|
dbg_parse("unknown type of method");
|
||||||
goto error;
|
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
|
string replacement of the kernel device name
|
||||||
.br
|
.br
|
||||||
.RB "key: " KERNEL
|
.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
|
.P
|
||||||
The methods are applied in the following order:
|
The methods are applied in the following order:
|
||||||
.BR CALLOUT ", " LABEL ", " NUMBER ", " TOPOLOGY ", " REPLACE "."
|
.BR IGNORE ", " CALLOUT ", " LABEL ", " NUMBER ", " TOPOLOGY ", " REPLACE "."
|
||||||
.P
|
.P
|
||||||
.RB "The " NAME " ," SYMLINK " and " PROGRAM
|
.RB "The " NAME " ," SYMLINK " and " PROGRAM
|
||||||
fields support simple printf-like string substitution:
|
fields support simple printf-like string substitution:
|
||||||
|
|
Loading…
Reference in New Issue