linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "J. Bruce Fields" <bfields@fieldses.org>
To: Chuck Lever <chuck.lever@oracle.com>
Cc: Linux NFS Mailing List <linux-nfs@vger.kernel.org>
Subject: Re: [PATCH] RFC: export options for junctions
Date: Wed, 11 Apr 2012 17:31:02 -0400	[thread overview]
Message-ID: <20120411213102.GC31706@fieldses.org> (raw)
In-Reply-To: <9C3B5489-2045-4D14-9FEE-81E831C56EA8@oracle.com>

On Thu, Mar 22, 2012 at 03:34:18PM -0400, Chuck Lever wrote:
> 
> On Mar 22, 2012, at 3:28 PM, Chuck Lever wrote:
> 
> > 
> > On Mar 22, 2012, at 6:59 AM, J. Bruce Fields wrote:
> > 
> >> On Wed, Mar 21, 2012 at 05:35:17PM -0400, Chuck Lever wrote:
> >>> 
> >>> On Mar 21, 2012, at 5:29 PM, J. Bruce Fields wrote:
> >>> 
> >>>> On Wed, Mar 21, 2012 at 05:11:40PM -0400, Chuck Lever wrote:
> >>>>> 1.  We have to create a version of lookup_export() that does exactly what's needed to find the junction's parent.
> >>>>> 
> >>>>> 2.  Once we find the parent's exportent, we have to reverse parse the data in that exportent to get an options string, and concatenate that to the options string we're building for the junction itself.
> >>>>> 
> >>>>> 3.  Once we have the full options string for the junction, we use mkexportent() to convert it all back into another exportent.  (or is there a simple way to merge the exportents?)
> >> 
> >> You should be able to skip steps 2 and 3 and use dupexportent.
> >> 
> >> Does that sound doable?
> > 
> > The current junction lookup logic uses mkexportent(), which returns a statically allocated exportent that doesn't need to be freed.  That makes the lookup_junction() call site simple, but that's too clever by half.  Using dupexportent() unchanged would require some reworking there in order to free the duplicated exportent.
> > 
> > Also I'm not quite sure how to safely combine the use of mkexportent(), which parses the referral options we just created, and dupexportent(), which would duplicate the options from the parent, but would walk on e_hostname.
> > 
> > I could address both those problems by constructing a new function which was an amalgam of the two.
> 
> updateexportent() might do the trick.

Any luck with that?

--b.

> 
> > I still have to play with the lookup_export() logic to see how to find a junction's parent export.
> > 
> >> --b.
> >> 
> >>>>> 
> >>>>> 4.  Then, we send the referral data to the kernel by converting that exportent back into a string with dump_to_cache().
> >>>>> 
> >>>>> For the time being, though a kludge, it seems easiest by far to simply stick the "insecure" option on all junctions.  I don't think this is otherwise terribly risky.
> >>>>> 
> >>>>> Maybe at some later point we can think of a cleaner way to approach this?  Is there a possible kernel solution for this (ie something that can be done in the kernel's export cache only for referrals)?
> >>>>> 
> >>>>>> --b.
> >>>>>> 
> >>>>>>> 
> >>>>>>> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
> >>>>>>> ---
> >>>>>>> 
> >>>>>>> utils/mountd/cache.c |    2 +-
> >>>>>>> 1 files changed, 1 insertions(+), 1 deletions(-)
> >>>>>>> 
> >>>>>>> diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c
> >>>>>>> index ac9cdbd..35bc2e9 100644
> >>>>>>> --- a/utils/mountd/cache.c
> >>>>>>> +++ b/utils/mountd/cache.c
> >>>>>>> @@ -853,7 +853,7 @@ locations_to_options(struct jp_ops *ops, nfs_fsloc_set_t locations,
> >>>>>>> 			ptr += len;
> >>>>>>> 		} else {
> >>>>>>> 			if (last_path == NULL)
> >>>>>>> -				len = snprintf(ptr, remaining, "refer=%s@%s",
> >>>>>>> +				len = snprintf(ptr, remaining, "insecure,refer=%s@%s",
> >>>>>>> 							rootpath, server);
> >>>>>>> 			else
> >>>>>>> 				len = snprintf(ptr, remaining, ":%s@%s",
> >>>>>>> 
> >>>>>> --
> >>>>>> 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
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> 
> >>>> --
> >>>> 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
> >>> 
> >>> 
> >>> 
> >>> 
> >> --
> >> 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
> > 
> > 
> > 
> > 
> > --
> > 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
> 
> 
> 
> 

  reply	other threads:[~2012-04-11 21:31 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-02 19:54 [PATCH] RFC: export options for junctions Chuck Lever
2012-03-20 16:06 ` Chuck Lever
2012-03-20 19:56 ` J. Bruce Fields
2012-03-21 21:11   ` Chuck Lever
2012-03-21 21:29     ` J. Bruce Fields
2012-03-21 21:35       ` Chuck Lever
2012-03-22 10:59         ` J. Bruce Fields
2012-03-22 19:28           ` Chuck Lever
2012-03-22 19:34             ` Chuck Lever
2012-04-11 21:31               ` J. Bruce Fields [this message]
2012-04-11 21:32                 ` Chuck Lever

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120411213102.GC31706@fieldses.org \
    --to=bfields@fieldses.org \
    --cc=chuck.lever@oracle.com \
    --cc=linux-nfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).