@@ -2027,62 +2027,24 @@ static void nfs4_clear_inode(struct inode *inode)
2027
2027
}
2028
2028
2029
2029
2030
- static int nfs4_fill_super (struct super_block * sb , struct nfs4_mount_data * data , int silent )
2030
+ static struct rpc_clnt * nfs4_create_client (struct nfs_server * server ,
2031
+ struct rpc_timeout * timeparms , int proto , rpc_authflavor_t flavor )
2031
2032
{
2032
- struct nfs_server * server ;
2033
- struct nfs4_client * clp = NULL ;
2033
+ struct nfs4_client * clp ;
2034
2034
struct rpc_xprt * xprt = NULL ;
2035
2035
struct rpc_clnt * clnt = NULL ;
2036
- struct rpc_timeout timeparms ;
2037
- rpc_authflavor_t authflavour ;
2038
2036
int err = - EIO ;
2039
2037
2040
- sb -> s_blocksize_bits = 0 ;
2041
- sb -> s_blocksize = 0 ;
2042
- server = NFS_SB (sb );
2043
- if (data -> rsize != 0 )
2044
- server -> rsize = nfs_block_size (data -> rsize , NULL );
2045
- if (data -> wsize != 0 )
2046
- server -> wsize = nfs_block_size (data -> wsize , NULL );
2047
- server -> flags = data -> flags & NFS_MOUNT_FLAGMASK ;
2048
- server -> caps = NFS_CAP_ATOMIC_OPEN ;
2049
-
2050
- server -> acregmin = data -> acregmin * HZ ;
2051
- server -> acregmax = data -> acregmax * HZ ;
2052
- server -> acdirmin = data -> acdirmin * HZ ;
2053
- server -> acdirmax = data -> acdirmax * HZ ;
2054
-
2055
- server -> rpc_ops = & nfs_v4_clientops ;
2056
-
2057
- nfs_init_timeout_values (& timeparms , data -> proto , data -> timeo , data -> retrans );
2058
-
2059
- server -> retrans_timeo = timeparms .to_initval ;
2060
- server -> retrans_count = timeparms .to_retries ;
2061
-
2062
2038
clp = nfs4_get_client (& server -> addr .sin_addr );
2063
2039
if (!clp ) {
2064
2040
dprintk ("%s: failed to create NFS4 client.\n" , __FUNCTION__ );
2065
- return - EIO ;
2041
+ return ERR_PTR ( err ) ;
2066
2042
}
2067
2043
2068
2044
/* Now create transport and client */
2069
- authflavour = RPC_AUTH_UNIX ;
2070
- if (data -> auth_flavourlen != 0 ) {
2071
- if (data -> auth_flavourlen != 1 ) {
2072
- dprintk ("%s: Invalid number of RPC auth flavours %d.\n" ,
2073
- __FUNCTION__ , data -> auth_flavourlen );
2074
- err = - EINVAL ;
2075
- goto out_fail ;
2076
- }
2077
- if (copy_from_user (& authflavour , data -> auth_flavours , sizeof (authflavour ))) {
2078
- err = - EFAULT ;
2079
- goto out_fail ;
2080
- }
2081
- }
2082
-
2083
2045
down_write (& clp -> cl_sem );
2084
2046
if (IS_ERR (clp -> cl_rpcclient )) {
2085
- xprt = xprt_create_proto (data -> proto , & server -> addr , & timeparms );
2047
+ xprt = xprt_create_proto (proto , & server -> addr , timeparms );
2086
2048
if (IS_ERR (xprt )) {
2087
2049
up_write (& clp -> cl_sem );
2088
2050
err = PTR_ERR (xprt );
@@ -2091,7 +2053,7 @@ static int nfs4_fill_super(struct super_block *sb, struct nfs4_mount_data *data,
2091
2053
goto out_fail ;
2092
2054
}
2093
2055
clnt = rpc_create_client (xprt , server -> hostname , & nfs_program ,
2094
- server -> rpc_ops -> version , authflavour );
2056
+ server -> rpc_ops -> version , flavor );
2095
2057
if (IS_ERR (clnt )) {
2096
2058
up_write (& clp -> cl_sem );
2097
2059
err = PTR_ERR (clnt );
@@ -2108,43 +2070,96 @@ static int nfs4_fill_super(struct super_block *sb, struct nfs4_mount_data *data,
2108
2070
list_add_tail (& server -> nfs4_siblings , & clp -> cl_superblocks );
2109
2071
clnt = rpc_clone_client (clp -> cl_rpcclient );
2110
2072
if (!IS_ERR (clnt ))
2111
- server -> nfs4_state = clp ;
2073
+ server -> nfs4_state = clp ;
2112
2074
up_write (& clp -> cl_sem );
2113
2075
clp = NULL ;
2114
2076
2115
2077
if (IS_ERR (clnt )) {
2116
- err = PTR_ERR (clnt );
2117
2078
dprintk ("%s: cannot create RPC client. Error = %d\n" ,
2118
2079
__FUNCTION__ , err );
2119
- return err ;
2080
+ return clnt ;
2120
2081
}
2121
2082
2122
- server -> client = clnt ;
2123
-
2124
2083
if (server -> nfs4_state -> cl_idmap == NULL ) {
2125
2084
dprintk ("%s: failed to create idmapper.\n" , __FUNCTION__ );
2126
- return - ENOMEM ;
2085
+ return ERR_PTR ( - ENOMEM ) ;
2127
2086
}
2128
2087
2129
- if (clnt -> cl_auth -> au_flavor != authflavour ) {
2088
+ if (clnt -> cl_auth -> au_flavor != flavor ) {
2130
2089
struct rpc_auth * auth ;
2131
2090
2132
- auth = rpcauth_create (authflavour , clnt );
2091
+ auth = rpcauth_create (flavor , clnt );
2133
2092
if (IS_ERR (auth )) {
2134
2093
dprintk ("%s: couldn't create credcache!\n" , __FUNCTION__ );
2135
- return PTR_ERR (auth );
2094
+ return (struct rpc_clnt * )auth ;
2095
+ }
2096
+ }
2097
+ return clnt ;
2098
+
2099
+ out_fail :
2100
+ if (clp )
2101
+ nfs4_put_client (clp );
2102
+ return ERR_PTR (err );
2103
+ }
2104
+
2105
+ static int nfs4_fill_super (struct super_block * sb , struct nfs4_mount_data * data , int silent )
2106
+ {
2107
+ struct nfs_server * server ;
2108
+ struct rpc_timeout timeparms ;
2109
+ rpc_authflavor_t authflavour ;
2110
+ int err = - EIO ;
2111
+
2112
+ sb -> s_blocksize_bits = 0 ;
2113
+ sb -> s_blocksize = 0 ;
2114
+ server = NFS_SB (sb );
2115
+ if (data -> rsize != 0 )
2116
+ server -> rsize = nfs_block_size (data -> rsize , NULL );
2117
+ if (data -> wsize != 0 )
2118
+ server -> wsize = nfs_block_size (data -> wsize , NULL );
2119
+ server -> flags = data -> flags & NFS_MOUNT_FLAGMASK ;
2120
+ server -> caps = NFS_CAP_ATOMIC_OPEN ;
2121
+
2122
+ server -> acregmin = data -> acregmin * HZ ;
2123
+ server -> acregmax = data -> acregmax * HZ ;
2124
+ server -> acdirmin = data -> acdirmin * HZ ;
2125
+ server -> acdirmax = data -> acdirmax * HZ ;
2126
+
2127
+ server -> rpc_ops = & nfs_v4_clientops ;
2128
+
2129
+ nfs_init_timeout_values (& timeparms , data -> proto , data -> timeo , data -> retrans );
2130
+
2131
+ server -> retrans_timeo = timeparms .to_initval ;
2132
+ server -> retrans_count = timeparms .to_retries ;
2133
+
2134
+ /* Now create transport and client */
2135
+ authflavour = RPC_AUTH_UNIX ;
2136
+ if (data -> auth_flavourlen != 0 ) {
2137
+ if (data -> auth_flavourlen != 1 ) {
2138
+ dprintk ("%s: Invalid number of RPC auth flavours %d.\n" ,
2139
+ __FUNCTION__ , data -> auth_flavourlen );
2140
+ err = - EINVAL ;
2141
+ goto out_fail ;
2142
+ }
2143
+ if (copy_from_user (& authflavour , data -> auth_flavours , sizeof (authflavour ))) {
2144
+ err = - EFAULT ;
2145
+ goto out_fail ;
2136
2146
}
2137
2147
}
2138
2148
2149
+ server -> client = nfs4_create_client (server , & timeparms , data -> proto , authflavour );
2150
+ if (IS_ERR (server -> client )) {
2151
+ err = PTR_ERR (server -> client );
2152
+ dprintk ("%s: cannot create RPC client. Error = %d\n" ,
2153
+ __FUNCTION__ , err );
2154
+ goto out_fail ;
2155
+ }
2156
+
2139
2157
sb -> s_time_gran = 1 ;
2140
2158
2141
2159
sb -> s_op = & nfs4_sops ;
2142
2160
err = nfs_sb_init (sb , authflavour );
2143
- if (err == 0 )
2144
- return 0 ;
2145
- out_fail :
2146
- if (clp )
2147
- nfs4_put_client (clp );
2161
+
2162
+ out_fail :
2148
2163
return err ;
2149
2164
}
2150
2165
0 commit comments