Move some NFSv4-only code under CONFIG_NFS_V4.
Subsystems (2)
PATCH 1/1 Move some NFSv4-only code under CONFIG_NFS_V4.
From: Rob Landley <[email protected]>
Move some NFSv4-only stuff under CONFIG_NFS_V4.
---
Space saved from NFSv3-only config on x86_64:
function old new delta
static.T 46908 46905 -3
nfs_start_lockd 178 175 -3 nfs_get_client 930 903 -27 nfs4_cb_match_client 141 - -141
fs/nfs/client.c | 88 ++++++++++++++++++------------------ include/linux/nfs_fs_sb.h | 4 - 2 files changed, 47 insertions(+), 45 deletions(-)
fs/nfs/client.c +45 -43
@@ -383,25 +383,6 @@ static int nfs_sockaddr_cmp_ip4(const struct sockaddr *sa1,/* * Test if two socket addresses represent the same actual socket, -* by comparing (only) relevant fields, excluding the port number. -*/ -static int nfs_sockaddr_match_ipaddr (const struct sockaddr *sa1, -const struct sockaddr *sa2) -{ -if (sa1->sa_family != sa2->sa_family) -return 0 ; - -switch (sa1->sa_family) { -case AF_INET : -return nfs_sockaddr_match_ipaddr4 (sa1, sa2); -case AF_INET6 : -return nfs_sockaddr_match_ipaddr6 (sa1, sa2); - } -return 0 ; -} - -/* -* Test if two socket addresses represent the same actual socket, * by comparing (only) relevant fields, including the port number. */ static int nfs_sockaddr_cmp(const struct sockaddr *sa1,
@@ -419,30 +400,6 @@ static int nfs_sockaddr_cmp(const struct sockaddr *sa1,return 0 ; } -/* Common match routine for v4.0 and v4.1 callback services */ -bool -nfs4_cb_match_client (const struct sockaddr *addr,struct nfs_client *clp, -u32 minorversion) -{ -struct sockaddr *clap = (struct sockaddr *)&clp->cl_addr; - -/* Don't match clients that failed to initialise */ -if (!(clp->cl_cons_state ==NFS_CS_READY || - clp->cl_cons_state ==NFS_CS_SESSION_INITING )) -return false; - -/* Match the version and minorversion */ -if (clp->rpc_ops->version !=4 || - clp->cl_minorversion != minorversion) -return false; - -/* Match only the IP address, not the port number */ -if (!nfs_sockaddr_match_ipaddr (addr, clap)) -return false; - -return true; -} -/* * Find an nfs_client on the list that matches the initialisation data * that is supplied.
@@ -464,9 +421,11 @@ static struct nfs_client *nfs_match_client(const struct nfs_client_initdata *datif (clp->cl_proto != data->proto)continue ; +#ifdef CONFIG_NFS_V4 /* Match nfsv4 minorversion */ if (clp->cl_minorversion != data->minorversion)continue ; +#endif /* Match the full socket address */ if (!nfs_sockaddr_cmp (sap, clap))continue ;
@@ -1156,6 +1115,49 @@ error:#ifdef CONFIG_NFS_V4 /* +* Test if two socket addresses represent the same actual socket, +* by comparing (only) relevant fields, excluding the port number. +*/ +static int nfs_sockaddr_match_ipaddr (const struct sockaddr *sa1, +const struct sockaddr *sa2) +{ +if (sa1->sa_family != sa2->sa_family) +return 0 ; + +switch (sa1->sa_family) { +case AF_INET : +return nfs_sockaddr_match_ipaddr4 (sa1, sa2); +case AF_INET6 : +return nfs_sockaddr_match_ipaddr6 (sa1, sa2); + } +return 0 ; +} + +/* Common match routine for v4.0 and v4.1 callback services */ +bool +nfs4_cb_match_client (const struct sockaddr *addr,struct nfs_client *clp, +u32 minorversion) +{ +struct sockaddr *clap = (struct sockaddr *)&clp->cl_addr; + +/* Don't match clients that failed to initialise */ +if (!(clp->cl_cons_state ==NFS_CS_READY || + clp->cl_cons_state ==NFS_CS_SESSION_INITING )) +return false; + +/* Match the version and minorversion */ +if (clp->rpc_ops->version !=4 || + clp->cl_minorversion != minorversion) +return false; + +/* Match only the IP address, not the port number */ +if (!nfs_sockaddr_match_ipaddr (addr, clap)) +return false; + +return true; +} + +/* * NFSv4.0 callback thread helper * * Find a client by IP address, protocol version, and minorversion
include/linux/nfs_fs_sb.h +2 -2
@@ -23,6 +23,7 @@ struct nfs4_minor_version_ops;struct nfs_client {atomic_t cl_count;int cl_cons_state;/* current construction state (-ve: init error) */ +int cl_proto;/* Network transport protocol */ #define NFS_CS_READY 0/* ready to be used */ #define NFS_CS_INITING 1/* busy initialising */ #define NFS_CS_SESSION_INITING 2/* busy initialising session */
@@ -38,9 +39,7 @@ struct nfs_client {struct rpc_clnt * cl_rpcclient;const struct nfs_rpc_ops *rpc_ops;/* NFS protocol vector */ -int cl_proto;/* Network transport protocol */ -u32 cl_minorversion;/* NFSv4 minorversion */ struct rpc_cred *cl_machine_cred;#ifdef CONFIG_NFS_V4
@@ -67,6 +66,7 @@ struct nfs_client {char cl_ipaddr[48 ];unsigned char cl_id_uniquifier;u32 cl_cb_ident;/* v4.0 callback identifier */ +u32 cl_minorversion;/* NFSv4 minorversion */ const struct nfs4_minor_version_ops *cl_mvops;#endif /* CONFIG_NFS_V4 */
Trond Myklebust
NAKQuoted 11 lines · Rob Landley
From: Rob Landley <[email protected]>
Move some NFSv4-only stuff under
CONFIG_NFS_V4.Signed-off-by Rob Landley <[email protected]>---
Space saved from NFSv3-only config on
x86_64:function old new delta
static.T 46908 46905 -3
Quoted 7 lines
nfs_start_lockd 178 175 -3 nfs_get_client 930 903 -27 nfs4_cb_match_client 141 - -141fs/nfs/client.c | 88 ++++++++++++++++++------------------ include/linux/nfs_fs_sb.h | 4 - 2 files changed, 47 insertions(+), 45 deletions(-)
NACK.
The longer term project is to get rid of CONFIG_NFS_Vx. Maintaining all these different configuration options just for the sake of saving a few bytes here and there is a non-scalable proposition...
Signature · 6 lines
Trond Myklebust Linux NFS client maintainer NetApp [email protected] www.netapp.com