Add compability flag LIBDM_API_COOKIE
authorHannes Reinecke <hare@suse.de>
Tue, 3 May 2011 07:38:30 +0000 (09:38 +0200)
committerHannes Reinecke <hare@suse.de>
Tue, 3 May 2011 07:44:44 +0000 (09:44 +0200)
Newer device-mapper versions use 'cookies' to synchronize with udev.
As this is not available with older versions we need to add stubs
to make it compile on older versions.
And we only need to update the device-mapper version in
dm_lib_prereq() if the flag is set.

Signed-off-by: Hannes Reinecke <hare@suse.de>
kpartx/Makefile
kpartx/devmapper.c
kpartx/kpartx.c
libmultipath/Makefile
libmultipath/devmapper.c
libmultipath/devmapper.h
multipath/main.c
multipathd/main.c

index e1e9651..1287053 100644 (file)
@@ -6,6 +6,12 @@ include ../Makefile.inc
 
 CFLAGS += -I. -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
 
+LIBDM_API_COOKIE = $(shell grep -Ecs '^[a-z]*[[:space:]]+dm_task_set_cookie' /usr/include/libdevmapper.h)
+
+ifneq ($(strip $(LIBDM_API_COOKIE)),0)
+       CFLAGS += -DLIBDM_API_COOKIE
+endif
+
 LDFLAGS = -ldevmapper
 OBJS = bsd.o dos.o kpartx.o solaris.o unixware.o dasd.o sun.o \
        gpt.o mac.o crc32.o lopart.o xstrncpy.o devmapper.o
@@ -16,7 +22,7 @@ all: $(EXEC)
 $(EXEC): $(OBJS)
        $(CC) $(OBJS) -o $(EXEC) $(LDFLAGS)
        $(GZIP) $(EXEC).8 > $(EXEC).8.gz
-       
+
 install: $(EXEC) $(EXEC).8
        $(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir)
        $(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)
index 7ebc5b6..cb7e8a7 100644 (file)
 #define UUID_PREFIX "part%d-"
 #define MAX_PREFIX_LEN 8
 
+#ifndef LIBDM_API_COOKIE
+static inline int dm_task_set_cookie(struct dm_task *dmt, uint32_t *c, int a)
+{
+       return 1;
+}
+#endif
+
 extern int
 dm_prereq (char * str, int x, int y, int z)
 {
index 2052b1a..f95a10e 100644 (file)
@@ -267,8 +267,10 @@ main(int argc, char **argv){
                        exit(1);
        }
 
+#ifdef LIBDM_API_COOKIE
        if (!sync)
                dm_udev_set_sync_support(0);
+#endif
 
        if (dm_prereq(DM_TARGET, 0, 0, 0) && (what == ADD || what == DELETE)) {
                fprintf(stderr, "device mapper prerequisites not met\n");
@@ -577,7 +579,9 @@ main(int argc, char **argv){
                }
                printf("loop deleted : %s\n", device);
        }
+#ifdef LIBDM_API_COOKIE
        dm_udev_wait(cookie);
+#endif
        dm_lib_release();
        dm_lib_exit();
 
index c07b073..f396f49 100644 (file)
@@ -23,6 +23,12 @@ ifneq ($(strip $(LIBDM_API_FLUSH)),0)
        CFLAGS += -DLIBDM_API_FLUSH -D_GNU_SOURCE
 endif
 
+LIBDM_API_COOKIE = $(shell grep -Ecs '^[a-z]*[[:space:]]+dm_task_set_cookie' /usr/include/libdevmapper.h)
+
+ifneq ($(strip $(LIBDM_API_COOKIE)),0)
+       CFLAGS += -DLIBDM_API_COOKIE
+endif
+
 all: $(LIBS)
 
 $(LIBS): $(OBJS)
index 50cdf98..8703571 100644 (file)
 #define UUID_PREFIX "mpath-"
 #define UUID_PREFIX_LEN 6
 
+#ifndef LIBDM_API_COOKIE
+static inline int dm_task_set_cookie(struct dm_task *dmt, uint32_t *c, int a)
+{
+       return 1;
+}
+
+void udev_wait(unsigned int c)
+{
+}
+
+void udev_set_sync_support(int c)
+{
+}
+#else
+void udev_wait(unsigned int c)
+{
+       dm_udev_wait(c);
+}
+
+void udev_set_sync_support(int c)
+{
+       dm_udev_set_sync_support(c);
+}
+#endif
+
 static void
 dm_write_log (int level, const char *file, int line, const char *f, ...)
 {
@@ -83,7 +108,11 @@ dm_lib_prereq (void)
 {
        char version[64];
        int v[3];
+#ifdef LIBDM_API_COOKIE
        int minv[3] = {1, 2, 38};
+#else
+       int minv[3] = {1, 2, 8};
+#endif
 
        dm_get_library_version(version, sizeof(version));
        condlog(3, "libdevmapper version %s", version);
index 1322e22..3e9657a 100644 (file)
@@ -40,5 +40,7 @@ int dm_get_info (char * mapname, struct dm_info ** dmi);
 int dm_rename (char * old, char * new);
 char * dm_get_name(char * uuid);
 int dm_setgeometry(struct multipath *mpp);
+void udev_wait(unsigned int c);
+void udev_set_sync_support(int c);
 
 #endif /* _DEVMAPPER_H */
index 0f28185..3c26c06 100644 (file)
@@ -455,9 +455,9 @@ main (int argc, char *argv[])
        }
        while ((r = configure()) < 0)
                condlog(3, "restart multipath configuration process");
-       
+
 out:
-       dm_udev_wait(conf->cookie);
+       udev_wait(conf->cookie);
 
        sysfs_cleanup();
        dm_lib_release();
index e8eee9e..229ab0b 100644 (file)
@@ -1456,7 +1456,7 @@ child (void * param)
                exit(1);
        }
        conf->daemon = 1;
-       dm_udev_set_sync_support(0);
+       udev_set_sync_support(0);
        /*
         * fetch and configure both paths and multipaths
         */