1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-04-25 14:50:10 +03:00

[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 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. * remove make_dm_node fn & call. Rely on udev for this.
* don't rely on the linux symlink in the udev/klibc dir since * don't rely on the linux symlink in the udev/klibc dir since
udev build doesn't use it anymore. This corrects build breakage 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 ; \ $(MAKE) KERNEL_DIR=$(KERNEL_DIR) -C $$dir ; \
done done
$(MAKE) $(EXEC) $(MAKE) $(EXEC)
$(MAKE) devmap_name
all: recurse all: recurse
@echo "" @echo ""
@echo "Make complete" @echo "Make complete"
$(EXEC): $(OBJS) $(EXEC): $(OBJS)
$(LD) -o $(EXEC) $(CRT0) $(OBJS) $(SYSFSOBJS) $(DMOBJS) $(LIB) $(LIBGCC) $(LD) -o $(EXEC) $(CRT0) $(OBJS) $(SYSFSOBJS) $(DMOBJS) $(LIB) $(LIBGCC)
strip $(EXEC) strip $(EXEC)
devmap_name: devmap_name.o
$(LD) -o devmap_name $(CRT0) devmap_name.o $(DMOBJS) $(LIB) $(LIBGCC)
strip devmap_name
clean: clean:
rm -f core *.o $(EXEC) rm -f core *.o $(EXEC) devmap_name
$(MAKE) -C libdevmapper clean $(MAKE) -C libdevmapper clean
install: install:
install -d $(bindir) install -d $(bindir)
install -m 755 $(EXEC) $(bindir)/ install -m 755 $(EXEC) $(bindir)/
install -m 755 devmap_name $(bindir)/
install -d /etc/hotplug.d/scsi/ install -d /etc/hotplug.d/scsi/
install -m 755 multipath.hotplug /etc/hotplug.d/scsi/ install -m 755 multipath.hotplug /etc/hotplug.d/scsi/
uninstall: uninstall:
rm /etc/hotplug.d/scsi/multipath.hotplug rm /etc/hotplug.d/scsi/multipath.hotplug
rm $(bindir)/$(EXEC) rm $(bindir)/$(EXEC)
rm $(bindir)/devmap_name
# Code dependencies # Code dependencies
main.o: main.c main.h sg_include.h 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/ See ftp.kernel.org/pub/linux/utils/kernel/hotplug/
o Linux kernel 2.6.0 with udm5 patchset o Linux kernel 2.6.0 with udm5 patchset
http://people.sistina.com/~thornber/dm/ http://people.sistina.com/~thornber/dm/
o udev
See ftp.kernel.org/pub/linux/utils/kernel/hotplug/
How it works : How it works :
============== ==============
@ -53,6 +55,12 @@ struct multipath {
When mp is filled, the device maps are fed to the kernel When mp is filled, the device maps are fed to the kernel
through libdevmapper. 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 : 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;
}