/usr/include/sanlock.h is in libsanlock-dev 3.3.0-2.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | /*
* Copyright 2010-2011 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*/
#ifndef __SANLOCK_H__
#define __SANLOCK_H__
/* an acquire or release call can specify this many explicit
resources in a single call. */
#define SANLK_MAX_RESOURCES 8
/* max resource name length */
#define SANLK_NAME_LEN 48
/* max disk path length, includes terminating \0 byte, and escape chars,
i.e. the strlen with esc chars inserted must still be less than 1024. */
#define SANLK_PATH_LEN 1024
/* max length of kill script path and args, includes terminate \0 byte */
#define SANLK_HELPER_PATH_LEN 128
#define SANLK_HELPER_ARGS_LEN 128
/* max disks in a single lease */
#define SANLK_MAX_DISKS 4
/*
* max length of a sanlk_resource in string format
* <lockspace_name>:<resource_name>:<path>:<offset>[:<path>:<offset>...]:<lver>
* 48 SANLK_NAME_LEN
* + 1 colon
* + 48 SANLK_NAME_LEN
* + 1 colon
* + 4184 (4 MAX_DISKS * (1024 SANLK_PATH_LEN + 1 colon + 20 offset + 1 colon))
* + 20 lver
* ------
* 4302
*/
#define SANLK_MAX_RES_STR 4400
/* TODO: add more padding to sanlk_disk so we can extend sync_disk
later without changing abi */
struct sanlk_disk {
char path[SANLK_PATH_LEN]; /* must include terminating \0 */
uint64_t offset;
uint32_t pad1;
uint32_t pad2;
};
/*
* PERSISTENT: if the pid holding the resource lease exits,
* the lease will not be released, but will be moved to the
* orphans list. On disk and from the perspective of other
* hosts, nothing changes when a lease is orphaned; it continues
* to be held by the host.
*
* (If persistent shared locks are used on a resource, then
* all the locks on that resource should be persistent.)
*
* A new process can acquire an orphan resource using
* the ACQUIRE_ORPHAN flag. This implies that the lockspace
* had continued running and the resource not released by the
* host between the time the resource became an orphan and was
* then transferred to a new process.
*
* Orphan impact on the lockspace: if the lockspace is stopping
* because of rem, or lease failure, the ls config option
* USED_BY_ORPHANS will block the release of the lockspace
* (like the USED option), if orphans exist for the lockspace.
* Without USED_BY_ORPHANS, the lockspace would exit and
* leave the orphan resources unchanged (not released) on disk.
* The unreleased orphan resources could be acquired by another
* host if the lockspace lease is cleanly released.
*/
#define SANLK_RES_LVER 0x1 /* lver field is set */
#define SANLK_RES_NUM_HOSTS 0x2 /* data32 field is new num_hosts */
#define SANLK_RES_SHARED 0x4
#define SANLK_RES_PERSISTENT 0x8
struct sanlk_resource {
char lockspace_name[SANLK_NAME_LEN]; /* terminating \0 not required */
char name[SANLK_NAME_LEN]; /* terminating \0 not required */
uint64_t lver; /* use with SANLK_RES_LVER */
uint64_t data64; /* per-resource command-specific data */
uint32_t data32; /* per-resource command-specific data */
uint32_t unused;
uint32_t flags; /* SANLK_RES_ */
uint32_t num_disks;
/* followed by num_disks sanlk_disk structs */
struct sanlk_disk disks[0];
};
/* command-specific command options (can include per resource data, but
that requires the extra work of segmenting it by resource name) */
struct sanlk_options {
char owner_name[SANLK_NAME_LEN]; /* optional user friendly name */
uint32_t flags;
uint32_t len;
/* followed by len bytes (migration input will use this) */
char str[0];
};
struct sanlk_lockspace {
char name[SANLK_NAME_LEN];
uint64_t host_id;
uint32_t flags;
struct sanlk_disk host_id_disk;
};
struct sanlk_host {
uint64_t host_id;
uint64_t generation;
uint64_t timestamp;
uint32_t io_timeout;
uint32_t flags;
};
struct sanlk_host_event {
uint64_t host_id;
uint64_t generation;
uint64_t event;
uint64_t data;
};
size_t sanlock_path_export(char *dst, const char *src, size_t dstlen);
size_t sanlock_path_import(char *dst, const char *src, size_t dstlen);
#endif
|