In some situations, when there is a lot of "churn", a single retry is simply not enough. Since there is no single correct value for the number of times that these retries should occur, it makes some sense to allow the admin to tune that value. This patch adds a sysctl to allow the admin to tune the number of times to retry these operations before giving up. Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx> --- fs/namei.c | 2 ++ include/linux/fs.h | 7 ++++--- kernel/sysctl.c | 7 +++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index f0916e6..70592ec 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -110,6 +110,8 @@ * any extra contention... */ +unsigned int estale_retries __read_mostly = 1; + /* In order to reduce some races, while at the same time doing additional * checking and hopefully speeding things up, we copy filenames to the * kernel data space before using them.. diff --git a/include/linux/fs.h b/include/linux/fs.h index 3e42289..1789199 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2023,14 +2023,15 @@ extern int finish_open(struct file *file, struct dentry *dentry, int *opened); extern int finish_no_open(struct file *file, struct dentry *dentry); +extern unsigned int estale_retries; + /** * retry_estale - determine whether the caller should retry an operation * @error: the error that would currently be returned * @try: number of tries already performed * * Check to see if the error code was -ESTALE, and then determine whether - * to retry the call based on the number of tries so far. Currently, we only - * retry the call once. + * to retry the call based on the number of tries so far. * * Returns true if the caller should try the operation again. */ @@ -2040,7 +2041,7 @@ retry_estale(const long error, const unsigned int try) if (likely(error != -ESTALE)) return false; - return !try; + return (try <= estale_retries); } /* fs/ioctl.c */ diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 26f65ea..24735db 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -1545,6 +1545,13 @@ static struct ctl_table fs_table[] = { .proc_handler = &pipe_proc_fn, .extra1 = &pipe_min_size, }, + { + .procname = "estale_retries", + .data = &estale_retries, + .maxlen = sizeof(unsigned int), + .mode = 0644, + .proc_handler = proc_dointvec, + }, { } }; -- 1.7.11.7 -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html