]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - mdadm.h
mdadm: improve the dlm locking mechanism for clustered raid
[thirdparty/mdadm.git] / mdadm.h
diff --git a/mdadm.h b/mdadm.h
old mode 100755 (executable)
new mode 100644 (file)
index 99802c3..61bc7af
--- a/mdadm.h
+++ b/mdadm.h
@@ -45,6 +45,10 @@ extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence));
 #include       <errno.h>
 #include       <string.h>
 #include       <syslog.h>
+#ifdef __GLIBC__
+/* Newer glibc requires sys/sysmacros.h directly for makedev() */
+#include       <sys/sysmacros.h>
+#endif
 #ifdef __dietlibc__
 #include       <strings.h>
 /* dietlibc has deprecated random and srandom!! */
@@ -64,7 +68,6 @@ typedef uint64_t cmap_handle_t;
 #include       <errno.h>
 #else
 #define LKF_NOQUEUE    0x00000001
-#define LKF_CONVERT    0x00000004
 #define LKM_PWMODE     4
 #define EUNLOCK                0x10002
 
@@ -139,20 +142,20 @@ struct dlm_lksb {
  * and there is no standard conversion function so... */
 /* And dietlibc doesn't think byteswap is ok, so.. */
 /*  #include <byteswap.h> */
-#define bswap_16(x) (((x) & 0x00ffU) << 8 | \
-                    ((x) & 0xff00U) >> 8)
-#define bswap_32(x) (((x) & 0x000000ffU) << 24 | \
-                    ((x) & 0xff000000U) >> 24 | \
-                    ((x) & 0x0000ff00U) << 8  | \
-                    ((x) & 0x00ff0000U) >> 8)
-#define bswap_64(x) (((x) & 0x00000000000000ffULL) << 56 | \
-                    ((x) & 0xff00000000000000ULL) >> 56 | \
-                    ((x) & 0x000000000000ff00ULL) << 40 | \
-                    ((x) & 0x00ff000000000000ULL) >> 40 | \
-                    ((x) & 0x0000000000ff0000ULL) << 24 | \
-                    ((x) & 0x0000ff0000000000ULL) >> 24 | \
-                    ((x) & 0x00000000ff000000ULL) << 8 | \
-                    ((x) & 0x000000ff00000000ULL) >> 8)
+#define __mdadm_bswap_16(x) (((x) & 0x00ffU) << 8 | \
+                            ((x) & 0xff00U) >> 8)
+#define __mdadm_bswap_32(x) (((x) & 0x000000ffU) << 24 | \
+                            ((x) & 0xff000000U) >> 24 | \
+                            ((x) & 0x0000ff00U) << 8  | \
+                            ((x) & 0x00ff0000U) >> 8)
+#define __mdadm_bswap_64(x) (((x) & 0x00000000000000ffULL) << 56 | \
+                            ((x) & 0xff00000000000000ULL) >> 56 | \
+                            ((x) & 0x000000000000ff00ULL) << 40 | \
+                            ((x) & 0x00ff000000000000ULL) >> 40 | \
+                            ((x) & 0x0000000000ff0000ULL) << 24 | \
+                            ((x) & 0x0000ff0000000000ULL) >> 24 | \
+                            ((x) & 0x00000000ff000000ULL) << 8 |  \
+                            ((x) & 0x000000ff00000000ULL) >> 8)
 
 #if !defined(__KLIBC__)
 #if BYTE_ORDER == LITTLE_ENDIAN
@@ -163,19 +166,19 @@ struct dlm_lksb {
 #define __le32_to_cpu(_x) (unsigned int)(_x)
 #define __le64_to_cpu(_x) (unsigned long long)(_x)
 
-#define        __cpu_to_be16(_x) bswap_16(_x)
-#define __cpu_to_be32(_x) bswap_32(_x)
-#define __cpu_to_be64(_x) bswap_64(_x)
-#define        __be16_to_cpu(_x) bswap_16(_x)
-#define __be32_to_cpu(_x) bswap_32(_x)
-#define __be64_to_cpu(_x) bswap_64(_x)
+#define        __cpu_to_be16(_x) __mdadm_bswap_16(_x)
+#define __cpu_to_be32(_x) __mdadm_bswap_32(_x)
+#define __cpu_to_be64(_x) __mdadm_bswap_64(_x)
+#define        __be16_to_cpu(_x) __mdadm_bswap_16(_x)
+#define __be32_to_cpu(_x) __mdadm_bswap_32(_x)
+#define __be64_to_cpu(_x) __mdadm_bswap_64(_x)
 #elif BYTE_ORDER == BIG_ENDIAN
-#define        __cpu_to_le16(_x) bswap_16(_x)
-#define __cpu_to_le32(_x) bswap_32(_x)
-#define __cpu_to_le64(_x) bswap_64(_x)
-#define        __le16_to_cpu(_x) bswap_16(_x)
-#define __le32_to_cpu(_x) bswap_32(_x)
-#define __le64_to_cpu(_x) bswap_64(_x)
+#define        __cpu_to_le16(_x) __mdadm_bswap_16(_x)
+#define __cpu_to_le32(_x) __mdadm_bswap_32(_x)
+#define __cpu_to_le64(_x) __mdadm_bswap_64(_x)
+#define        __le16_to_cpu(_x) __mdadm_bswap_16(_x)
+#define __le32_to_cpu(_x) __mdadm_bswap_32(_x)
+#define __le64_to_cpu(_x) __mdadm_bswap_64(_x)
 
 #define        __cpu_to_be16(_x) (unsigned int)(_x)
 #define __cpu_to_be32(_x) (unsigned int)(_x)
@@ -234,6 +237,17 @@ struct dlm_lksb {
 
 extern const char Name[];
 
+struct md_bb_entry {
+       unsigned long long sector;
+       int length;
+};
+
+struct md_bb {
+       int supported;
+       int count;
+       struct md_bb_entry *entries;
+};
+
 /* general information that might be extracted from a superblock */
 struct mdinfo {
        mdu_array_info_t        array;
@@ -265,6 +279,15 @@ struct mdinfo {
        int journal_device_required;
        int journal_clean;
 
+       enum {
+               CONSISTENCY_POLICY_UNKNOWN,
+               CONSISTENCY_POLICY_NONE,
+               CONSISTENCY_POLICY_RESYNC,
+               CONSISTENCY_POLICY_BITMAP,
+               CONSISTENCY_POLICY_JOURNAL,
+               CONSISTENCY_POLICY_PPL,
+       } consistency_policy;
+
        /* During reshape we can sometimes change the data_offset to avoid
         * over-writing still-valid data.  We need to know if there is space.
         * So getinfo_super will fill in space_before and space_after in sectors.
@@ -277,6 +300,9 @@ struct mdinfo {
                #define MaxSector  (~0ULL) /* resync/recovery complete position */
        };
        long                    bitmap_offset;  /* 0 == none, 1 == a file */
+       unsigned int            ppl_size;
+       int                     ppl_offset;
+       unsigned long long      ppl_sector;
        unsigned long           safe_mode_delay; /* ms delay to mark clean */
        int                     new_level, delta_disks, new_layout, new_chunk;
        int                     errors;
@@ -290,13 +316,15 @@ struct mdinfo {
        int container_enough; /* flag external handlers can set to
                               * indicate that subarrays have not enough (-1),
                               * enough to start (0), or all expected disks (1) */
-       char            sys_name[20];
+       char            sys_name[32];
        struct mdinfo *devs;
        struct mdinfo *next;
 
        /* Device info for mdmon: */
        int recovery_fd;
        int state_fd;
+       int bb_fd;
+       int ubb_fd;
        #define DS_FAULTY       1
        #define DS_INSYNC       2
        #define DS_WRITE_MOSTLY 4
@@ -307,7 +335,19 @@ struct mdinfo {
        int prev_state, curr_state, next_state;
 
        /* info read from sysfs */
-       char            sysfs_array_state[20];
+       enum {
+               ARRAY_CLEAR,
+               ARRAY_INACTIVE,
+               ARRAY_SUSPENDED,
+               ARRAY_READONLY,
+               ARRAY_READ_AUTO,
+               ARRAY_CLEAN,
+               ARRAY_ACTIVE,
+               ARRAY_WRITE_PENDING,
+               ARRAY_ACTIVE_IDLE,
+               ARRAY_UNKNOWN_STATE,
+       } array_state;
+       struct md_bb bb;
 };
 
 struct createinfo {
@@ -321,6 +361,11 @@ struct createinfo {
        struct supertype *supertype;
 };
 
+struct spare_criteria {
+       unsigned long long min_size;
+       unsigned int sector_size;
+};
+
 enum mode {
        ASSEMBLE=1,
        BUILD,
@@ -380,6 +425,8 @@ enum special_options {
        ConfigFile,
        ChunkSize,
        WriteMostly,
+       FailFast,
+       NoFailFast,
        Layout,
        Auto,
        Force,
@@ -406,6 +453,7 @@ enum special_options {
        ClusterName,
        ClusterConfirm,
        WriteJournal,
+       ConsistencyPolicy,
 };
 
 enum prefix_standard {
@@ -419,6 +467,10 @@ enum bitmap_update {
     NodeNumUpdate,
 };
 
+enum flag_mode {
+       FlagDefault, FlagSet, FlagClear,
+};
+
 /* structures read from config file */
 /* List of mddevice names and identifiers
  * Identifiers can be:
@@ -503,6 +555,7 @@ struct shape {
        int     assume_clean;
        int     write_behind;
        unsigned long long size;
+       int     consistency_policy;
 };
 
 /* List of device names - wildcards expanded */
@@ -512,7 +565,8 @@ struct mddev_dev {
                                 * 'A' for re_add.
                                 * Not set for names read from .config
                                 */
-       char writemostly;       /* 1 for 'set writemostly', 2 for 'clear writemostly' */
+       enum flag_mode writemostly;
+       enum flag_mode failfast;
        int used;               /* set when used */
        long long data_offset;
        struct mddev_dev *next;
@@ -527,7 +581,7 @@ struct mdstat_ent {
        char            devnm[32];
        int             active;
        char            *level;
-       char            *pattern; /* U or up, _ for down */
+       char            *pattern; /* U for up, _ for down */
        int             percent; /* -1 if no resync */
        int             resync; /* 3 if check, 2 if reshape, 1 if resync, 0 if recovery */
        int             devcnt;
@@ -583,7 +637,6 @@ enum sysfs_read_flags {
        GET_MISMATCH    = (1 << 5),
        GET_VERSION     = (1 << 6),
        GET_DISKS       = (1 << 7),
-       GET_DEGRADED    = (1 << 8),
        GET_SAFEMODE    = (1 << 9),
        GET_BITMAP_LOCATION = (1 << 10),
 
@@ -593,14 +646,15 @@ enum sysfs_read_flags {
        GET_STATE       = (1 << 23),
        GET_ERROR       = (1 << 24),
        GET_ARRAY_STATE = (1 << 25),
+       GET_CONSISTENCY_POLICY  = (1 << 26),
 };
 
 /* If fd >= 0, get the array it is open on,
  * else use devnm.
  */
 extern int sysfs_open(char *devnm, char *devname, char *attr);
-extern void sysfs_init(struct mdinfo *mdi, int fd, char *devnm);
-extern void sysfs_init_dev(struct mdinfo *mdi, unsigned long devid);
+extern int sysfs_init(struct mdinfo *mdi, int fd, char *devnm);
+extern void sysfs_init_dev(struct mdinfo *mdi, dev_t devid);
 extern void sysfs_free(struct mdinfo *sra);
 extern struct mdinfo *sysfs_read(int fd, char *devnm, unsigned long options);
 extern int sysfs_attr_match(const char *attr, const char *str);
@@ -632,7 +686,8 @@ extern int sysfs_disk_to_scsi_id(int fd, __u32 *id);
 extern int sysfs_unique_holder(char *devnm, long rdev);
 extern int sysfs_freeze_array(struct mdinfo *sra);
 extern int sysfs_wait(int fd, int *msec);
-extern int load_sys(char *path, char *buf);
+extern int load_sys(char *path, char *buf, int len);
+extern int zero_disk_range(int fd, unsigned long long sector, size_t count);
 extern int reshape_prepare_fdlist(char *devname,
                                  struct mdinfo *sra,
                                  int raid_disks,
@@ -677,6 +732,7 @@ extern int restore_stripes(int *dest, unsigned long long *offsets,
 extern char *map_num(mapping_t *map, int num);
 extern int map_name(mapping_t *map, char *name);
 extern mapping_t r5layout[], r6layout[], pers[], modes[], faultylayout[];
+extern mapping_t consistency_policies[], sysfs_array_states[];
 
 extern char *map_dev_preferred(int major, int minor, int create,
                               char *prefer);
@@ -717,7 +773,7 @@ struct reshape {
        unsigned long long new_size; /* New size of array in sectors */
 };
 
-/* A superswitch provides entry point the a metadata handler.
+/* A superswitch provides entry point to a metadata handler.
  *
  * The superswitch primarily operates on some "metadata" that
  * is accessed via the 'supertype'.
@@ -818,9 +874,12 @@ extern struct superswitch {
         *   linear-grow-update - now change the size of the array.
         *   writemostly - set the WriteMostly1 bit in the superblock devflags
         *   readwrite - clear the WriteMostly1 bit in the superblock devflags
+        *   failfast - set the FailFast1 bit in the superblock
+        *   nofailfast - clear the FailFast1 bit
         *   no-bitmap - clear any record that a bitmap is present.
         *   bbl       - add a bad-block-log if possible
-        *   no-bbl    - remove and bad-block-log is it is empty.
+        *   no-bbl    - remove any bad-block-log is it is empty.
+        *   force-no-bbl - remove any bad-block-log even if empty.
         *   revert-reshape - If a reshape is in progress, modify metadata so
         *                    it will resume going in the opposite direction.
         */
@@ -835,7 +894,7 @@ extern struct superswitch {
         * metadata.
         */
        int (*init_super)(struct supertype *st, mdu_array_info_t *info,
-                         unsigned long long size, char *name,
+                         struct shape *s, char *name,
                          char *homehost, int *uuid,
                          unsigned long long data_offset);
 
@@ -886,16 +945,21 @@ extern struct superswitch {
         */
        __u64 (*avail_size)(struct supertype *st, __u64 size,
                            unsigned long long data_offset);
-       /* This is similar to 'avail_size' in purpose, but is used for
-        * containers for which there is no 'component size' to compare.
-        * This reports that whole-device size which is a minimum
+       /*
+        * Return spare criteria for array:
+        * - minimum disk size can be used in array;
+        * - sector size can be used in array.
+        * Return values: 0 - for success and -EINVAL on error.
         */
-       unsigned long long (*min_acceptable_spare_size)(struct supertype *st);
+       int (*get_spare_criteria)(struct supertype *st,
+                                 struct spare_criteria *sc);
        /* Find somewhere to put a bitmap - possibly auto-size it - and
         * update the metadata to record this.  The array may be newly
         * created, in which case data_size may be updated, or it might
         * already exist.  Metadata handler can know if init_super
         * has been called, but not write_init_super.
+        *  0:     Success
+        * -Exxxx: On error
         */
        int (*add_internal_bitmap)(struct supertype *st, int *chunkp,
                                   int delay, int write_behind,
@@ -903,7 +967,7 @@ extern struct superswitch {
        /* Seek 'fd' to start of write-intent-bitmap.  Must be an
         * md-native format bitmap
         */
-       int (*locate_bitmap)(struct supertype *st, int fd);
+       int (*locate_bitmap)(struct supertype *st, int fd, int node_num);
        /* if add_internal_bitmap succeeded for existing array, this
         * writes it out.
         */
@@ -931,7 +995,7 @@ extern struct superswitch {
                                 int *chunk, unsigned long long size,
                                 unsigned long long data_offset,
                                 char *subdev, unsigned long long *freesize,
-                                int verbose);
+                                int consistency_policy, int verbose);
 
        /* Return a linked list of 'mdinfo' structures for all arrays
         * in the container.  For non-containers, it is like
@@ -1029,6 +1093,24 @@ extern struct superswitch {
        /* validate container after assemble */
        int (*validate_container)(struct mdinfo *info);
 
+       /* write initial empty PPL on device */
+       int (*write_init_ppl)(struct supertype *st, struct mdinfo *info, int fd);
+
+       /* validate ppl before assemble */
+       int (*validate_ppl)(struct supertype *st, struct mdinfo *info,
+                           struct mdinfo *disk);
+
+       /* records new bad block in metadata */
+       int (*record_bad_block)(struct active_array *a, int n,
+                                       unsigned long long sector, int length);
+
+       /* clears bad block from metadata */
+       int (*clear_bad_block)(struct active_array *a, int n,
+                                       unsigned long long sector, int length);
+
+       /* get list of bad blocks from metadata */
+       struct md_bb *(*get_bad_blocks)(struct active_array *a, int n);
+
        int swapuuid; /* true if uuid is bigending rather than hostendian */
        int external;
        const char *name; /* canonical metadata name */
@@ -1106,8 +1188,10 @@ static inline struct supertype *guess_super(int fd) {
 }
 extern struct supertype *dup_super(struct supertype *st);
 extern int get_dev_size(int fd, char *dname, unsigned long long *sizep);
+extern int get_dev_sector_size(int fd, char *dname, unsigned int *sectsizep);
 extern int must_be_container(int fd);
 extern int dev_size_from_id(dev_t id, unsigned long long *size);
+extern int dev_sector_size_from_id(dev_t id, unsigned int *size);
 void wait_for(char *dev, int fd);
 
 /*
@@ -1267,6 +1351,8 @@ extern int Grow_restart(struct supertype *st, struct mdinfo *info,
 extern int Grow_continue(int mdfd, struct supertype *st,
                         struct mdinfo *info, char *backup_file,
                         int forked, int freeze_reshape);
+extern int Grow_consistency_policy(char *devname, int fd,
+                                  struct context *c, struct shape *s);
 
 extern int restore_backup(struct supertype *st,
                          struct mdinfo *content,
@@ -1309,7 +1395,7 @@ extern int Kill(char *dev, struct supertype *st, int force, int verbose, int noe
 extern int Kill_subarray(char *dev, char *subarray, int verbose);
 extern int Update_subarray(char *dev, char *subarray, char *update, struct mddev_ident *ident, int quiet);
 extern int Wait(char *dev);
-extern int WaitClean(char *dev, int sock, int verbose);
+extern int WaitClean(char *dev, int verbose);
 extern int SetAction(char *dev, char *action);
 
 extern int Incremental(struct mddev_dev *devlist, struct context *c,
@@ -1325,17 +1411,30 @@ extern int CreateBitmap(char *filename, int force, char uuid[16],
 extern int ExamineBitmap(char *filename, int brief, struct supertype *st);
 extern int Write_rules(char *rule_name);
 extern int bitmap_update_uuid(int fd, int *uuid, int swap);
-extern unsigned long bitmap_sectors(struct bitmap_super_s *bsb);
+
+/* calculate the size of the bitmap given the array size and bitmap chunksize */
+static inline unsigned long long
+bitmap_bits(unsigned long long array_size, unsigned long chunksize)
+{
+       return (array_size * 512 + chunksize - 1) / chunksize;
+}
+
 extern int Dump_metadata(char *dev, char *dir, struct context *c,
                         struct supertype *st);
 extern int Restore_metadata(char *dev, char *dir, struct context *c,
                            struct supertype *st, int only);
 
-extern int md_get_version(int fd);
+int md_array_valid(int fd);
+int md_array_active(int fd);
+int md_array_is_active(struct mdinfo *info);
+int md_get_array_info(int fd, struct mdu_array_info_s *array);
+int md_set_array_info(int fd, struct mdu_array_info_s *array);
+int md_get_disk_info(int fd, struct mdu_disk_info_s *disk);
 extern int get_linux_version(void);
 extern int mdadm_version(char *version);
 extern unsigned long long parse_size(char *size);
 extern int parse_uuid(char *str, int uuid[4]);
+extern int is_near_layout_10(int layout);
 extern int parse_layout_10(char *layout);
 extern int parse_layout_faulty(char *layout);
 extern long parse_num(char *num);
@@ -1346,6 +1445,8 @@ extern int check_raid(int fd, char *name);
 extern int check_partitions(int fd, char *dname,
                            unsigned long long freesize,
                            unsigned long long size);
+extern int fstat_is_blkdev(int fd, char *devname, dev_t *rdev);
+extern int stat_is_blkdev(char *devname, dev_t *rdev);
 
 extern int get_mdp_major(void);
 extern int get_maj_min(char *dev, int *major, int *minor);
@@ -1398,7 +1499,6 @@ extern char *fname_from_uuid(struct supertype *st,
 extern unsigned long calc_csum(void *super, int bytes);
 extern int enough(int level, int raid_disks, int layout, int clean,
                   char *avail);
-extern int enough_fd(int fd);
 extern int ask(char *mesg);
 extern unsigned long long get_component_size(int fd);
 extern void remove_partitions(int fd);
@@ -1418,7 +1518,7 @@ extern int assemble_container_content(struct supertype *st, int mdfd,
 #define        INCR_ALREADY    4
 #define        INCR_YES        8
 extern struct mdinfo *container_choose_spares(struct supertype *st,
-                                             unsigned long long min_size,
+                                             struct spare_criteria *criteria,
                                              struct domainlist *domlist,
                                              char *spare_group,
                                              const char *metadata, int get_one);
@@ -1427,6 +1527,8 @@ extern int add_disk(int mdfd, struct supertype *st,
                    struct mdinfo *sra, struct mdinfo *info);
 extern int remove_disk(int mdfd, struct supertype *st,
                       struct mdinfo *sra, struct mdinfo *info);
+extern int hot_remove_disk(int mdfd, unsigned long dev, int force);
+extern int sys_hot_remove_disk(int statefd, int force);
 extern int set_array_info(int mdfd, struct supertype *st, struct mdinfo *info);
 unsigned long long min_recovery_start(struct mdinfo *array);
 
@@ -1437,15 +1539,15 @@ extern void print_r10_layout(int layout);
 extern char *find_free_devnm(int use_partitions);
 
 extern void put_md_name(char *name);
-extern char *devid2kname(int devid);
-extern char *devid2devnm(int devid);
-extern int devnm2devid(char *devnm);
+extern char *devid2kname(dev_t devid);
+extern char *devid2devnm(dev_t devid);
+extern dev_t devnm2devid(char *devnm);
 extern char *get_md_name(char *devnm);
 
 extern char DefaultConfFile[];
 
 extern int create_mddev(char *dev, char *name, int autof, int trustworthy,
-                       char *chosen);
+                       char *chosen, int block_udev);
 /* values for 'trustworthy' */
 #define        LOCAL   1
 #define        LOCAL_ANY 10
@@ -1464,6 +1566,7 @@ extern int mdmon_running(char *devnm);
 extern int mdmon_pid(char *devnm);
 extern int check_env(char *name);
 extern __u32 random32(void);
+extern void random_uuid(__u8 *buf);
 extern int start_mdmon(char *devnm);
 
 extern int child_monitor(int afd, struct mdinfo *sra, struct reshape *reshape,
@@ -1474,9 +1577,12 @@ void abort_reshape(struct mdinfo *sra);
 
 void *super1_make_v0(struct supertype *st, struct mdinfo *info, mdp_super_t *sb0);
 
-extern void fmt_devname(char *name, int num);
+extern char *stat2kname(struct stat *st);
+extern char *fd2kname(int fd);
 extern char *stat2devnm(struct stat *st);
 extern char *fd2devnm(int fd);
+extern void udev_block(char *devnm);
+extern void udev_unblock(void);
 
 extern int in_initrd(void);
 
@@ -1498,6 +1604,7 @@ struct dlm_hooks {
 
        dlm_lshandle_t (*create_lockspace)(const char *name,
                                           unsigned int mode);
+       dlm_lshandle_t (*open_lockspace)(const char *name);
        int (*release_lockspace)(const char *name, dlm_lshandle_t ls,
                                 int force);
        int (*ls_lock)(dlm_lshandle_t lockspace, uint32_t mode,
@@ -1506,17 +1613,16 @@ struct dlm_hooks {
                       uint32_t parent, void (*astaddr) (void *astarg),
                       void *astarg, void (*bastaddr) (void *astarg),
                       void *range);
-       int (*ls_unlock)(dlm_lshandle_t lockspace, uint32_t lkid,
-                        uint32_t flags, struct dlm_lksb *lksb,
-                        void *astarg);
+       int (*ls_unlock_wait)(dlm_lshandle_t lockspace, uint32_t lkid,
+                             uint32_t flags, struct dlm_lksb *lksb);
        int (*ls_get_fd)(dlm_lshandle_t ls);
        int (*dispatch)(int fd);
 };
 
 extern int get_cluster_name(char **name);
 extern int dlm_funs_ready(void);
-extern int cluster_get_dlmlock(int *lockid);
-extern int cluster_release_dlmlock(int lockid);
+extern int cluster_get_dlmlock(void);
+extern int cluster_release_dlmlock(void);
 extern void set_dlm_hooks(void);
 
 #define _ROUND_UP(val, base)   (((val) + (base) - 1) & ~(base - 1))