Re: [PATCH] NFSD: Fix NFS server build errors

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2020-03-06 at 10:56 -0500, Chuck Lever wrote:
> > On Mar 5, 2020, at 9:14 PM, Yuehaibing <yuehaibing@xxxxxxxxxx>
> > wrote:
> > 
> > On 2020/3/6 7:38, Chuck Lever wrote:
> > > yuehaibing@xxxxxxxxxx reports the following build errors arise
> > > when
> > > CONFIG_NFSD_V4_2_INTER_SSC is set and the NFS client is not built
> > > into the kernel:
> > > 
> > > fs/nfsd/nfs4proc.o: In function `nfsd4_do_copy':
> > > nfs4proc.c:(.text+0x23b7): undefined reference to
> > > `nfs42_ssc_close'
> > > fs/nfsd/nfs4proc.o: In function `nfsd4_copy':
> > > nfs4proc.c:(.text+0x5d2a): undefined reference to
> > > `nfs_sb_deactive'
> > > fs/nfsd/nfs4proc.o: In function `nfsd4_do_async_copy':
> > > nfs4proc.c:(.text+0x61d5): undefined reference to
> > > `nfs42_ssc_open'
> > > nfs4proc.c:(.text+0x6389): undefined reference to
> > > `nfs_sb_deactive'
> > > 
> > > The new inter-server copy code invokes client functions. Until
> > > the
> > > NFS server has infrastructure to load the appropriate NFS client
> > > modules to handle inter-server copy requests, let's constrain the
> > > way this feature is built.
> > > 
> > > Reported-by: YueHaibing <yuehaibing@xxxxxxxxxx>
> > > Fixes: ce0887ac96d3 ("NFSD add nfs4 inter ssc to nfsd4_copy")
> > > Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx>
> > > ---
> > > fs/nfsd/Kconfig |    2 +-
> > > 1 file changed, 1 insertion(+), 1 deletion(-)
> > > 
> > > Yue - does this work for you? The dependency is easier for me to
> > > understand.
> > 
> > It works for me.
> > 
> > Tested-by: YueHaibing <yuehaibing@xxxxxxxxxx> # build-tested
> 
> Thanks, I've added this tag and pushed to nfsd-5.7-testing.
> 
> Bruce and Olga, you can still veto this approach until I push into
> linux-next. It will be a couple of weeks at least.
> 
> 
> > > Bruce and Olga - OK with this temporary solution?
> > > 
> > > diff --git a/fs/nfsd/Kconfig b/fs/nfsd/Kconfig
> > > index f368f3215f88..99d2cae91bd6 100644
> > > --- a/fs/nfsd/Kconfig
> > > +++ b/fs/nfsd/Kconfig
> > > @@ -136,7 +136,7 @@ config NFSD_FLEXFILELAYOUT
> > > 
> > > config NFSD_V4_2_INTER_SSC
> > > 	bool "NFSv4.2 inter server to server COPY"
> > > -	depends on NFSD_V4 && NFS_V4_1 && NFS_V4_2
> > > +	depends on NFSD_V4 && NFS_V4_1 && NFS_V4_2 && NFS_FS=y
> > > 	help
> > > 	  This option enables support for NFSv4.2 inter server to
> > > 	  server copy where the destination server calls the NFSv4.2
> 

I'd like to suggest that we do this differently.

Let's add a structure

struct ssc_client_ops {
      struct file *(*open)(struct vfsmount *ss_mnt,
                           struct nfs_fh *src_fh, nfs4_stateid
                           *stateid);
      void (*close)(struct file *filep);
};

and then allow the client to register that structure in
fs/nfs/nfs_common when it is loaded (and unregister when it is
unloaded). The 'open' and 'close' fields get set to be pointers to the
functions nfs42_ssc_open and nfs42_ssc_close.

We can then add functions in fs/nfs/nfs_common to access the functions
stored in struct ssc_client_ops, and that can be called by the knfsd
server.

This would allow us to keep both the nfs client and server as modules.
Only nfs_common needs to be compiled into the kernel (as is the case
already today).

-- 
Trond Myklebust
Linux NFS client maintainer, Hammerspace
trond.myklebust@xxxxxxxxxxxxxxx






[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux