diff mbox series

[nfs-utils,1/2] Remove 'force' arg from cache_flush()

Message ID 162156122215.19062.11710239266795260824@noble.neil.brown.name (mailing list archive)
State New, archived
Headers show
Series [nfs-utils,1/2] Remove 'force' arg from cache_flush() | expand

Commit Message

NeilBrown May 21, 2021, 1:40 a.m. UTC
Since v4.17 the timestamp written to 'flush' is ignored,
so there isn't much point choosing too precisely.

For kernels since v4.3-rc3-13-g778620364ef5 it is safe
to write 1 second beyond the current time.

For earlier kernels, nothing is really safe (even the current
behaviour), but writing one second beyond the current time isn't too bad
in the unlikely case the people use a new nfs-utils on a 5 year old
kernel.

This remove a dependency for libnfs.a on 'etab' being declare,
so svcgssd no longer needs to declare it.

Signed-off-by: NeilBrown <neilb@suse.de>
---
 support/export/auth.c     |  2 +-
 support/include/nfslib.h  |  2 +-
 support/nfs/cacheio.c     | 17 ++++++++---------
 utils/exportfs/exportfs.c |  4 ++--
 utils/gssd/svcgssd.c      |  1 -
 5 files changed, 12 insertions(+), 14 deletions(-)

Comments

Petr Vorel May 21, 2021, 1:52 p.m. UTC | #1
Hi Neil,

> Since v4.17 the timestamp written to 'flush' is ignored,
> so there isn't much point choosing too precisely.

> For kernels since v4.3-rc3-13-g778620364ef5 it is safe
> to write 1 second beyond the current time.

> For earlier kernels, nothing is really safe (even the current
> behaviour), but writing one second beyond the current time isn't too bad
> in the unlikely case the people use a new nfs-utils on a 5 year old
> kernel.

> This remove a dependency for libnfs.a on 'etab' being declare,
> so svcgssd no longer needs to declare it.

Reviewed-by: Petr Vorel <pvorel@suse.cz>

Kind regards,
Petr
Steve Dickson May 23, 2021, 6:30 p.m. UTC | #2
On 5/20/21 9:40 PM, NeilBrown wrote:
> 
> Since v4.17 the timestamp written to 'flush' is ignored,
> so there isn't much point choosing too precisely.
> 
> For kernels since v4.3-rc3-13-g778620364ef5 it is safe
> to write 1 second beyond the current time.
> 
> For earlier kernels, nothing is really safe (even the current
> behaviour), but writing one second beyond the current time isn't too bad
> in the unlikely case the people use a new nfs-utils on a 5 year old
> kernel.
> 
> This remove a dependency for libnfs.a on 'etab' being declare,
> so svcgssd no longer needs to declare it.
> 
> Signed-off-by: NeilBrown <neilb@suse.de>
Committed... (tag: nfs-utils-2-5-4-rc4)

steved.
> ---
>  support/export/auth.c     |  2 +-
>  support/include/nfslib.h  |  2 +-
>  support/nfs/cacheio.c     | 17 ++++++++---------
>  utils/exportfs/exportfs.c |  4 ++--
>  utils/gssd/svcgssd.c      |  1 -
>  5 files changed, 12 insertions(+), 14 deletions(-)
> 
> diff --git a/support/export/auth.c b/support/export/auth.c
> index cea376300d01..17bdfc83748e 100644
> --- a/support/export/auth.c
> +++ b/support/export/auth.c
> @@ -80,7 +80,7 @@ check_useipaddr(void)
>  		use_ipaddr = 0;
>  
>  	if (use_ipaddr != old_use_ipaddr)
> -		cache_flush(1);
> +		cache_flush();
>  }
>  
>  unsigned int
> diff --git a/support/include/nfslib.h b/support/include/nfslib.h
> index 84d8270b330f..58eeb3382fcc 100644
> --- a/support/include/nfslib.h
> +++ b/support/include/nfslib.h
> @@ -132,7 +132,7 @@ int			wildmat(char *text, char *pattern);
>  
>  int qword_get(char **bpp, char *dest, int bufsize);
>  int qword_get_int(char **bpp, int *anint);
> -void cache_flush(int force);
> +void cache_flush(void);
>  void qword_add(char **bpp, int *lp, char *str);
>  void qword_addhex(char **bpp, int *lp, char *buf, int blen);
>  void qword_addint(char **bpp, int *lp, int n);
> diff --git a/support/nfs/cacheio.c b/support/nfs/cacheio.c
> index 70ead94d64f0..73f4be4af9f9 100644
> --- a/support/nfs/cacheio.c
> +++ b/support/nfs/cacheio.c
> @@ -32,8 +32,6 @@
>  #include <time.h>
>  #include <errno.h>
>  
> -extern struct state_paths etab;
> -
>  void qword_add(char **bpp, int *lp, char *str)
>  {
>  	char *bp = *bpp;
> @@ -213,7 +211,7 @@ int qword_get_uint(char **bpp, unsigned int *anint)
>   */
>  
>  void
> -cache_flush(int force)
> +cache_flush(void)
>  {
>  	struct stat stb;
>  	int c;
> @@ -234,12 +232,13 @@ cache_flush(int force)
>  		NULL
>  	};
>  	now = time(0);
> -	if (force ||
> -	    stat(etab.statefn, &stb) != 0 ||
> -	    stb.st_mtime > now)
> -		stb.st_mtime = time(0);
> -	
> -	sprintf(stime, "%" PRId64 "\n", (int64_t)stb.st_mtime);
> +
> +	/* Since v4.16-rc2-3-g3b68e6ee3cbd the timestamp written is ignored.
> +	 * It is safest always to flush caches if there is any doubt.
> +	 * For earlier kernels, writing the next second from now is
> +	 * the best we can do.
> +	 */
> +	sprintf(stime, "%" PRId64 "\n", (int64_t)now+1);
>  	for (c=0; cachelist[c]; c++) {
>  		int fd;
>  		sprintf(path, "/proc/net/rpc/%s/flush", cachelist[c]);
> diff --git a/utils/exportfs/exportfs.c b/utils/exportfs/exportfs.c
> index bc76aaaf8714..d586296796a9 100644
> --- a/utils/exportfs/exportfs.c
> +++ b/utils/exportfs/exportfs.c
> @@ -188,7 +188,7 @@ main(int argc, char **argv)
>  
>  	if (optind == argc && ! f_all) {
>  		if (force_flush) {
> -			cache_flush(1);
> +			cache_flush();
>  			free_state_path_names(&etab);
>  			return 0;
>  		} else {
> @@ -235,7 +235,7 @@ main(int argc, char **argv)
>  				unexportfs(argv[i], f_verbose);
>  	}
>  	xtab_export_write();
> -	cache_flush(force_flush);
> +	cache_flush();
>  	free_state_path_names(&etab);
>  	export_freeall();
>  
> diff --git a/utils/gssd/svcgssd.c b/utils/gssd/svcgssd.c
> index 3ab2100b66bb..881207b3e8a2 100644
> --- a/utils/gssd/svcgssd.c
> +++ b/utils/gssd/svcgssd.c
> @@ -67,7 +67,6 @@
>  #include "misc.h"
>  #include "svcgssd_krb5.h"
>  
> -struct state_paths etab; /* from cacheio.c */
>  static bool signal_received = false;
>  static struct event_base *evbase = NULL;
>  static int nullrpc_fd = -1;
>
diff mbox series

Patch

diff --git a/support/export/auth.c b/support/export/auth.c
index cea376300d01..17bdfc83748e 100644
--- a/support/export/auth.c
+++ b/support/export/auth.c
@@ -80,7 +80,7 @@  check_useipaddr(void)
 		use_ipaddr = 0;
 
 	if (use_ipaddr != old_use_ipaddr)
-		cache_flush(1);
+		cache_flush();
 }
 
 unsigned int
diff --git a/support/include/nfslib.h b/support/include/nfslib.h
index 84d8270b330f..58eeb3382fcc 100644
--- a/support/include/nfslib.h
+++ b/support/include/nfslib.h
@@ -132,7 +132,7 @@  int			wildmat(char *text, char *pattern);
 
 int qword_get(char **bpp, char *dest, int bufsize);
 int qword_get_int(char **bpp, int *anint);
-void cache_flush(int force);
+void cache_flush(void);
 void qword_add(char **bpp, int *lp, char *str);
 void qword_addhex(char **bpp, int *lp, char *buf, int blen);
 void qword_addint(char **bpp, int *lp, int n);
diff --git a/support/nfs/cacheio.c b/support/nfs/cacheio.c
index 70ead94d64f0..73f4be4af9f9 100644
--- a/support/nfs/cacheio.c
+++ b/support/nfs/cacheio.c
@@ -32,8 +32,6 @@ 
 #include <time.h>
 #include <errno.h>
 
-extern struct state_paths etab;
-
 void qword_add(char **bpp, int *lp, char *str)
 {
 	char *bp = *bpp;
@@ -213,7 +211,7 @@  int qword_get_uint(char **bpp, unsigned int *anint)
  */
 
 void
-cache_flush(int force)
+cache_flush(void)
 {
 	struct stat stb;
 	int c;
@@ -234,12 +232,13 @@  cache_flush(int force)
 		NULL
 	};
 	now = time(0);
-	if (force ||
-	    stat(etab.statefn, &stb) != 0 ||
-	    stb.st_mtime > now)
-		stb.st_mtime = time(0);
-	
-	sprintf(stime, "%" PRId64 "\n", (int64_t)stb.st_mtime);
+
+	/* Since v4.16-rc2-3-g3b68e6ee3cbd the timestamp written is ignored.
+	 * It is safest always to flush caches if there is any doubt.
+	 * For earlier kernels, writing the next second from now is
+	 * the best we can do.
+	 */
+	sprintf(stime, "%" PRId64 "\n", (int64_t)now+1);
 	for (c=0; cachelist[c]; c++) {
 		int fd;
 		sprintf(path, "/proc/net/rpc/%s/flush", cachelist[c]);
diff --git a/utils/exportfs/exportfs.c b/utils/exportfs/exportfs.c
index bc76aaaf8714..d586296796a9 100644
--- a/utils/exportfs/exportfs.c
+++ b/utils/exportfs/exportfs.c
@@ -188,7 +188,7 @@  main(int argc, char **argv)
 
 	if (optind == argc && ! f_all) {
 		if (force_flush) {
-			cache_flush(1);
+			cache_flush();
 			free_state_path_names(&etab);
 			return 0;
 		} else {
@@ -235,7 +235,7 @@  main(int argc, char **argv)
 				unexportfs(argv[i], f_verbose);
 	}
 	xtab_export_write();
-	cache_flush(force_flush);
+	cache_flush();
 	free_state_path_names(&etab);
 	export_freeall();
 
diff --git a/utils/gssd/svcgssd.c b/utils/gssd/svcgssd.c
index 3ab2100b66bb..881207b3e8a2 100644
--- a/utils/gssd/svcgssd.c
+++ b/utils/gssd/svcgssd.c
@@ -67,7 +67,6 @@ 
 #include "misc.h"
 #include "svcgssd_krb5.h"
 
-struct state_paths etab; /* from cacheio.c */
 static bool signal_received = false;
 static struct event_base *evbase = NULL;
 static int nullrpc_fd = -1;