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:
parent
0c040e8d7c
commit
cbb576b91d
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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 :
|
||||||
=======
|
=======
|
||||||
|
|
||||||
|
60
extras/multipath/devmap_name.c
Normal file
60
extras/multipath/devmap_name.c
Normal 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;
|
||||||
|
}
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user