From: Chuck Lever <chuck.lever@oracle.com>
To: Wang Yugui <wangyugui@e16-tech.com>
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH RFC 4/5] nfsref: Improve nfsref(5)
Date: Sat, 25 Jan 2025 11:09:26 -0500 [thread overview]
Message-ID: <bd891d2c-7db8-4645-85a6-689de1462e1b@oracle.com> (raw)
In-Reply-To: <20250125200217.7A01.409509F4@e16-tech.com>
On 1/25/25 7:02 AM, Wang Yugui wrote:
> Hi,
>
>> From: Chuck Lever <chuck.lever@oracle.com>
>>
>> Neil Brown says:
>>> ... I found the man page a bit confusing. It starts off talking about
>>> "referrals", which are suitably defined. Then drifts into talking about
>>> "junctions" which might be the same thing, but aren't defined.
>>>
>>> The intro suggests that the admin can use "refer=" in /etc/exports, but
>>> doesn't say why they might want to use "nfsref" instead, or how the two
>>> relate.
>>>
>>> Description says "Other administrative commands provide richer access to
>>> junction information." but there are no pointers in "See Also".
>>>
>>> The --type option, we are told, can specify nfs-fedfs but there is no
>>> further mention of this, or any pointers to more info. Maybe add
>>> "(deprecated)"??
>>
>> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
>> ---
>> utils/nfsref/nfsref.man | 60 ++++++++++++++++++++++++-----------------------
>> 1 file changed, 31 insertions(+), 29 deletions(-)
>>
>> diff --git a/utils/nfsref/nfsref.man b/utils/nfsref/nfsref.man
>> index 12615497a404..1970f9dd4144 100644
>> --- a/utils/nfsref/nfsref.man
>> +++ b/utils/nfsref/nfsref.man
>> @@ -53,33 +53,37 @@ nfsref \- manage NFS referrals
>> NFS version 4 introduces the concept of
>> .I file system referrals
>> to NFS.
>> -A file system referral is like a symbolic link on a file server
>> -to another file system share, possibly on another file server.
>> -On an NFS client, a referral behaves like an automounted directory.
>> -The client, under the server's direction, mounts a new NFS export
>> -automatically when an application first accesses that directory.
>> .P
>> -Referrals are typically used to construct a single file name space
>> -across multiple file servers.
>> -Because file servers control the shape of the name space,
>> -no client configuration is required,
>> -and all clients see the same referral information.
>> +A file system referral is like a symbolic link
>> +(or,
>> +.IR symlink )
>> +to another file system share, typically on another file server.
>> +An NFS client, under the server's direction,
>> +mounts the referred-to NFS export
>> +automatically when an application first accesses it.
>> .P
>> -The Linux NFS server supports NFS version 4 referrals.
>> -Administrators can specify the
>> -.B refer=
>> -export option in
>> -.I /etc/exports
>> -to configure a list of exports from which the client can choose.
>> -See
>> -.BR exports (5)
>> -for details.
>> +NFSv4 referrals can be used to transparently redirect clients
>> +to file systems that have been moved elsewhere, or
>> +to construct a single file name space across multiple file servers.
>> +Because file servers control the shape of the whole file name space,
>> +no client configuration is required.
>> .P
>> .SH DESCRIPTION
>> +A
>> +.I junction
>> +is a file system object on an NFS server that,
>> +when an NFS client encounters it, triggers a referral.
>> +Similar to a symlink, a junction contains one or more target locations
>> +that the server sends to clients in the form of an NFSv4 referral.
>> +.P
>> +On Linux, an existing directory can be converted to a junction
>> +and back atomically and without the loss of the directory contents.
>> +When a directory acts as a junction, it's local content is hidden
>> +from NFSv4 clients.
>> +.P
>> The
>> .BR nfsref (8)
>> -command is a simple way to get started managing junction metadata.
>> -Other administrative commands provide richer access to junction information.
>> +command is a simple way to get started managing junctions and their content.
>> .SS Subcommands
>> Valid
>> .BR nfsref (8)
>> @@ -135,6 +139,10 @@ For the
>> .B add
>> subcommand, the default value if this option is not specified is
>> .BR nfs-basic .
>> +The
>> +.B nfs-fedfs
>> +type is not used in this implementation.
>> +.IP
>> For the
>> .B remove
>> and
>> @@ -163,18 +171,12 @@ you might issue this command as root:
>> .sp
>> # mkdir /home
>> .br
>> -# nfsref --type=nfs-basic add /home home.example.net /
>> +# nfsref add /home home.example.net /
>> .br
>> Created junction /home.
>> .sp
>> .RE
>> -.SH FILES
>> -.TP
>> -.I /etc/exports
>> -NFS server export table
>> .SH "SEE ALSO"
>> -.BR exports (5)
>> -.sp
>> -RFC 5661 for a description of NFS version 4 referrals
>> +RFC 8881 for a description of the NFS version 4 referral mechanism
>> .SH "AUTHOR"
>> Chuck Lever <chuck.lever@oracle.com>
>
> Very nice info.
>
> some test result here and then some question.
>
> nfs client / nfs server: kernel 6.6.74/6.12.11
> nfs-utis: 2.7.1
>
> test case 1 of refer= (only single refer= in /etc/exports) works well.
> #/etc/exports
> /mnt/test *(rw,async,crossmnt,no_root_squash,refer=/mnt@192.168.2.75)
>
> test case 2 of refer= (add /mnt to /exports to test crossmnt) faild to work.
> #/etc/exports
> /mnt *(rw,async,crossmnt,no_root_squash)
> /mnt/test *(rw,async,crossmnt,no_root_squash,refer=/mnt@192.168.2.75)
>
> test case 1 of nfsref failed to work
> #/etc/exports
> /mnt/test *(rw,async,crossmnt,no_root_squash)
> # nfsref add /mnt/test 192.168.2.75 /mnt
> # nfsref lookup /mnt/test/
> 192.168.2.75:/mnt
>
> NFS port: 2049
> Valid for: 0
> Currency: -1
> Flags: varsub(false)
> GenFlags: writable(false), going(false), split(true)
> TransFlags: rdma(true)
> Class: simul(0), handle(0), fileid(0)
> Class: writever(0), change(0), readdir(0)
> Read: rank(0), order(0)
> Write: rank(0), order(0)# mount 192.168.2.74:/mnt /nfs
> # mount 192.168.2.74:/mnt/test /nfs
> mount.nfs: Stale file handle for (null) on /nfs
>
>
> test case 2 of nfsref(crossmnt) failed to work
> #/etc/exports
> /mnt *(rw,async,crossmnt,no_root_squash
> #mount.nfs4 192.168.2.74:/mnt /nfs
> #find /nfs
> find: ‘/nfs/test’: Stale file handle
>
> Question 1:
> refer= in /exports yet fail to work with crossmnt?
>
> Question 2:
> nfsref yet fail to work, or we need more setting?
I'm afraid all of this has fallen out of my brain cache a long
time ago. Can you provide a little more context? Can you say
how you expect "crossmnt" to affect the action of a referral?
--
Chuck Lever
next prev parent reply other threads:[~2025-01-25 16:09 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-20 18:53 [PATCH RFC 0/5] Possible changes to nfs-utils junction support Chuck Lever
2023-11-20 18:53 ` [PATCH RFC 1/5] junction: Replace xmlParseMemory Chuck Lever
2023-11-20 18:53 ` [PATCH RFC 2/5] junction: Remove xmlIndentTreeOutput Chuck Lever
2023-11-20 18:53 ` [PATCH RFC 3/5] nfsref: Remove unneeded #include in utils/nfsref/nfsref.c Chuck Lever
2023-11-20 18:53 ` [PATCH RFC 4/5] nfsref: Improve nfsref(5) Chuck Lever
[not found] ` <20250125200217.7A01.409509F4@e16-tech.com>
2025-01-25 16:09 ` Chuck Lever [this message]
2023-11-20 18:54 ` [PATCH RFC 5/5] configure: Make --enable-junction=yes the default Chuck Lever
2023-11-20 18:58 ` [PATCH RFC 0/5] Possible changes to nfs-utils junction support Chuck Lever III
2023-11-21 15:48 ` Chuck Lever III
2023-12-07 19:36 ` Steve Dickson
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=bd891d2c-7db8-4645-85a6-689de1462e1b@oracle.com \
--to=chuck.lever@oracle.com \
--cc=linux-nfs@vger.kernel.org \
--cc=wangyugui@e16-tech.com \
/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