[PATCH] more udev-016/extras/multipath

> Hello,
>
> incremental to udev-016/extras/multipath,
>
> * don't rely on the linux symlink in the udev/klibc dir since
>   udev build doesn't use it anymore. This corrects build breakage
> * remove make_dm_node fn & call. Rely on udev for this.
>
> The first patch is to be applied.
> The second is conditioned by udev dealing correctly with devmap names.
>
> For this I can suggest a CALLOUT rule like this :
> KERNEL="dm-[0-9]*", PROGRAM="/tmp/name_devmap %M %m", NAME="%k",
> SYMLINK="%c"
>
> With name_devmap like :
> #!/bin/sh
> /usr/sbin/dmsetup ls|/bin/grep "$1, $2"|/usr/bin/awk '{print $1}'
>

ok I coded the suggested tool.
it works with the following rule :
KERNEL="dm-[0-9]*", PROGRAM="/sbin/devmap_name %M %m", NAME="%k", SYMLINK="%c"

I don't know if it's right to keep this tools packaged with multipath because
it's widely more general.

Maybe Joe should merge it in the device-mapper package or provide the
functionnality through dmsetup ?
This commit is contained in:
christophe.varoqui@free.fr 2004-02-13 00:48:36 -08:00 committed by Greg KH
parent 0c040e8d7c
commit cbb576b91d
4 changed files with 80 additions and 2 deletions

View File

@ -1,4 +1,8 @@
2004-02-04 multipath-016
* add devmap_name proggy for udev to name devmaps as per their
internal DM name and not only by their sysfs enum name (dm-*)
The corresponding udev.rules line is :
KERNEL="dm-[0-9]*", PROGRAM="/sbin/devmap_name %M %m", NAME="%k", SYMLINK="%c"
* remove make_dm_node fn & call. Rely on udev for this.
* don't rely on the linux symlink in the udev/klibc dir since
udev build doesn't use it anymore. This corrects build breakage

View File

@ -36,29 +36,35 @@ recurse:
$(MAKE) KERNEL_DIR=$(KERNEL_DIR) -C $$dir ; \
done
$(MAKE) $(EXEC)
$(MAKE) devmap_name
all: recurse
@echo ""
@echo "Make complete"
$(EXEC): $(OBJS)
$(LD) -o $(EXEC) $(CRT0) $(OBJS) $(SYSFSOBJS) $(DMOBJS) $(LIB) $(LIBGCC)
strip $(EXEC)
devmap_name: devmap_name.o
$(LD) -o devmap_name $(CRT0) devmap_name.o $(DMOBJS) $(LIB) $(LIBGCC)
strip devmap_name
clean:
rm -f core *.o $(EXEC)
rm -f core *.o $(EXEC) devmap_name
$(MAKE) -C libdevmapper clean
install:
install -d $(bindir)
install -m 755 $(EXEC) $(bindir)/
install -m 755 devmap_name $(bindir)/
install -d /etc/hotplug.d/scsi/
install -m 755 multipath.hotplug /etc/hotplug.d/scsi/
uninstall:
rm /etc/hotplug.d/scsi/multipath.hotplug
rm $(bindir)/$(EXEC)
rm $(bindir)/devmap_name
# Code dependencies
main.o: main.c main.h sg_include.h

View File

@ -8,6 +8,8 @@ o libsysfs : comes with sysutils or udev
See ftp.kernel.org/pub/linux/utils/kernel/hotplug/
o Linux kernel 2.6.0 with udm5 patchset
http://people.sistina.com/~thornber/dm/
o udev
See ftp.kernel.org/pub/linux/utils/kernel/hotplug/
How it works :
==============
@ -53,6 +55,12 @@ struct multipath {
When mp is filled, the device maps are fed to the kernel
through libdevmapper.
The naming of the corresponding block device is handeld
by udev with the help of the devmap_name proggy. It is
called by the following rule in /etc/udev/udev.rules :
KERNEL="dm-[0-9]*", PROGRAM="/sbin/devmap_name %M %m", \
NAME="%k", SYMLINK="%c"
Notes :
=======

View File

@ -0,0 +1,60 @@
#include "libdevmapper/libdevmapper.h"
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <linux/kdev_t.h>
static void usage(char * progname) {
fprintf(stderr, "usage : %s major minor\n", progname);
exit(1);
}
int main(int argc, char **argv)
{
int r = 0;
struct dm_names *names;
unsigned next = 0;
int major, minor;
/* sanity check */
if (argc != 3)
usage(argv[0]);
major = atoi(argv[1]);
minor = atoi(argv[2]);
struct dm_task *dmt;
if (!(dmt = dm_task_create(DM_DEVICE_LIST)))
return 0;
if (!dm_task_run(dmt))
goto out;
if (!(names = dm_task_get_names(dmt)))
goto out;
if (!names->dev) {
printf("No devices found\n");
goto out;
}
do {
names = (void *) names + next;
if ((int) MAJOR(names->dev) == major &&
(int) MINOR(names->dev) == minor) {
printf("%s\n", names->name);
goto out;
}
next = names->next;
} while (next);
/* No correspondance found */
r = 1;
out:
dm_task_destroy(dmt);
return r;
}