Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 154024 Details for
Bug 236823
exportfs gives inconsistent results when run immediately after nfs service is restarted
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
patch -- return static counter value instead of inode number
nfs-utils-etab-holdopen.patch (text/plain), 2.94 KB, created by
Jeff Layton
on 2007-05-03 12:38:20 UTC
(
hide
)
Description:
patch -- return static counter value instead of inode number
Filename:
MIME Type:
Creator:
Jeff Layton
Created:
2007-05-03 12:38:20 UTC
Size:
2.94 KB
patch
obsolete
>diff --git a/support/export/xtab.c b/support/export/xtab.c >index 0ddb251..292087b 100644 >--- a/support/export/xtab.c >+++ b/support/export/xtab.c >@@ -80,6 +80,12 @@ xtab_export_read(void) > return xtab_read(_PATH_ETAB, 1); > } > >+/* >+ * mountd now keeps an open fd for the etab at all times to make sure that the >+ * inode number changes when the xtab_export_write is done. If you change the >+ * routine below such that the files are edited in place, then you'll need to >+ * fix the auth_reload logic as well... >+ */ > static int > xtab_write(char *xtab, char *xtabtmp, int is_export) > { >diff --git a/utils/mountd/auth.c b/utils/mountd/auth.c >index 183c9ea..f7fe23d 100644 >--- a/utils/mountd/auth.c >+++ b/utils/mountd/auth.c >@@ -14,6 +14,7 @@ > #include <netinet/in.h> > #include <arpa/inet.h> > #include <errno.h> >+#include <unistd.h> > #include "misc.h" > #include "nfslib.h" > #include "exportfs.h" >@@ -46,24 +47,34 @@ auth_init(char *exports) > xtab_mount_write(); > } > >-time_t >+unsigned int > auth_reload() > { > struct stat stb; >- static time_t last_modified = 0; >- >- if (stat(_PATH_ETAB, &stb) < 0) >+ static ino_t last_inode; >+ static int last_fd; >+ static unsigned int counter; >+ int fd; >+ >+ if ((fd = open(_PATH_ETAB, O_RDONLY)) < 0) { >+ xlog(L_FATAL, "couldn't open %s", _PATH_ETAB); >+ } else if (fstat(fd, &stb) < 0) { > xlog(L_FATAL, "couldn't stat %s", _PATH_ETAB); >- if (stb.st_mtime == last_modified) >- return last_modified; >- last_modified = stb.st_mtime; >+ } else if (stb.st_ino == last_inode) { >+ close(fd); >+ return counter; >+ } else { >+ close(last_fd); >+ last_fd = fd; >+ last_inode = stb.st_ino; >+ } > > export_freeall(); > memset(&my_client, 0, sizeof(my_client)); >- // export_read(export_file); > xtab_export_read(); >+ ++counter; > >- return last_modified; >+ return counter; > } > > static nfs_export * >diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c >index 04141d1..999f035 100644 >--- a/utils/mountd/mountd.c >+++ b/utils/mountd/mountd.c >@@ -465,18 +465,18 @@ static exports > get_exportlist(void) > { > static exports elist = NULL; >- static time_t etime = 0; >- time_t atime; > struct exportnode *e, *ne; > struct groupnode *g, *ng, *c, **cp; > nfs_export *exp; > int i; >+ static unsigned int ecounter; >+ unsigned int acounter; > >- atime = auth_reload(); >- if (elist && atime == etime) >+ acounter = auth_reload(); >+ if (elist && acounter == ecounter) > return elist; > >- etime = atime; >+ ecounter = acounter; > > for (e = elist; e != NULL; e = ne) { > ne = e->ex_next; >diff --git a/utils/mountd/mountd.h b/utils/mountd/mountd.h >index b539278..31bacb5 100644 >--- a/utils/mountd/mountd.h >+++ b/utils/mountd/mountd.h >@@ -40,7 +40,7 @@ bool_t mount_mnt_3_svc(struct svc_req *, dirpath *, mountres3 *); > > void mount_dispatch(struct svc_req *, SVCXPRT *); > void auth_init(char *export_file); >-time_t auth_reload(void); >+unsigned int auth_reload(void); > nfs_export * auth_authenticate(char *what, struct sockaddr_in *sin, > char *path); > void auth_export(nfs_export *exp);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 236823
:
153430
|
153433
|
153538
| 154024