Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 May 2006 08:02:57 -0600
From:      Scott Long <scottl@samsco.org>
To:        Craig Rodrigues <rodrigc@crodrigues.org>
Cc:        cvs-src@FreeBSD.org, src-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sys/fs/udf udf_vfsops.c
Message-ID:  <44770A91.50007@samsco.org>
In-Reply-To: <20060526033840.GA9864@crodrigues.org>
References:  <200605260121.k4Q1LqLd098354@repoman.freebsd.org> <44766E9B.6030000@samsco.org> <20060526033840.GA9864@crodrigues.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Craig Rodrigues wrote:

> On Thu, May 25, 2006 at 08:57:31PM -0600, Scott Long wrote:
> 
>>So is it no longer possible for a filesystem to veto or otherwise 
>>massage an export request?
> 
> 
> It is still possible.  This is because vfs_export() is
> only called in vfs_mount.c, only *after* the VFS_MOUNT()
> call for an individual filesystem is called.
> 
> An individual filesystem can check the mount options being passed into
> its VFS_MOUNT() call, and do a vfs_getopt() and look for the
> "export" option, which contains a "struct export_args", which is
> eventually passed to vfs_export().
> 
> The specific filesystem can do:
> (1)  If the mount options passed into the specific filesystem's
>      VFS_MOUNT() call contains "export", the filesystem
>      can return an error from VFS_MOUNT() if it doesn't want to deal
>      with export requests at all.
>      The code in vfs_mount.c checks for the return status of VFS_MOUNT,
>      and if there is an error, it will *not* call vfs_export().
> 
> (2)  If the mount options contains "export", the filesystem
>      can do a vfs_getopt(), manipulate the contents of the struct export_args,
>      then return 0 (for success).  The code in VFS_MOUNT will
>      then call vfs_export(), passing in the same struct export_args
>      that the individual filesystem
> 
> 
> One example of a filesystem vetoing an "export" request
> is in fs/msdosfs/msdosfs_vfsops.c :
> 
>                 if (vfs_flagopt(mp->mnt_optnew, "export", NULL, 0) {   
>                         /* Process export requests. */
>                         if ((pmp->pm_flags & MSDOSFS_LARGEFS) != 0)
>                                 return (EOPNOTSUPP);
>                         else
>                                 return (0);
>                 }
> 
> 
> Most of the filesystem code I saw looked like they had
> just cut-n-pasted their calls to vfs_export(), so it was
> fairly easy to consolidate everything in one place, vfs_mount.c
> 
> With my recent changes to mountd, to convert to nmount() and remove hardcoded
> dependencies on ufs, cd9660, ntfs, and msdosfs,
> it should be easier to export different filesystems from FreeBSD.
> 
> For example, it should now be possible to NFS export an ext2fs
> from FreeBSD.
> 

Assuming that fhtovp, vptofh, vget, and cookies all work in ext2fs =-)

Scott




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?44770A91.50007>