From: J. Bruce Fields <bfields@xxxxxxxxxxxxxx> Contrary to the comment above its definition, the field m_path always has the same value as e_path: the *only* modifications of m_path are all of the form: strncpy(exp->m_export.m_path, exp->m_export.e_path, sizeof (exp->m_export.m_path) - 1); exp->m_export.m_path[sizeof (exp->m_export.m_path) - 1] = '\0'; So m_path is always just a copy of e_path. In places where we need to store a path to a submount of a CROSSMNT-exported filesystem, as in cache.c, we just use a local variable. Signed-off-by: J. Bruce Fields <bfields@xxxxxxxxxxxxxx> --- support/export/export.c | 12 ------------ support/export/nfsctl.c | 4 ++-- support/include/nfslib.h | 5 ----- support/nfs/exports.c | 6 ------ utils/mountd/mountd.c | 12 ++---------- utils/mountd/rmtab.c | 4 +--- 6 files changed, 5 insertions(+), 38 deletions(-) diff --git a/support/export/export.c b/support/export/export.c index 93c58b6..14af112 100644 --- a/support/export/export.c +++ b/support/export/export.c @@ -255,15 +255,3 @@ export_freeall(void) } client_freeall(); } - -void -export_reset(nfs_export *exp) -{ - if (!exp) - return; - - /* Restore m_path. */ - strncpy(exp->m_export.m_path, exp->m_export.e_path, - sizeof (exp->m_export.m_path) - 1); - exp->m_export.m_path[sizeof (exp->m_export.m_path) - 1] = '\0'; -} diff --git a/support/export/nfsctl.c b/support/export/nfsctl.c index 32d92bd..e2877b9 100644 --- a/support/export/nfsctl.c +++ b/support/export/nfsctl.c @@ -89,11 +89,11 @@ expsetup(struct nfsctl_export *exparg, nfs_export *exp, int unexport) nfs_client *clp = exp->m_client; struct stat stb; - if (stat(exp->m_export.m_path, &stb) < 0) + if (stat(exp->m_export.e_path, &stb) < 0) return 0; memset(exparg, 0, sizeof(*exparg)); - strncpy(exparg->ex_path, exp->m_export.m_path, + strncpy(exparg->ex_path, exp->m_export.e_path, sizeof (exparg->ex_path) - 1); strncpy(exparg->ex_client, clp->m_hostname, sizeof (exparg->ex_client) - 1); diff --git a/support/include/nfslib.h b/support/include/nfslib.h index 422b012..a51d79d 100644 --- a/support/include/nfslib.h +++ b/support/include/nfslib.h @@ -67,11 +67,6 @@ struct sec_entry { struct exportent { char * e_hostname; char e_path[NFS_MAXPATHLEN+1]; - /* The mount path may be different from the exported path due - to submount. It may change for every mount. The idea is we - set m_path every time when we process a mount. We should not - use it for anything else. */ - char m_path[NFS_MAXPATHLEN+1]; int e_flags; int e_anonuid; int e_anongid; diff --git a/support/nfs/exports.c b/support/nfs/exports.c index 525e5b1..04e3698 100644 --- a/support/nfs/exports.c +++ b/support/nfs/exports.c @@ -127,8 +127,6 @@ getexportent(int fromkernel, int fromexports) if (ok <= 0) return NULL; - strncpy (def_ee.m_path, def_ee.e_path, sizeof (def_ee.m_path) - 1); - def_ee.m_path [sizeof (def_ee.m_path) - 1] = '\0'; ok = getexport(exp, sizeof(exp)); } if (ok < 0) { @@ -187,8 +185,6 @@ getexportent(int fromkernel, int fromexports) rpath[sizeof (rpath) - 1] = '\0'; strncpy(ee.e_path, rpath, sizeof (ee.e_path) - 1); ee.e_path[sizeof (ee.e_path) - 1] = '\0'; - strncpy (ee.m_path, ee.e_path, sizeof (ee.m_path) - 1); - ee.m_path [sizeof (ee.m_path) - 1] = '\0'; } return ⅇ @@ -360,8 +356,6 @@ mkexportent(char *hname, char *path, char *options) } strncpy(ee.e_path, path, sizeof (ee.e_path)); ee.e_path[sizeof (ee.e_path) - 1] = '\0'; - strncpy (ee.m_path, ee.e_path, sizeof (ee.m_path) - 1); - ee.m_path [sizeof (ee.m_path) - 1] = '\0'; if (parseopts(options, &ee, 0, NULL) < 0) return NULL; return ⅇ diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c index 8137f7f..0facf89 100644 --- a/utils/mountd/mountd.c +++ b/utils/mountd/mountd.c @@ -230,9 +230,6 @@ mount_umnt_1_svc(struct svc_req *rqstp, dirpath *argp, void *resp) return 1; } - if (!new_cache) - export_reset (exp); - mountlist_del(inet_ntoa(sin->sin_addr), p); return 1; } @@ -312,7 +309,6 @@ mount_pathconf_2_svc(struct svc_req *rqstp, dirpath *path, ppathcnf *res) } else if (stat(p, &stb) < 0) { xlog(L_WARNING, "can't stat exported dir %s: %s", p, strerror(errno)); - export_reset (exp); return 1; } @@ -328,8 +324,6 @@ mount_pathconf_2_svc(struct svc_req *rqstp, dirpath *path, ppathcnf *res) res->pc_mask[0] = 0; res->pc_mask[1] = 0; - export_reset (exp); - return 1; } @@ -457,13 +451,11 @@ get_rootfh(struct svc_req *rqstp, dirpath *path, mountstat3 *error, int v3) if (fh != NULL) { mountlist_add(inet_ntoa(sin->sin_addr), p); *error = NFS_OK; - export_reset (exp); return fh; } xlog(L_WARNING, "getfh failed: %s", strerror(errno)); *error = NFSERR_ACCES; } - export_reset (exp); return NULL; } @@ -499,14 +491,14 @@ get_exportlist(void) for (i = 0; i < MCL_MAXTYPES; i++) { for (exp = exportlist[i]; exp; exp = exp->m_next) { for (e = elist; e != NULL; e = e->ex_next) { - if (!strcmp(exp->m_export.m_path, e->ex_dir)) + if (!strcmp(exp->m_export.e_path, e->ex_dir)) break; } if (!e) { e = (struct exportnode *) xmalloc(sizeof(*e)); e->ex_next = elist; e->ex_groups = NULL; - e->ex_dir = xstrdup(exp->m_export.m_path); + e->ex_dir = xstrdup(exp->m_export.e_path); elist = e; } diff --git a/utils/mountd/rmtab.c b/utils/mountd/rmtab.c index e8aff5a..5787ed6 100644 --- a/utils/mountd/rmtab.c +++ b/utils/mountd/rmtab.c @@ -162,10 +162,8 @@ mountlist_del_all(struct sockaddr_in *sin) } while ((rep = getrmtabent(1, NULL)) != NULL) { if (strcmp(rep->r_client, hp->h_name) == 0 && - (exp = auth_authenticate("umountall", sin, rep->r_path))) { - export_reset(exp); + (exp = auth_authenticate("umountall", sin, rep->r_path))) continue; - } fputrmtabent(fp, rep, NULL); } if (slink_safe_rename(_PATH_RMTABTMP, _PATH_RMTAB) < 0) { -- 1.5.5.rc1 -- 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