* [PATCH 0/3] NFSD support for FedFS junctions @ 2011-08-29 18:48 Chuck Lever 2011-08-29 18:48 ` [PATCH 1/3] NFSD: Cleanup for nfsd4_path() Chuck Lever ` (2 more replies) 0 siblings, 3 replies; 6+ messages in thread From: Chuck Lever @ 2011-08-29 18:48 UTC (permalink / raw) To: bfields; +Cc: linux-nfs Hi Bruce- Sometime soon we are going to have working and easy-to-install FedFS user space components. These kernel patches are going to be needed to make server-side FedFS support work. Would you consider these for 3.2? --- Trond Myklebust (3): NFSD: Add a cache for fs_locations information NFSD: Remove the ex_pathname field from struct svc_export NFSD: Cleanup for nfsd4_path() fs/nfsd/export.c | 15 +----- fs/nfsd/nfs4xdr.c | 106 ++++++++++++++++++++++++++++++++----------- fs/nfsd/nfsd.h | 7 +++ fs/nfsd/vfs.c | 15 ++++++ include/linux/nfsd/export.h | 2 - 5 files changed, 103 insertions(+), 42 deletions(-) -- Chuck Lever ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/3] NFSD: Cleanup for nfsd4_path() 2011-08-29 18:48 [PATCH 0/3] NFSD support for FedFS junctions Chuck Lever @ 2011-08-29 18:48 ` Chuck Lever 2011-08-29 18:49 ` [PATCH 2/3] NFSD: Remove the ex_pathname field from struct svc_export Chuck Lever 2011-08-29 18:55 ` [PATCH 0/3] NFSD support for FedFS junctions Chuck Lever 2 siblings, 0 replies; 6+ messages in thread From: Chuck Lever @ 2011-08-29 18:48 UTC (permalink / raw) To: bfields; +Cc: linux-nfs From: Trond Myklebust <Trond.Myklebust@netapp.com> The current code is sort of hackish in that it assumes a referral is always matched to an export. When we add support for junctions that may not be the case. We can replace nfsd4_path() with a function that encodes the components directly from the dentries. Since nfsd4_path is currently the only user of the 'ex_pathname' field in struct svc_export, this has the added benefit of allowing us to get rid of that. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> --- fs/nfsd/export.c | 4 +- fs/nfsd/nfs4xdr.c | 106 ++++++++++++++++++++++++++++++++----------- include/linux/nfsd/export.h | 1 3 files changed, 81 insertions(+), 30 deletions(-) diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c index f4cc1e2..d9a6611 100644 --- a/fs/nfsd/export.c +++ b/fs/nfsd/export.c @@ -1010,7 +1010,7 @@ rqst_exp_parent(struct svc_rqst *rqstp, struct path *path) return exp; } -static struct svc_export *find_fsidzero_export(struct svc_rqst *rqstp) +struct svc_export *rqst_find_fsidzero_export(struct svc_rqst *rqstp) { u32 fsidv[2]; @@ -1030,7 +1030,7 @@ exp_pseudoroot(struct svc_rqst *rqstp, struct svc_fh *fhp) struct svc_export *exp; __be32 rv; - exp = find_fsidzero_export(rqstp); + exp = rqst_find_fsidzero_export(rqstp); if (IS_ERR(exp)) return nfserrno(PTR_ERR(exp)); rv = fh_compose(fhp, exp, exp->ex_path.dentry, NULL); diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index c8bf405..f7b068e 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1697,36 +1697,89 @@ static __be32 nfsd4_encode_fs_location4(struct nfsd4_fs_location *location, } /* - * Return the path to an export point in the pseudo filesystem namespace - * Returned string is safe to use as long as the caller holds a reference - * to @exp. + * Encode a path in RFC3530 'pathname4' format */ -static char *nfsd4_path(struct svc_rqst *rqstp, struct svc_export *exp, __be32 *stat) +static __be32 nfsd4_encode_path(const struct path *root, + const struct path *path, __be32 **pp, int *buflen) { - struct svc_fh tmp_fh; - char *path = NULL, *rootpath; - size_t rootlen; + struct path cur = { + .mnt = path->mnt, + .dentry = path->dentry, + }; + __be32 *p = *pp; + struct dentry **components = NULL; + unsigned int ncomponents = 0; + __be32 err = nfserr_resource; - fh_init(&tmp_fh, NFS4_FHSIZE); - *stat = exp_pseudoroot(rqstp, &tmp_fh); - if (*stat) - return NULL; - rootpath = tmp_fh.fh_export->ex_pathname; + dprintk("nfsd4_encode_components("); - path = exp->ex_pathname; + path_get(&cur); + /* First walk the path up to the nfsd root, and store the + * dentries/path components in an array. + */ + for (;;) { + if (cur.dentry == root->dentry && cur.mnt == root->mnt) + break; + if (cur.dentry == cur.mnt->mnt_root) { + if (follow_up(&cur)) + continue; + goto out_free; + } + if ((ncomponents & 15) == 0) { + struct dentry **new; + new = krealloc(components, + sizeof(*new) * (ncomponents + 16), + GFP_KERNEL); + if (!new) + goto out_free; + components = new; + } + components[ncomponents++] = cur.dentry; + cur.dentry = dget_parent(cur.dentry); + } - rootlen = strlen(rootpath); - if (strncmp(path, rootpath, rootlen)) { - dprintk("nfsd: fs_locations failed;" - "%s is not contained in %s\n", path, rootpath); - *stat = nfserr_notsupp; - path = NULL; - goto out; + *buflen -= 4; + if (*buflen < 0) + goto out_free; + WRITE32(ncomponents); + + while (ncomponents) { + struct dentry *dentry = components[ncomponents - 1]; + unsigned int len = dentry->d_name.len; + + *buflen -= 4 + (XDR_QUADLEN(len) << 2); + if (*buflen < 0) + goto out_free; + WRITE32(len); + WRITEMEM(dentry->d_name.name, len); + dprintk("/%s", dentry->d_name.name); + dput(dentry); + ncomponents--; } - path += rootlen; -out: - fh_put(&tmp_fh); - return path; + + *pp = p; + err = 0; +out_free: + dprintk(")\n"); + while (ncomponents) + dput(components[--ncomponents]); + kfree(components); + path_put(&cur); + return err; +} + +static __be32 nfsd4_encode_fsloc_fsroot(struct svc_rqst *rqstp, + const struct path *path, __be32 **pp, int *buflen) +{ + struct svc_export *exp_ps; + __be32 res; + + exp_ps = rqst_find_fsidzero_export(rqstp); + if (IS_ERR(exp_ps)) + return nfserrno(PTR_ERR(exp_ps)); + res = nfsd4_encode_path(&exp_ps->ex_path, path, pp, buflen); + exp_put(exp_ps); + return res; } /* @@ -1740,11 +1793,8 @@ static __be32 nfsd4_encode_fs_locations(struct svc_rqst *rqstp, int i; __be32 *p = *pp; struct nfsd4_fs_locations *fslocs = &exp->ex_fslocs; - char *root = nfsd4_path(rqstp, exp, &status); - if (status) - return status; - status = nfsd4_encode_components('/', root, &p, buflen); + status = nfsd4_encode_fsloc_fsroot(rqstp, &exp->ex_path, &p, buflen); if (status) return status; if ((*buflen -= 4) < 0) diff --git a/include/linux/nfsd/export.h b/include/linux/nfsd/export.h index 8a31a20..7ba3fd4 100644 --- a/include/linux/nfsd/export.h +++ b/include/linux/nfsd/export.h @@ -137,6 +137,7 @@ struct svc_export * rqst_exp_get_by_name(struct svc_rqst *, struct path *); struct svc_export * rqst_exp_parent(struct svc_rqst *, struct path *); +struct svc_export * rqst_find_fsidzero_export(struct svc_rqst *); int exp_rootfh(struct auth_domain *, char *path, struct knfsd_fh *, int maxsize); __be32 exp_pseudoroot(struct svc_rqst *, struct svc_fh *); ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/3] NFSD: Remove the ex_pathname field from struct svc_export 2011-08-29 18:48 [PATCH 0/3] NFSD support for FedFS junctions Chuck Lever 2011-08-29 18:48 ` [PATCH 1/3] NFSD: Cleanup for nfsd4_path() Chuck Lever @ 2011-08-29 18:49 ` Chuck Lever 2011-08-29 18:55 ` [PATCH 0/3] NFSD support for FedFS junctions Chuck Lever 2 siblings, 0 replies; 6+ messages in thread From: Chuck Lever @ 2011-08-29 18:49 UTC (permalink / raw) To: bfields; +Cc: linux-nfs From: Trond Myklebust <Trond.Myklebust@netapp.com> There are no more users... Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> --- fs/nfsd/export.c | 11 ----------- include/linux/nfsd/export.h | 1 - 2 files changed, 0 insertions(+), 12 deletions(-) diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c index d9a6611..bf985f7 100644 --- a/fs/nfsd/export.c +++ b/fs/nfsd/export.c @@ -318,7 +318,6 @@ static void svc_export_put(struct kref *ref) struct svc_export *exp = container_of(ref, struct svc_export, h.ref); path_put(&exp->ex_path); auth_domain_put(exp->ex_client); - kfree(exp->ex_pathname); nfsd4_fslocs_free(&exp->ex_fslocs); kfree(exp); } @@ -528,11 +527,6 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen) exp.ex_client = dom; - err = -ENOMEM; - exp.ex_pathname = kstrdup(buf, GFP_KERNEL); - if (!exp.ex_pathname) - goto out2; - /* expiry */ err = -EINVAL; exp.h.expiry_time = get_expiry(&mesg); @@ -613,8 +607,6 @@ out4: nfsd4_fslocs_free(&exp.ex_fslocs); kfree(exp.ex_uuid); out3: - kfree(exp.ex_pathname); -out2: path_put(&exp.ex_path); out1: auth_domain_put(dom); @@ -678,7 +670,6 @@ static void svc_export_init(struct cache_head *cnew, struct cache_head *citem) new->ex_client = item->ex_client; new->ex_path.dentry = dget(item->ex_path.dentry); new->ex_path.mnt = mntget(item->ex_path.mnt); - new->ex_pathname = NULL; new->ex_fslocs.locations = NULL; new->ex_fslocs.locations_count = 0; new->ex_fslocs.migrated = 0; @@ -696,8 +687,6 @@ static void export_update(struct cache_head *cnew, struct cache_head *citem) new->ex_fsid = item->ex_fsid; new->ex_uuid = item->ex_uuid; item->ex_uuid = NULL; - new->ex_pathname = item->ex_pathname; - item->ex_pathname = NULL; new->ex_fslocs.locations = item->ex_fslocs.locations; item->ex_fslocs.locations = NULL; new->ex_fslocs.locations_count = item->ex_fslocs.locations_count; diff --git a/include/linux/nfsd/export.h b/include/linux/nfsd/export.h index 7ba3fd4..f85308e 100644 --- a/include/linux/nfsd/export.h +++ b/include/linux/nfsd/export.h @@ -96,7 +96,6 @@ struct svc_export { struct auth_domain * ex_client; int ex_flags; struct path ex_path; - char *ex_pathname; uid_t ex_anon_uid; gid_t ex_anon_gid; int ex_fsid; ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 0/3] NFSD support for FedFS junctions 2011-08-29 18:48 [PATCH 0/3] NFSD support for FedFS junctions Chuck Lever 2011-08-29 18:48 ` [PATCH 1/3] NFSD: Cleanup for nfsd4_path() Chuck Lever 2011-08-29 18:49 ` [PATCH 2/3] NFSD: Remove the ex_pathname field from struct svc_export Chuck Lever @ 2011-08-29 18:55 ` Chuck Lever 2 siblings, 0 replies; 6+ messages in thread From: Chuck Lever @ 2011-08-29 18:55 UTC (permalink / raw) To: bfields; +Cc: linux-nfs Sorry for the threading and patch numbering weirdness. Our corporate mail server hiccup'd while I was sending these. On Aug 29, 2011, at 2:48 PM, Chuck Lever wrote: > Hi Bruce- > > Sometime soon we are going to have working and easy-to-install FedFS > user space components. These kernel patches are going to be needed > to make server-side FedFS support work. > > Would you consider these for 3.2? > > --- > > Trond Myklebust (3): > NFSD: Add a cache for fs_locations information > NFSD: Remove the ex_pathname field from struct svc_export > NFSD: Cleanup for nfsd4_path() > > > fs/nfsd/export.c | 15 +----- > fs/nfsd/nfs4xdr.c | 106 ++++++++++++++++++++++++++++++++----------- > fs/nfsd/nfsd.h | 7 +++ > fs/nfsd/vfs.c | 15 ++++++ > include/linux/nfsd/export.h | 2 - > 5 files changed, 103 insertions(+), 42 deletions(-) > > -- > Chuck Lever > -- > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Chuck Lever chuck[dot]lever[at]oracle[dot]com ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 0/3] NFSD patches to support junctions @ 2011-09-02 16:38 Chuck Lever 2011-09-02 16:38 ` [PATCH 2/3] NFSD: Remove the ex_pathname field from struct svc_export Chuck Lever 0 siblings, 1 reply; 6+ messages in thread From: Chuck Lever @ 2011-09-02 16:38 UTC (permalink / raw) To: linux-nfs Sometime soon we are going to have easy-to-install user space FedFS components. Here are kernel patches needed to make server-side FedFS support work. Please consider these for the 3.2 kernel. The third patch introduces a potentially expensive check to see if a junction has been encountered during a mountpoint lookup. An object is a junction iff it has the requisite set of extended attributes. However, reading an extended attribute is expensive on some file systems. To mitigate the cost of this check, junctions always have their sticky bit set. The expensive extended attribute part of the junction test is done only if the sticky bit is present. Note that today junctions are directories, but someday symlinks might also act as junctions (for SMB2 support). And very few files have the sticky bit set. So we avoid doing a directory test here. Also, junctions ostensibly have all zero mode bits to hide their local contents. I don't think the kernel needs to be concerned about the permissions as long as the sticky bit is set. This allows some flexibility in how junctions are represented. However, Jeff thinks that having nfsd4_is_junction() also consider mode bits would make the expensive part of this test still less frequent. Any thoughts about this? --- Trond Myklebust (3): NFSD: Add a cache for fs_locations information NFSD: Remove the ex_pathname field from struct svc_export NFSD: Cleanup for nfsd4_path() fs/nfsd/export.c | 15 +----- fs/nfsd/nfs4xdr.c | 106 ++++++++++++++++++++++++++++++++----------- fs/nfsd/nfsd.h | 7 +++ fs/nfsd/vfs.c | 16 ++++++ include/linux/nfsd/export.h | 2 - 5 files changed, 104 insertions(+), 42 deletions(-) -- Chuck Lever ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/3] NFSD: Remove the ex_pathname field from struct svc_export 2011-09-02 16:38 [PATCH 0/3] NFSD patches to support junctions Chuck Lever @ 2011-09-02 16:38 ` Chuck Lever 0 siblings, 0 replies; 6+ messages in thread From: Chuck Lever @ 2011-09-02 16:38 UTC (permalink / raw) To: linux-nfs From: Trond Myklebust <Trond.Myklebust@netapp.com> There are no more users... Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> --- fs/nfsd/export.c | 11 ----------- include/linux/nfsd/export.h | 1 - 2 files changed, 0 insertions(+), 12 deletions(-) diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c index d9a6611..bf985f7 100644 --- a/fs/nfsd/export.c +++ b/fs/nfsd/export.c @@ -318,7 +318,6 @@ static void svc_export_put(struct kref *ref) struct svc_export *exp = container_of(ref, struct svc_export, h.ref); path_put(&exp->ex_path); auth_domain_put(exp->ex_client); - kfree(exp->ex_pathname); nfsd4_fslocs_free(&exp->ex_fslocs); kfree(exp); } @@ -528,11 +527,6 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen) exp.ex_client = dom; - err = -ENOMEM; - exp.ex_pathname = kstrdup(buf, GFP_KERNEL); - if (!exp.ex_pathname) - goto out2; - /* expiry */ err = -EINVAL; exp.h.expiry_time = get_expiry(&mesg); @@ -613,8 +607,6 @@ out4: nfsd4_fslocs_free(&exp.ex_fslocs); kfree(exp.ex_uuid); out3: - kfree(exp.ex_pathname); -out2: path_put(&exp.ex_path); out1: auth_domain_put(dom); @@ -678,7 +670,6 @@ static void svc_export_init(struct cache_head *cnew, struct cache_head *citem) new->ex_client = item->ex_client; new->ex_path.dentry = dget(item->ex_path.dentry); new->ex_path.mnt = mntget(item->ex_path.mnt); - new->ex_pathname = NULL; new->ex_fslocs.locations = NULL; new->ex_fslocs.locations_count = 0; new->ex_fslocs.migrated = 0; @@ -696,8 +687,6 @@ static void export_update(struct cache_head *cnew, struct cache_head *citem) new->ex_fsid = item->ex_fsid; new->ex_uuid = item->ex_uuid; item->ex_uuid = NULL; - new->ex_pathname = item->ex_pathname; - item->ex_pathname = NULL; new->ex_fslocs.locations = item->ex_fslocs.locations; item->ex_fslocs.locations = NULL; new->ex_fslocs.locations_count = item->ex_fslocs.locations_count; diff --git a/include/linux/nfsd/export.h b/include/linux/nfsd/export.h index 7ba3fd4..f85308e 100644 --- a/include/linux/nfsd/export.h +++ b/include/linux/nfsd/export.h @@ -96,7 +96,6 @@ struct svc_export { struct auth_domain * ex_client; int ex_flags; struct path ex_path; - char *ex_pathname; uid_t ex_anon_uid; gid_t ex_anon_gid; int ex_fsid; ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 0/3] NFSD support for FedFS junctions [v3] @ 2011-09-12 23:36 Chuck Lever 2011-09-12 23:37 ` [PATCH 2/3] NFSD: Remove the ex_pathname field from struct svc_export Chuck Lever 0 siblings, 1 reply; 6+ messages in thread From: Chuck Lever @ 2011-09-12 23:36 UTC (permalink / raw) To: bfields; +Cc: linux-nfs Sometime soon we are going to have easy-to-install user space FedFS components. Here are kernel patches needed to make server-side FedFS support work. Please consider these for the 3.2 kernel. This respin addresses recent review comments. Note that because NFSD previously didn't care about the execute bits of junctions, neither does fedfs-utils-0.7.0 (released September 3, 2011). Junctions created by this release and previous releases have the sticky bit set, but the other mode bits are left untouched during junction creation. I will publish fedfs-utils-0.7.1 soon with a commit that makes new junctions non-executable. --- Trond Myklebust (3): NFSD: Add a cache for fs_locations information NFSD: Remove the ex_pathname field from struct svc_export NFSD: Cleanup for nfsd4_path() fs/nfsd/export.c | 15 +----- fs/nfsd/nfs4xdr.c | 106 ++++++++++++++++++++++++++++++++----------- fs/nfsd/nfsd.h | 7 +++ fs/nfsd/vfs.c | 18 +++++++ include/linux/nfsd/export.h | 2 - 5 files changed, 106 insertions(+), 42 deletions(-) -- Chuck Lever ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/3] NFSD: Remove the ex_pathname field from struct svc_export 2011-09-12 23:36 [PATCH 0/3] NFSD support for FedFS junctions [v3] Chuck Lever @ 2011-09-12 23:37 ` Chuck Lever 0 siblings, 0 replies; 6+ messages in thread From: Chuck Lever @ 2011-09-12 23:37 UTC (permalink / raw) To: bfields; +Cc: linux-nfs From: Trond Myklebust <Trond.Myklebust@netapp.com> There are no more users... Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> --- fs/nfsd/export.c | 11 ----------- include/linux/nfsd/export.h | 1 - 2 files changed, 0 insertions(+), 12 deletions(-) diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c index d9a6611..bf985f7 100644 --- a/fs/nfsd/export.c +++ b/fs/nfsd/export.c @@ -318,7 +318,6 @@ static void svc_export_put(struct kref *ref) struct svc_export *exp = container_of(ref, struct svc_export, h.ref); path_put(&exp->ex_path); auth_domain_put(exp->ex_client); - kfree(exp->ex_pathname); nfsd4_fslocs_free(&exp->ex_fslocs); kfree(exp); } @@ -528,11 +527,6 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen) exp.ex_client = dom; - err = -ENOMEM; - exp.ex_pathname = kstrdup(buf, GFP_KERNEL); - if (!exp.ex_pathname) - goto out2; - /* expiry */ err = -EINVAL; exp.h.expiry_time = get_expiry(&mesg); @@ -613,8 +607,6 @@ out4: nfsd4_fslocs_free(&exp.ex_fslocs); kfree(exp.ex_uuid); out3: - kfree(exp.ex_pathname); -out2: path_put(&exp.ex_path); out1: auth_domain_put(dom); @@ -678,7 +670,6 @@ static void svc_export_init(struct cache_head *cnew, struct cache_head *citem) new->ex_client = item->ex_client; new->ex_path.dentry = dget(item->ex_path.dentry); new->ex_path.mnt = mntget(item->ex_path.mnt); - new->ex_pathname = NULL; new->ex_fslocs.locations = NULL; new->ex_fslocs.locations_count = 0; new->ex_fslocs.migrated = 0; @@ -696,8 +687,6 @@ static void export_update(struct cache_head *cnew, struct cache_head *citem) new->ex_fsid = item->ex_fsid; new->ex_uuid = item->ex_uuid; item->ex_uuid = NULL; - new->ex_pathname = item->ex_pathname; - item->ex_pathname = NULL; new->ex_fslocs.locations = item->ex_fslocs.locations; item->ex_fslocs.locations = NULL; new->ex_fslocs.locations_count = item->ex_fslocs.locations_count; diff --git a/include/linux/nfsd/export.h b/include/linux/nfsd/export.h index 7ba3fd4..f85308e 100644 --- a/include/linux/nfsd/export.h +++ b/include/linux/nfsd/export.h @@ -96,7 +96,6 @@ struct svc_export { struct auth_domain * ex_client; int ex_flags; struct path ex_path; - char *ex_pathname; uid_t ex_anon_uid; gid_t ex_anon_gid; int ex_fsid; ^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2011-09-12 23:37 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-08-29 18:48 [PATCH 0/3] NFSD support for FedFS junctions Chuck Lever 2011-08-29 18:48 ` [PATCH 1/3] NFSD: Cleanup for nfsd4_path() Chuck Lever 2011-08-29 18:49 ` [PATCH 2/3] NFSD: Remove the ex_pathname field from struct svc_export Chuck Lever 2011-08-29 18:55 ` [PATCH 0/3] NFSD support for FedFS junctions Chuck Lever -- strict thread matches above, loose matches on Subject: below -- 2011-09-02 16:38 [PATCH 0/3] NFSD patches to support junctions Chuck Lever 2011-09-02 16:38 ` [PATCH 2/3] NFSD: Remove the ex_pathname field from struct svc_export Chuck Lever 2011-09-12 23:36 [PATCH 0/3] NFSD support for FedFS junctions [v3] Chuck Lever 2011-09-12 23:37 ` [PATCH 2/3] NFSD: Remove the ex_pathname field from struct svc_export Chuck Lever
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).