| From 217ece6c45a8a1e0c5910024bb1f02da84484a16 Mon Sep 17 00:00:00 2001 |
| From: Paulo Alcantara <pc@cjr.nz> |
| Date: Thu, 4 Nov 2021 13:13:28 -0300 |
| Subject: [PATCH] cifs: set a minimum of 120s for next dns resolution |
| Git-commit: 4ac0536f8874a903a72bddc57eb88db774261e3a |
| Patch-mainline: v5.16-rc1 |
| References: stable-5.14.19 |
| |
| commit 4ac0536f8874a903a72bddc57eb88db774261e3a upstream. |
| |
| With commit 506c1da44fee ("cifs: use the expiry output of dns_query to |
| schedule next resolution") and after triggering the first reconnect, |
| the next async dns resolution of tcp server's hostname would be |
| scheduled based on dns_resolver's key expiry default, which happens to |
| default to 5s on most systems that use key.dns_resolver for upcall. |
| |
| As per key.dns_resolver.conf(5): |
| |
| default_ttl=<number> |
| The number of seconds to set as the expiration on a cached |
| record. This will be overridden if the program manages to re- |
| trieve TTL information along with the addresses (if, for exam- |
| ple, it accesses the DNS directly). The default is 5 seconds. |
| The value must be in the range 1 to INT_MAX. |
| |
| Make the next async dns resolution no shorter than 120s as we do not |
| want to be upcalling too often. |
| |
| Cc: stable@vger.kernel.org |
| Fixes: 506c1da44fee ("cifs: use the expiry output of dns_query to schedule next resolution") |
| Signed-off-by: Paulo Alcantara (SUSE) <pc@cjr.nz> |
| Reviewed-by: Shyam Prasad N <sprasad@microsoft.com> |
| Signed-off-by: Steve French <stfrench@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Acked-by: Takashi Iwai <tiwai@suse.de> |
| |
| |
| fs/cifs/cifsglob.h | 3 ++- |
| fs/cifs/connect.c | 2 +- |
| 2 files changed, 3 insertions(+), 2 deletions(-) |
| |
| diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h |
| index cf2141483b37..3faf966df183 100644 |
| |
| |
| @@ -75,7 +75,8 @@ |
| #define SMB_ECHO_INTERVAL_MAX 600 |
| #define SMB_ECHO_INTERVAL_DEFAULT 60 |
| |
| -/* dns resolution interval in seconds */ |
| +/* dns resolution intervals in seconds */ |
| +#define SMB_DNS_RESOLVE_INTERVAL_MIN 120 |
| #define SMB_DNS_RESOLVE_INTERVAL_DEFAULT 600 |
| |
| /* maximum number of PDUs in one compound */ |
| diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c |
| index 4f4064db08bd..14c925565dbe 100644 |
| |
| |
| @@ -116,7 +116,7 @@ static int reconn_set_ipaddr_from_hostname(struct TCP_Server_Info *server) |
| * To make sure we don't use the cached entry, retry 1s |
| * after expiry. |
| */ |
| - ttl = (expiry - now + 1); |
| + ttl = max_t(unsigned long, expiry - now, SMB_DNS_RESOLVE_INTERVAL_MIN) + 1; |
| } |
| rc = !rc ? -1 : 0; |
| |
| -- |
| 2.26.2 |
| |