2008-10-31 00:56:29

by lioupayphone

[permalink] [raw]
Subject: why there is no "s_export_op" in nfs_super_block?

Hi, linux-nfs

i have a question about NFS.
say, i have three different machines, Machine-1 is a NFS Server who exported its directory "/home/pub" to Machine-2, which mounted "mount -t nfs Machine-1:/home/pub /mnt/pub/".

i want Machine-2 to be a NFS Server which exports its directory "/mnt/pub" to Machine-3, permission denied when i execute "mount -t nfs Machine-2:/mnt/pub/ /mnt/" on Machine-3.
( btw : all the three machines are of linux 2.6.17-1, a little old kernel :-) )

i browsed the code of 2.6.17-1 and found check_export() in fs/nfsd/exports.c , who told me there are two reasons for that :

/* There are two requirements on a filesystem to be exportable.
* 1: We must be able to identify the filesystem from a number.
* either a device number (so FS_REQUIRES_DEV needed)
* or an FSID number (so NFSEXP_FSID needed).
* 2: We must be able to find an inode from a filehandle.
* This means that s_export_op must be set.
*/

i think if i set "/home/pub Machin-2(sync,root_squash,fsid=1)" and "/mnt/pub Machine-2(sync,root_squash,fsid=2)" individually in "/etc/exports" of Machine-1 and Machine-2, the requirement-1 will be meet.
but nfs_fill_super() failed to register its s_export_op. why? i am puzzled. thank you for your suggestions and explanations. :-)


Best Regards!
lioupayphone



2008-11-04 22:36:39

by J. Bruce Fields

[permalink] [raw]
Subject: Re: why there is no "s_export_op" in nfs_super_block?

On Fri, Oct 31, 2008 at 08:56:20AM +0800, lioupayphone wrote:
> Hi, linux-nfs
>
> i have a question about NFS.
> say, i have three different machines, Machine-1 is a NFS Server who exported its directory "/home/pub" to Machine-2, which mounted "mount -t nfs Machine-1:/home/pub /mnt/pub/".
>
> i want Machine-2 to be a NFS Server which exports its directory "/mnt/pub" to Machine-3, permission denied when i execute "mount -t nfs Machine-2:/mnt/pub/ /mnt/" on Machine-3.
> ( btw : all the three machines are of linux 2.6.17-1, a little old kernel :-) )
>
> i browsed the code of 2.6.17-1 and found check_export() in fs/nfsd/exports.c , who told me there are two reasons for that :
>
> /* There are two requirements on a filesystem to be exportable.
> * 1: We must be able to identify the filesystem from a number.
> * either a device number (so FS_REQUIRES_DEV needed)
> * or an FSID number (so NFSEXP_FSID needed).
> * 2: We must be able to find an inode from a filehandle.
> * This means that s_export_op must be set.
> */
>
> i think if i set "/home/pub Machin-2(sync,root_squash,fsid=1)" and "/mnt/pub Machine-2(sync,root_squash,fsid=2)" individually in "/etc/exports" of Machine-1 and Machine-2, the requirement-1 will be meet.
> but nfs_fill_super() failed to register its s_export_op. why? i am puzzled. thank you for your suggestions and explanations. :-)

What you're asking to do is to re-export an nfs filesystem over nfs.

That's not currently supported with linux, and there aren't plans to
support it any time soon.

There are userspace nfs servers that might this, though I don't know
what their status--they don't seem to be maintained much and probably
don't have a lot of features.

--b.