[PATCH] knfsd: be more selective in which sockets lockd listens on
Currently lockd listens on UDP always, and TCP if CONFIG_NFSD_TCP is set. However as lockd performs services of the client as well, this is a problem. If CONFIG_NfSD_TCP is not set, and a tcp mount is used, the server will not be able to call back to lockd. So: - add an option to lockd_up saying which protocol is needed - Always open sockets for which an explicit port was given, otherwise only open a socket of the type required - Change nfsd to do one lockd_up per socket rather than one per thread. This - removes the dependancy on CONFIG_NFSD_TCP - means that lockd may open sockets other than at startup - means that lockd will *not* listen on UDP if the only mounts are TCP mount (and nfsd hasn't started). The latter is the only one that concerns me at all - I don't know if this might be a problem with some servers. Signed-off-by: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
bc591ccff2
commit
24e36663c3
@ -460,7 +460,8 @@ static int nfs_start_lockd(struct nfs_server *server)
|
||||
goto out;
|
||||
if (server->flags & NFS_MOUNT_NONLM)
|
||||
goto out;
|
||||
error = lockd_up();
|
||||
error = lockd_up((server->flags & NFS_MOUNT_TCP) ?
|
||||
IPPROTO_TCP : IPPROTO_UDP);
|
||||
if (error < 0)
|
||||
server->flags |= NFS_MOUNT_NONLM;
|
||||
else
|
||||
|
Reference in New Issue
Block a user