]> TLD Linux GIT Repositories - packages/lvm2.git/commitdiff
- updated to 2.03.05
authorMarcin Krol <hawk@tld-linux.org>
Sun, 14 Jul 2019 17:03:54 +0000 (19:03 +0200)
committerMarcin Krol <hawk@tld-linux.org>
Sun, 14 Jul 2019 17:03:54 +0000 (19:03 +0200)
lvm2.spec
sanlock-fix.patch [deleted file]

index d82faa3dfd00e0ed2272cf410dea9706ff6119c0..be9b802d949307ae27e7c1b2cefa249de2835fce 100644 (file)
--- a/lvm2.spec
+++ b/lvm2.spec
 Summary:       The new version of Logical Volume Manager for Linux
 Summary(pl.UTF-8):     Nowa wersja Logical Volume Managera dla Linuksa
 Name:          lvm2
-Version:       2.03.02
+Version:       2.03.05
 Release:       1
 License:       GPL v2 and LGPL v2.1
 Group:         Applications/System
 Source0:       ftp://sources.redhat.com/pub/lvm2/LVM2.%{version}.tgz
-# Source0-md5: 5fc07da5461a3794a751dcfc355827d5
+# Source0-md5: 22e4a9e66b94bbfcf81444472ed32a2d
 Patch0:                %{name}-selinux.patch
 Patch1:                device-mapper-dmsetup-export.patch
 Patch2:                %{name}-tld_init.patch
@@ -45,8 +45,7 @@ Patch4:               device-mapper-dmsetup-deps-export.patch
 Patch5:                %{name}-thin.patch
 Patch6:                %{name}-no-systemd.patch
 Patch7:                bashizm.patch
-Patch8:                sanlock-fix.patch
-Patch9:                link.patch
+Patch8:                link.patch
 URL:           http://www.sourceware.org/lvm2/
 BuildRequires: autoconf >= 2.69
 BuildRequires: automake
@@ -289,7 +288,6 @@ Statyczna biblioteka devmapper zbudowana z dietlibc.
 %patch6 -p1
 %patch7 -p1
 %patch8 -p1
-%patch9 -p1
 
 # do not force --export-symbol linker option for e.g. statically linked executables
 # -rdynamic compiler option drives linker in the right way.
@@ -464,6 +462,7 @@ fi
 %{_mandir}/man7/lvmreport.7*
 %{_mandir}/man7/lvmsystemid.7*
 %{_mandir}/man7/lvmthin.7*
+%{_mandir}/man7/lvmvdo.7*
 %{_mandir}/man8/blkdeactivate.8*
 %{_mandir}/man8/fsadm.8*
 %{_mandir}/man8/lvchange.8*
diff --git a/sanlock-fix.patch b/sanlock-fix.patch
deleted file mode 100644 (file)
index c6ca012..0000000
+++ /dev/null
@@ -1,642 +0,0 @@
-From 0b01e3f5d7ce1c954aa9f3707aa645508664f7f1 Mon Sep 17 00:00:00 2001
-From: David Teigland <teigland@redhat.com>
-Date: Mon, 22 Oct 2018 15:45:23 -0500
-Subject: [PATCH] lvmlockd: use new sanlock sector/align interface
-
-The choice about sector size and lease align size is
-now made by the sanlock user, in this case lvmlockd.
-This will allow lvmlockd to use other lease sizes in
-the future.  This also prevents breakage if hosts
-report different sector sizes, or the sector size
-reported by a device changes.
----
- daemons/lvmlockd/lvmlockd-core.c     |  21 ++-
- daemons/lvmlockd/lvmlockd-internal.h |   8 +-
- daemons/lvmlockd/lvmlockd-sanlock.c  | 311 +++++++++++++++++++++++++++++++----
- 3 files changed, 301 insertions(+), 39 deletions(-)
-
-diff --git a/daemons/lvmlockd/lvmlockd-core.c b/daemons/lvmlockd/lvmlockd-core.c
-index 6490b40..5bdbefe 100644
---- a/daemons/lvmlockd/lvmlockd-core.c
-+++ b/daemons/lvmlockd/lvmlockd-core.c
-@@ -929,12 +929,12 @@ static void lm_rem_resource(struct lockspace *ls, struct resource *r)
-               lm_rem_resource_sanlock(ls, r);
- }
--static int lm_find_free_lock(struct lockspace *ls, uint64_t *free_offset)
-+static int lm_find_free_lock(struct lockspace *ls, uint64_t *free_offset, int *sector_size, int *align_size)
- {
-       if (ls->lm_type == LD_LM_DLM)
-               return 0;
-       else if (ls->lm_type == LD_LM_SANLOCK)
--              return lm_find_free_lock_sanlock(ls, free_offset);
-+              return lm_find_free_lock_sanlock(ls, free_offset, sector_size, align_size);
-       return -1;
- }
-@@ -2427,11 +2427,16 @@ static void *lockspace_thread_main(void *arg_in)
-                       if (act->op == LD_OP_FIND_FREE_LOCK && act->rt == LD_RT_VG) {
-                               uint64_t free_offset = 0;
-+                              int sector_size = 0;
-+                              int align_size = 0;
-+
-                               log_debug("S %s find free lock", ls->name);
--                              rv = lm_find_free_lock(ls, &free_offset);
--                              log_debug("S %s find free lock %d offset %llu",
--                                        ls->name, rv, (unsigned long long)free_offset);
-+                              rv = lm_find_free_lock(ls, &free_offset, &sector_size, &align_size);
-+                              log_debug("S %s find free lock %d offset %llu sector_size %d align_size %d",
-+                                        ls->name, rv, (unsigned long long)free_offset, sector_size, align_size);
-                               ls->free_lock_offset = free_offset;
-+                              ls->free_lock_sector_size = sector_size;
-+                              ls->free_lock_align_size = align_size;
-                               list_del(&act->list);
-                               act->result = rv;
-                               add_client_result(act);
-@@ -3237,6 +3242,8 @@ static int work_init_lv(struct action *act)
-       char vg_args[MAX_ARGS+1];
-       char lv_args[MAX_ARGS+1];
-       uint64_t free_offset = 0;
-+      int sector_size = 0;
-+      int align_size = 0;
-       int lm_type = 0;
-       int rv = 0;
-@@ -3252,6 +3259,8 @@ static int work_init_lv(struct action *act)
-               lm_type = ls->lm_type;
-               memcpy(vg_args, ls->vg_args, MAX_ARGS);
-               free_offset = ls->free_lock_offset;
-+              sector_size = ls->free_lock_sector_size;
-+              align_size = ls->free_lock_align_size;
-       }
-       pthread_mutex_unlock(&lockspaces_mutex);
-@@ -3268,7 +3277,7 @@ static int work_init_lv(struct action *act)
-       if (lm_type == LD_LM_SANLOCK) {
-               rv = lm_init_lv_sanlock(ls_name, act->vg_name, act->lv_uuid,
--                                      vg_args, lv_args, free_offset);
-+                                      vg_args, lv_args, sector_size, align_size, free_offset);
-               memcpy(act->lv_args, lv_args, MAX_ARGS);
-               return rv;
-diff --git a/daemons/lvmlockd/lvmlockd-internal.h b/daemons/lvmlockd/lvmlockd-internal.h
-index a2280b8..ead3098 100644
---- a/daemons/lvmlockd/lvmlockd-internal.h
-+++ b/daemons/lvmlockd/lvmlockd-internal.h
-@@ -174,7 +174,9 @@ struct lockspace {
-       int8_t lm_type;                 /* lock manager: LM_DLM, LM_SANLOCK */
-       void *lm_data;
-       uint64_t host_id;
--      uint64_t free_lock_offset;      /* start search for free lock here */
-+      uint64_t free_lock_offset;      /* for sanlock, start search for free lock here */
-+      int free_lock_sector_size;      /* for sanlock */
-+      int free_lock_align_size;       /* for sanlock */
-       uint32_t start_client_id;       /* client_id that started the lockspace */
-       pthread_t thread;               /* makes synchronous lock requests */
-@@ -468,7 +470,7 @@ static inline int lm_hosts_dlm(struct lockspace *ls, int notify)
- #ifdef LOCKDSANLOCK_SUPPORT
- int lm_init_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_args);
--int lm_init_lv_sanlock(char *ls_name, char *vg_name, char *lv_name, char *vg_args, char *lv_args, uint64_t free_offset);
-+int lm_init_lv_sanlock(char *ls_name, char *vg_name, char *lv_name, char *vg_args, char *lv_args, int sector_size, int align_size, uint64_t free_offset);
- int lm_free_lv_sanlock(struct lockspace *ls, struct resource *r);
- int lm_rename_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_args);
- int lm_prepare_lockspace_sanlock(struct lockspace *ls);
-@@ -488,7 +490,7 @@ int lm_gl_is_enabled(struct lockspace *ls);
- int lm_get_lockspaces_sanlock(struct list_head *ls_rejoin);
- int lm_data_size_sanlock(void);
- int lm_is_running_sanlock(void);
--int lm_find_free_lock_sanlock(struct lockspace *ls, uint64_t *free_offset);
-+int lm_find_free_lock_sanlock(struct lockspace *ls, uint64_t *free_offset, int *sector_size, int *align_size);
- static inline int lm_support_sanlock(void)
- {
-diff --git a/daemons/lvmlockd/lvmlockd-sanlock.c b/daemons/lvmlockd/lvmlockd-sanlock.c
-index d5d6864..892b446 100644
---- a/daemons/lvmlockd/lvmlockd-sanlock.c
-+++ b/daemons/lvmlockd/lvmlockd-sanlock.c
-@@ -24,10 +24,29 @@
- #include "sanlock_admin.h"
- #include "sanlock_resource.h"
-+/* FIXME: these are copied from sanlock.h only until
-+   an updated version of sanlock is available with them. */
-+#define SANLK_RES_ALIGN1M       0x00000010
-+#define SANLK_RES_ALIGN2M       0x00000020
-+#define SANLK_RES_ALIGN4M       0x00000040
-+#define SANLK_RES_ALIGN8M       0x00000080
-+#define SANLK_RES_SECTOR512     0x00000100
-+#define SANLK_RES_SECTOR4K      0x00000200
-+#define SANLK_LSF_ALIGN1M       0x00000010
-+#define SANLK_LSF_ALIGN2M       0x00000020
-+#define SANLK_LSF_ALIGN4M       0x00000040
-+#define SANLK_LSF_ALIGN8M       0x00000080
-+#define SANLK_LSF_SECTOR512     0x00000100
-+#define SANLK_LSF_SECTOR4K      0x00000200
-+
- #include <stddef.h>
- #include <poll.h>
- #include <errno.h>
- #include <syslog.h>
-+#include <blkid/blkid.h>
-+#include <linux/kdev_t.h>
-+
-+#define ONE_MB 1048576
- /*
- -------------------------------------------------------------------------------
-@@ -139,6 +158,7 @@ release all the leases for the VG.
- struct lm_sanlock {
-       struct sanlk_lockspace ss;
-+      int sector_size;
-       int align_size;
-       int sock; /* sanlock daemon connection */
- };
-@@ -201,7 +221,6 @@ int lm_data_size_sanlock(void)
-  * ...
-  */
--#define LS_BEGIN 0
- #define GL_LOCK_BEGIN UINT64_C(65)
- #define VG_LOCK_BEGIN UINT64_C(66)
- #define LV_LOCK_BEGIN UINT64_C(67)
-@@ -324,6 +343,152 @@ fail:
-       return rv;
- }
-+static void _read_sysfs_size(dev_t devno, const char *name, unsigned int *val)
-+{
-+      char path[PATH_MAX];
-+      char buf[32];
-+      FILE *fp;
-+      size_t len;
-+
-+      snprintf(path, sizeof(path), "/sys/dev/block/%d:%d/queue/%s",
-+               (int)MAJOR(devno), (int)MINOR(devno), name);
-+
-+      if (!(fp = fopen(path, "r")))
-+              return;
-+
-+      if (!fgets(buf, sizeof(buf), fp))
-+              goto out;
-+
-+      if ((len = strlen(buf)) && buf[len - 1] == '\n')
-+              buf[--len] = '\0';
-+
-+      if (strlen(buf))
-+              *val = atoi(buf);
-+out:
-+      fclose(fp);
-+}
-+
-+/* Select sector/align size for a new VG based on what the device reports for
-+   sector size of the lvmlock LV. */
-+
-+static int get_sizes_device(char *path, int *sector_size, int *align_size)
-+{
-+      unsigned int physical_block_size = 0;
-+      unsigned int logical_block_size = 0;
-+      struct stat st;
-+      int rv;
-+
-+      rv = stat(path, &st);
-+      if (rv < 0) {
-+              log_error("Failed to stat device to get block size %s %d", path, errno);
-+              return -1;
-+      }
-+
-+      _read_sysfs_size(st.st_rdev, "physical_block_size", &physical_block_size);
-+      _read_sysfs_size(st.st_rdev, "logical_block_size", &logical_block_size);
-+
-+      if ((physical_block_size == 512) && (logical_block_size == 512)) {
-+              *sector_size = 512;
-+              *align_size = ONE_MB;
-+              return 0;
-+      }
-+
-+      if ((physical_block_size == 4096) && (logical_block_size == 4096)) {
-+              *sector_size = 4096;
-+              *align_size = 8 * ONE_MB;
-+              return 0;
-+      }
-+
-+      if (physical_block_size && (physical_block_size != 512) && (physical_block_size != 4096)) {
-+              log_warn("WARNING: invalid block sizes physical %u logical %u for %s",
-+                       physical_block_size, logical_block_size, path);
-+              physical_block_size = 0;
-+      }
-+
-+      if (logical_block_size && (logical_block_size != 512) && (logical_block_size != 4096)) {
-+              log_warn("WARNING: invalid block sizes physical %u logical %u for %s",
-+                       physical_block_size, logical_block_size, path);
-+              logical_block_size = 0;
-+      }
-+
-+      if (!physical_block_size && !logical_block_size) {
-+              log_error("Failed to get a block size for %s", path);
-+              return -1;
-+      }
-+
-+      if (!physical_block_size || !logical_block_size) {
-+              log_warn("WARNING: incomplete block size information physical %u logical %u for %s",
-+                       physical_block_size, logical_block_size, path);
-+              if (!physical_block_size)
-+                      physical_block_size = logical_block_size;
-+              if (!logical_block_size)
-+                      logical_block_size = physical_block_size;
-+      }
-+
-+      if ((logical_block_size == 4096) && (physical_block_size == 512)) {
-+              log_warn("WARNING: mixed block sizes physical %u logical %u (using 4096) for %s",
-+                       physical_block_size, logical_block_size, path);
-+              *sector_size = 4096;
-+              *align_size = 8 * ONE_MB;
-+              return 0;
-+      }
-+
-+      if ((physical_block_size == 4096) && (logical_block_size == 512)) {
-+              log_warn("WARNING: mixed block sizes physical %u logical %u (using 4096) for %s",
-+                       physical_block_size, logical_block_size, path);
-+              *sector_size = 4096;
-+              *align_size = 8 * ONE_MB;
-+              return 0;
-+      }
-+
-+      if (physical_block_size == 512) {
-+              *sector_size = 512;
-+              *align_size = ONE_MB;
-+              return 0;
-+      }
-+
-+      if (physical_block_size == 4096) {
-+              *sector_size = 4096;
-+              *align_size = 8 * ONE_MB;
-+              return 0;
-+      }
-+
-+      log_error("Failed to get a block size for %s", path);
-+      return -1;
-+}
-+
-+
-+/* Get the sector/align sizes that were used to create an existing VG.
-+   sanlock encoded this in the lockspace/resource structs on disk. */
-+
-+static int get_sizes_lockspace(char *path, int *sector_size, int *align_size)
-+{
-+      struct sanlk_lockspace ss;
-+      uint32_t io_timeout = 0;
-+      int rv;
-+
-+      memset(&ss, 0, sizeof(ss));
-+      memcpy(ss.host_id_disk.path, path, SANLK_PATH_LEN);
-+      ss.host_id_disk.offset = 0;
-+
-+      rv = sanlock_read_lockspace(&ss, 0, &io_timeout);
-+      if (rv < 0) {
-+              log_error("get_sizes_lockspace %s error %d", path, rv);
-+              return rv;
-+      }
-+
-+      if ((ss.flags & SANLK_LSF_SECTOR4K) && (ss.flags & SANLK_LSF_ALIGN8M)) {
-+              *sector_size = 4096;
-+              *align_size = 8 * ONE_MB;
-+      } else if ((ss.flags & SANLK_LSF_SECTOR512) && (ss.flags & SANLK_LSF_ALIGN1M)) {
-+              *sector_size = 512;
-+              *align_size = ONE_MB;
-+      }
-+
-+      log_debug("get_sizes_lockspace found %d %d", *sector_size, *align_size);
-+      return 0;
-+}
-+
- /*
-  * vgcreate
-  *
-@@ -343,7 +508,8 @@ int lm_init_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_ar
-       uint32_t daemon_version;
-       uint32_t daemon_proto;
-       uint64_t offset;
--      int align_size;
-+      int sector_size = 0;
-+      int align_size = 0;
-       int i, rv;
-       memset(&ss, 0, sizeof(ss));
-@@ -387,23 +553,25 @@ int lm_init_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_ar
-       log_debug("sanlock daemon version %08x proto %08x",
-                 daemon_version, daemon_proto);
--      rv = sanlock_align(&disk);
--      if (rv <= 0) {
-+      /* Nothing formatted on disk yet, use what the device reports. */
-+      rv = get_sizes_device(disk.path, &sector_size, &align_size);
-+      if (rv < 0) {
-               if (rv == -EACCES) {
-                       log_error("S %s init_vg_san sanlock error -EACCES: no permission to access %s",
-                                 ls_name, disk.path);
-                       return -EDEVOPEN;
-               } else {
--                      log_error("S %s init_vg_san sanlock error %d trying to get align size of %s",
-+                      log_error("S %s init_vg_san sanlock error %d trying to get sector/align size of %s",
-                                 ls_name, rv, disk.path);
-                       return -EARGS;
-               }
--      } else
--              align_size = rv;
-+      }
-       strncpy(ss.name, ls_name, SANLK_NAME_LEN);
-       memcpy(ss.host_id_disk.path, disk.path, SANLK_PATH_LEN);
--      ss.host_id_disk.offset = LS_BEGIN * align_size;
-+      ss.host_id_disk.offset = 0;
-+      ss.flags = (sector_size == 4096) ? (SANLK_LSF_SECTOR4K | SANLK_LSF_ALIGN8M) :
-+                                         (SANLK_LSF_SECTOR512 | SANLK_LSF_ALIGN1M);
-       rv = sanlock_write_lockspace(&ss, 0, 0, sanlock_io_timeout);
-       if (rv < 0) {
-@@ -436,6 +604,8 @@ int lm_init_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_ar
-       memcpy(rd.rs.disks[0].path, disk.path, SANLK_PATH_LEN);
-       rd.rs.disks[0].offset = align_size * GL_LOCK_BEGIN;
-       rd.rs.num_disks = 1;
-+      rd.rs.flags = (sector_size == 4096) ? (SANLK_RES_SECTOR4K | SANLK_RES_ALIGN8M) :
-+                                            (SANLK_RES_SECTOR512 | SANLK_RES_ALIGN1M);
-       rv = sanlock_write_resource(&rd.rs, 0, 0, 0);
-       if (rv < 0) {
-@@ -449,6 +619,8 @@ int lm_init_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_ar
-       memcpy(rd.rs.disks[0].path, disk.path, SANLK_PATH_LEN);
-       rd.rs.disks[0].offset = align_size * VG_LOCK_BEGIN;
-       rd.rs.num_disks = 1;
-+      rd.rs.flags = (sector_size == 4096) ? (SANLK_RES_SECTOR4K | SANLK_RES_ALIGN8M) :
-+                                            (SANLK_RES_SECTOR512 | SANLK_RES_ALIGN1M);
-       rv = sanlock_write_resource(&rd.rs, 0, 0, 0);
-       if (rv < 0) {
-@@ -472,6 +644,8 @@ int lm_init_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_ar
-       memset(&rd, 0, sizeof(rd));
-       rd.rs.num_disks = 1;
-+      rd.rs.flags = (sector_size == 4096) ? (SANLK_RES_SECTOR4K | SANLK_RES_ALIGN8M) :
-+                                            (SANLK_RES_SECTOR512 | SANLK_RES_ALIGN1M);
-       memcpy(rd.rs.disks[0].path, disk.path, SANLK_PATH_LEN);
-       strncpy(rd.rs.lockspace_name, ls_name, SANLK_NAME_LEN);
-       strcpy(rd.rs.name, "#unused");
-@@ -510,13 +684,13 @@ int lm_init_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_ar
-  */
- int lm_init_lv_sanlock(char *ls_name, char *vg_name, char *lv_name,
--                     char *vg_args, char *lv_args, uint64_t free_offset)
-+                     char *vg_args, char *lv_args,
-+                     int sector_size, int align_size, uint64_t free_offset)
- {
-       struct sanlk_resourced rd;
-       char lock_lv_name[MAX_ARGS+1];
-       char lock_args_version[MAX_ARGS+1];
-       uint64_t offset;
--      int align_size;
-       int rv;
-       memset(&rd, 0, sizeof(rd));
-@@ -534,7 +708,7 @@ int lm_init_lv_sanlock(char *ls_name, char *vg_name, char *lv_name,
-                LV_LOCK_ARGS_MAJOR, LV_LOCK_ARGS_MINOR, LV_LOCK_ARGS_PATCH);
-       if (daemon_test) {
--              align_size = 1048576;
-+              align_size = ONE_MB;
-               snprintf(lv_args, MAX_ARGS, "%s:%llu",
-                        lock_args_version,
-                        (unsigned long long)((align_size * LV_LOCK_BEGIN) + (align_size * daemon_test_lv_count)));
-@@ -547,12 +721,35 @@ int lm_init_lv_sanlock(char *ls_name, char *vg_name, char *lv_name,
-       if ((rv = build_dm_path(rd.rs.disks[0].path, SANLK_PATH_LEN, vg_name, lock_lv_name)))
-               return rv;
--      align_size = sanlock_align(&rd.rs.disks[0]);
--      if (align_size <= 0) {
--              log_error("S %s init_lv_san align error %d", ls_name, align_size);
--              return -EINVAL;
-+      /*
-+       * These should not usually be zero, maybe only the first time this function is called?
-+       * We need to use the same sector/align sizes that are already being used.
-+       */
-+      if (!sector_size || !align_size) {
-+              rv = get_sizes_lockspace(rd.rs.disks[0].path, &sector_size, &align_size);
-+              if (rv < 0) {
-+                      log_error("S %s init_lv_san read_lockspace error %d %s",
-+                                ls_name, rv, rd.rs.disks[0].path);
-+                      return rv;
-+              }
-+
-+              if (sector_size)
-+                      log_debug("S %s init_lv_san found ls sector_size %d align_size %d", ls_name, sector_size, align_size);
-+              else {
-+                      /* use the old method */
-+                      align_size = sanlock_align(&rd.rs.disks[0]);
-+                      if (align_size <= 0) {
-+                              log_error("S %s init_lv_san align error %d", ls_name, align_size);
-+                              return -EINVAL;
-+                      }
-+                      sector_size = (align_size == ONE_MB) ? 512 : 4096;
-+                      log_debug("S %s init_lv_san found old sector_size %d align_size %d", ls_name, sector_size, align_size);
-+              }
-       }
-+      rd.rs.flags = (sector_size == 4096) ? (SANLK_RES_SECTOR4K | SANLK_RES_ALIGN8M) :
-+                                            (SANLK_RES_SECTOR512 | SANLK_RES_ALIGN1M);
-+
-       if (free_offset)
-               offset = free_offset;
-       else
-@@ -595,6 +792,8 @@ int lm_init_lv_sanlock(char *ls_name, char *vg_name, char *lv_name,
-                                 ls_name, lv_name, (unsigned long long)offset);
-                       strncpy(rd.rs.name, lv_name, SANLK_NAME_LEN);
-+                      rd.rs.flags = (sector_size == 4096) ? (SANLK_RES_SECTOR4K | SANLK_RES_ALIGN8M) :
-+                                                            (SANLK_RES_SECTOR512 | SANLK_RES_ALIGN1M);
-                       rv = sanlock_write_resource(&rd.rs, 0, 0, 0);
-                       if (!rv) {
-@@ -626,7 +825,8 @@ int lm_rename_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_
-       char lock_lv_name[MAX_ARGS+1];
-       uint64_t offset;
-       uint32_t io_timeout;
--      int align_size;
-+      int sector_size = 0;
-+      int align_size = 0;
-       int i, rv;
-       memset(&disk, 0, sizeof(disk));
-@@ -655,20 +855,13 @@ int lm_rename_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_
-       /* FIXME: device is not always ready for us here */
-       sleep(1);
--      align_size = sanlock_align(&disk);
--      if (align_size <= 0) {
--              log_error("S %s rename_vg_san bad align size %d %s",
--                        ls_name, align_size, disk.path);
--              return -EINVAL;
--      }
--
-       /*
-        * Lockspace
-        */
-       memset(&ss, 0, sizeof(ss));
-       memcpy(ss.host_id_disk.path, disk.path, SANLK_PATH_LEN);
--      ss.host_id_disk.offset = LS_BEGIN * align_size;
-+      ss.host_id_disk.offset = 0;
-       rv = sanlock_read_lockspace(&ss, 0, &io_timeout);
-       if (rv < 0) {
-@@ -677,6 +870,26 @@ int lm_rename_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_
-               return rv;
-       }
-+      if ((ss.flags & SANLK_LSF_SECTOR4K) && (ss.flags & SANLK_LSF_ALIGN8M)) {
-+              sector_size = 4096;
-+              align_size = 8 * ONE_MB;
-+      } else if ((ss.flags & SANLK_LSF_SECTOR512) && (ss.flags & SANLK_LSF_ALIGN1M)) {
-+              sector_size = 512;
-+              align_size = ONE_MB;
-+      } else {
-+              /* use the old method */
-+              align_size = sanlock_align(&ss.host_id_disk);
-+              if (align_size <= 0) {
-+                      log_error("S %s rename_vg_san unknown sector/align size for %s",
-+                               ls_name, ss.host_id_disk.path);
-+                      return -1;
-+              }
-+              sector_size = (align_size == ONE_MB) ? 512 : 4096;
-+      }
-+
-+      if (!sector_size || !align_size)
-+              return -1;
-+
-       strncpy(ss.name, ls_name, SANLK_NAME_LEN);
-       rv = sanlock_write_lockspace(&ss, 0, 0, sanlock_io_timeout);
-@@ -830,6 +1043,11 @@ int lm_ex_disable_gl_sanlock(struct lockspace *ls)
-       rd1.rs.num_disks = 1;
-       strncpy(rd1.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN-1);
-       rd1.rs.disks[0].offset = lms->align_size * GL_LOCK_BEGIN;
-+      
-+      rd1.rs.flags = (lms->sector_size == 4096) ? (SANLK_RES_SECTOR4K | SANLK_RES_ALIGN8M) :
-+                                                  (SANLK_RES_SECTOR512 | SANLK_RES_ALIGN1M);
-+      rd2.rs.flags = (lms->sector_size == 4096) ? (SANLK_RES_SECTOR4K | SANLK_RES_ALIGN8M) :
-+                                                  (SANLK_RES_SECTOR512 | SANLK_RES_ALIGN1M);
-       rv = sanlock_acquire(lms->sock, -1, 0, 1, &rs1, NULL);
-       if (rv < 0) {
-@@ -891,6 +1109,8 @@ int lm_able_gl_sanlock(struct lockspace *ls, int enable)
-       rd.rs.num_disks = 1;
-       strncpy(rd.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN-1);
-       rd.rs.disks[0].offset = lms->align_size * GL_LOCK_BEGIN;
-+      rd.rs.flags = (lms->sector_size == 4096) ? (SANLK_RES_SECTOR4K | SANLK_RES_ALIGN8M) :
-+                                                 (SANLK_RES_SECTOR512 | SANLK_RES_ALIGN1M);
-       rv = sanlock_write_resource(&rd.rs, 0, 0, 0);
-       if (rv < 0) {
-@@ -936,7 +1156,8 @@ static int gl_is_enabled(struct lockspace *ls, struct lm_sanlock *lms)
-       rv = sanlock_read_resource(&rd.rs, 0);
-       if (rv < 0) {
--              log_error("gl_is_enabled read_resource error %d", rv);
-+              log_error("gl_is_enabled read_resource align_size %d offset %llu error %d",
-+                        lms->align_size, (unsigned long long)offset, rv);
-               return rv;
-       }
-@@ -973,7 +1194,7 @@ int lm_gl_is_enabled(struct lockspace *ls)
-  * been disabled.)
-  */
--int lm_find_free_lock_sanlock(struct lockspace *ls, uint64_t *free_offset)
-+int lm_find_free_lock_sanlock(struct lockspace *ls, uint64_t *free_offset, int *sector_size, int *align_size)
- {
-       struct lm_sanlock *lms = (struct lm_sanlock *)ls->lm_data;
-       struct sanlk_resourced rd;
-@@ -983,15 +1204,22 @@ int lm_find_free_lock_sanlock(struct lockspace *ls, uint64_t *free_offset)
-       int round = 0;
-       if (daemon_test) {
--              *free_offset = (1048576 * LV_LOCK_BEGIN) + (1048576 * (daemon_test_lv_count + 1));
-+              *free_offset = (ONE_MB * LV_LOCK_BEGIN) + (ONE_MB * (daemon_test_lv_count + 1));
-+              *sector_size = 512;
-+              *align_size = ONE_MB;
-               return 0;
-       }
-+      *sector_size = lms->sector_size;
-+      *align_size = lms->align_size;
-+
-       memset(&rd, 0, sizeof(rd));
-       strncpy(rd.rs.lockspace_name, ls->name, SANLK_NAME_LEN);
-       rd.rs.num_disks = 1;
-       strncpy(rd.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN-1);
-+      rd.rs.flags = (lms->sector_size == 4096) ? (SANLK_RES_SECTOR4K | SANLK_RES_ALIGN8M) :
-+                                                 (SANLK_RES_SECTOR512 | SANLK_RES_ALIGN1M);
-       if (ls->free_lock_offset)
-               offset = ls->free_lock_offset;
-@@ -1091,6 +1319,8 @@ int lm_prepare_lockspace_sanlock(struct lockspace *ls)
-       char disk_path[SANLK_PATH_LEN];
-       char killpath[SANLK_PATH_LEN];
-       char killargs[SANLK_PATH_LEN];
-+      int sector_size = 0;
-+      int align_size = 0;
-       int gl_found;
-       int ret, rv;
-@@ -1207,13 +1437,33 @@ int lm_prepare_lockspace_sanlock(struct lockspace *ls)
-               goto fail;
-       }
--      lms->align_size = sanlock_align(&lms->ss.host_id_disk);
--      if (lms->align_size <= 0) {
--              log_error("S %s prepare_lockspace_san align error %d", lsname, lms->align_size);
-+      rv = get_sizes_lockspace(disk_path, &sector_size, &align_size);
-+      if (rv < 0) {
-+              log_error("S %s prepare_lockspace_san cannot get sector/align sizes %d", lsname, rv);
-               ret = -EMANAGER;
-               goto fail;
-       }
-+      if (!sector_size) {
-+              log_debug("S %s prepare_lockspace_san using old size method", lsname);
-+              /* use the old method */
-+              align_size = sanlock_align(&lms->ss.host_id_disk);
-+              if (align_size <= 0) {
-+                      log_error("S %s prepare_lockspace_san align error %d", lsname, align_size);
-+                      return -EINVAL;
-+              }
-+              sector_size = (align_size == ONE_MB) ? 512 : 4096;
-+              log_debug("S %s prepare_lockspace_san found old sector_size %d align_size %d", lsname, sector_size, align_size);
-+      }
-+
-+      log_debug("S %s prepare_lockspace_san sizes %d %d", lsname, sector_size, align_size);
-+
-+      lms->align_size = align_size;
-+      lms->sector_size = sector_size;
-+
-+      lms->ss.flags = (sector_size == 4096) ? (SANLK_LSF_SECTOR4K | SANLK_LSF_ALIGN8M) :
-+                                              (SANLK_LSF_SECTOR512 | SANLK_LSF_ALIGN1M);
-+
-       gl_found = gl_is_enabled(ls, lms);
-       if (gl_found < 0) {
-               log_error("S %s prepare_lockspace_san gl_enabled error %d", lsname, gl_found);
-@@ -1351,6 +1601,7 @@ static int lm_add_resource_sanlock(struct lockspace *ls, struct resource *r)
-       strncpy(rds->rs.name, r->name, SANLK_NAME_LEN);
-       rds->rs.num_disks = 1;
-       memcpy(rds->rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN);
-+      rds->rs.flags = (lms->sector_size == 4096) ? (SANLK_RES_SECTOR4K | SANLK_RES_ALIGN8M) : (SANLK_RES_SECTOR512 | SANLK_RES_ALIGN1M);
-       if (r->type == LD_RT_GL)
-               rds->rs.disks[0].offset = GL_LOCK_BEGIN * lms->align_size;
--- 
-2.9.3
-