This is an automated email from the git hooks/post-receive script.
teigland pushed a commit to branch master
in repository sanlock.
commit 129e0d023fedd2ddd21ca8c115b00e4134fcdba7
Author: Nir Soffer <nsoffer(a)redhat.com>
Date: Sat Mar 3 03:17:40 2018 +0200
Fix rindex_delete
rindex_delete() did not search for the entry, and was deleting the wrong
entry (at offset 320) and clearing the wrong lease (0).
Signed-off-by: Nir Soffer <nsoffer(a)redhat.com>
---
src/rindex.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/src/rindex.c b/src/rindex.c
index 601c8bf..4e8e3b7 100644
--- a/src/rindex.c
+++ b/src/rindex.c
@@ -584,7 +584,6 @@ int rindex_delete(struct task *task, struct sanlk_rindex *ri,
char *rindex_iobuf = NULL;
uint64_t res_offset = re->offset;
uint64_t ent_offset;
- int entry_num;
int sector_size, align_size;
int rv;
@@ -620,8 +619,6 @@ int rindex_delete(struct task *task, struct sanlk_rindex *ri,
sector_size = rx.header.sector_size;
align_size = sector_size_to_align_size(sector_size);
- entry_num = (res_offset - rx.disk->offset - (2 * align_size)) / align_size;
- ent_offset = sector_size + (entry_num * sizeof(struct rindex_entry));
if (re->offset && (re->offset % align_size)) {
rv = SANLK_RINDEX_OFFSET;
@@ -642,7 +639,6 @@ int rindex_delete(struct task *task, struct sanlk_rindex *ri,
rv = -ENOMEM;
goto out_clear;
}
- res_token->disks[0].offset = res_offset;
rv = paxos_lease_acquire(task, rx_token,
PAXOS_ACQUIRE_OWNER_NOWAIT | PAXOS_ACQUIRE_QUIET_FAIL,
@@ -659,6 +655,14 @@ int rindex_delete(struct task *task, struct sanlk_rindex *ri,
goto out_lease;
}
+ /* find the entry */
+
+ rv = search_entries(&rx, rindex_iobuf, &ent_offset, &res_offset, 0,
re->name);
+ if (rv < 0) {
+ log_error("rindex_delete failed to find entry '%s': %d", re->name,
rv);
+ goto out_iobuf;
+ }
+
rv = update_rindex(task, &spi, &rx, rindex_iobuf, re, ent_offset, res_offset,
1);
if (rv < 0) {
log_error("rindex_delete failed to update rindex %d", rv);
@@ -667,6 +671,8 @@ int rindex_delete(struct task *task, struct sanlk_rindex *ri,
/* clear the paxos lease */
+ res_token->disks[0].offset = res_offset;
+
rv = paxos_lease_init(task, res_token, 0, 0, 1);
if (rv < 0) {
log_error("rindex_delete failed to init new lease %d", rv);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.