This is an automated email from the git hooks/post-receive script.
teigland pushed a commit to branch master in repository sanlock.
The following commit(s) were added to refs/heads/master by this push: new 4c32c1d sanlock: retry release on EIO 4c32c1d is described below
commit 4c32c1d763727552cf984502827e22d795a61c10 Author: David Teigland teigland@redhat.com AuthorDate: Mon Mar 3 13:43:50 2025 -0600
sanlock: retry release on EIO
Releasing a lease on disk would be retried if it failed from an io timeout. It should also retry if it fails with EIO, in case the i/o errors are transient. --- src/resource.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/src/resource.c b/src/resource.c index 5fb5183..ee8b9dc 100644 --- a/src/resource.c +++ b/src/resource.c @@ -1185,7 +1185,7 @@ static int _release_token(struct task *task, struct token *token, ret = rv; }
- if (rv == SANLK_AIO_TIMEOUT) + if (rv == SANLK_AIO_TIMEOUT || rv == -EIO) retry_async = 1;
/* Even when acquire did not get far enough to get a copy of the @@ -1200,7 +1200,7 @@ static int _release_token(struct task *task, struct token *token, if (rv < 0) ret = rv;
- if (rv == SANLK_AIO_TIMEOUT) + if (rv == SANLK_AIO_TIMEOUT || rv == -EIO) retry_async = 1;
/* want to see this result in sanlock.log but not worry people with error */ @@ -1216,7 +1216,7 @@ static int _release_token(struct task *task, struct token *token, ret = rv; }
- if (rv == SANLK_AIO_TIMEOUT) + if (rv == SANLK_AIO_TIMEOUT || rv == -EIO) retry_async = 1;
rv = release_disk(task, token, resrename, &r->leader); @@ -1225,7 +1225,7 @@ static int _release_token(struct task *task, struct token *token, ret = rv; }
- if (rv == SANLK_AIO_TIMEOUT) + if (rv == SANLK_AIO_TIMEOUT || rv == -EIO) retry_async = 1;
} else if (r_flags & R_SHARED) { @@ -1237,7 +1237,7 @@ static int _release_token(struct task *task, struct token *token, ret = rv; }
- if (rv == SANLK_AIO_TIMEOUT) + if (rv == SANLK_AIO_TIMEOUT || rv == -EIO) retry_async = 1;
} else { @@ -1271,7 +1271,7 @@ static int _release_token(struct task *task, struct token *token, ret = rv; }
- if (rv == SANLK_AIO_TIMEOUT) + if (rv == SANLK_AIO_TIMEOUT || rv == -EIO) retry_async = 1; }
@@ -1301,7 +1301,7 @@ static int _release_token(struct task *task, struct token *token, pthread_mutex_lock(&resource_mutex); r->flags |= R_THREAD_RELEASE; pthread_mutex_unlock(&resource_mutex); - return SANLK_AIO_TIMEOUT; + return ret; }
static int release_token_nodisk_opened(struct task *task, struct token *token) @@ -2465,7 +2465,7 @@ static void resource_thread_release(struct task *task, struct resource *r, struc if (rv < 0) log_errot(token, "release async erase all write_host_block %d", rv);
- if (rv == SANLK_AIO_TIMEOUT) + if (rv == SANLK_AIO_TIMEOUT || rv == -EIO) retry_async = 1;
/* Even when acquire did not get far enough to get a copy of the @@ -2477,7 +2477,7 @@ static void resource_thread_release(struct task *task, struct resource *r, struc else rv = paxos_lease_release(task, token, NULL, &r->leader, &leader);
- if (rv == SANLK_AIO_TIMEOUT) + if (rv == SANLK_AIO_TIMEOUT || rv == -EIO) retry_async = 1;
/* want to see this result in sanlock.log but not worry people with error */ @@ -2489,14 +2489,14 @@ static void resource_thread_release(struct task *task, struct resource *r, struc if (rv < 0) log_errot(token, "release async undo shared write_host_block %d", rv);
- if (rv == SANLK_AIO_TIMEOUT) + if (rv == SANLK_AIO_TIMEOUT || rv == -EIO) retry_async = 1;
rv = release_disk(task, token, NULL, &r->leader); if (rv < 0) log_errot(token, "release async undo shared release leader %d", rv);
- if (rv == SANLK_AIO_TIMEOUT) + if (rv == SANLK_AIO_TIMEOUT || rv == -EIO) retry_async = 1;
} else if (r_flags & R_SHARED) { @@ -2506,7 +2506,7 @@ static void resource_thread_release(struct task *task, struct resource *r, struc if (rv < 0) log_errot(token, "release async shared write_host_block %d", rv);
- if (rv == SANLK_AIO_TIMEOUT) + if (rv == SANLK_AIO_TIMEOUT || rv == -EIO) retry_async = 1; } else { /* normal release of ex lease */ @@ -2529,7 +2529,7 @@ static void resource_thread_release(struct task *task, struct resource *r, struc if (rv < 0) log_errot(token, "release async release leader %d", rv);
- if (rv == SANLK_AIO_TIMEOUT) + if (rv == SANLK_AIO_TIMEOUT || rv == -EIO) retry_async = 1; }
sanlock-devel@lists.fedorahosted.org