@@ -670,7 +670,8 @@ xs_read_stream(struct sock_xprt *transport, int flags)
670
670
671
671
static __poll_t xs_poll_socket (struct sock_xprt * transport )
672
672
{
673
- return transport -> sock -> ops -> poll (NULL , transport -> sock , NULL );
673
+ return transport -> sock -> ops -> poll (transport -> file , transport -> sock ,
674
+ NULL );
674
675
}
675
676
676
677
static bool xs_poll_socket_readable (struct sock_xprt * transport )
@@ -1253,6 +1254,7 @@ static void xs_reset_transport(struct sock_xprt *transport)
1253
1254
struct socket * sock = transport -> sock ;
1254
1255
struct sock * sk = transport -> inet ;
1255
1256
struct rpc_xprt * xprt = & transport -> xprt ;
1257
+ struct file * filp = transport -> file ;
1256
1258
1257
1259
if (sk == NULL )
1258
1260
return ;
@@ -1266,6 +1268,7 @@ static void xs_reset_transport(struct sock_xprt *transport)
1266
1268
write_lock_bh (& sk -> sk_callback_lock );
1267
1269
transport -> inet = NULL ;
1268
1270
transport -> sock = NULL ;
1271
+ transport -> file = NULL ;
1269
1272
1270
1273
sk -> sk_user_data = NULL ;
1271
1274
@@ -1278,7 +1281,7 @@ static void xs_reset_transport(struct sock_xprt *transport)
1278
1281
mutex_unlock (& transport -> recv_mutex );
1279
1282
1280
1283
trace_rpc_socket_close (xprt , sock );
1281
- sock_release ( sock );
1284
+ fput ( filp );
1282
1285
1283
1286
xprt_disconnect_done (xprt );
1284
1287
}
@@ -1873,6 +1876,7 @@ static struct socket *xs_create_sock(struct rpc_xprt *xprt,
1873
1876
struct sock_xprt * transport , int family , int type ,
1874
1877
int protocol , bool reuseport )
1875
1878
{
1879
+ struct file * filp ;
1876
1880
struct socket * sock ;
1877
1881
int err ;
1878
1882
@@ -1893,6 +1897,11 @@ static struct socket *xs_create_sock(struct rpc_xprt *xprt,
1893
1897
goto out ;
1894
1898
}
1895
1899
1900
+ filp = sock_alloc_file (sock , O_NONBLOCK , NULL );
1901
+ if (IS_ERR (filp ))
1902
+ return ERR_CAST (filp );
1903
+ transport -> file = filp ;
1904
+
1896
1905
return sock ;
1897
1906
out :
1898
1907
return ERR_PTR (err );
@@ -1938,6 +1947,7 @@ static int xs_local_finish_connecting(struct rpc_xprt *xprt,
1938
1947
static int xs_local_setup_socket (struct sock_xprt * transport )
1939
1948
{
1940
1949
struct rpc_xprt * xprt = & transport -> xprt ;
1950
+ struct file * filp ;
1941
1951
struct socket * sock ;
1942
1952
int status = - EIO ;
1943
1953
@@ -1950,6 +1960,13 @@ static int xs_local_setup_socket(struct sock_xprt *transport)
1950
1960
}
1951
1961
xs_reclassify_socket (AF_LOCAL , sock );
1952
1962
1963
+ filp = sock_alloc_file (sock , O_NONBLOCK , NULL );
1964
+ if (IS_ERR (filp )) {
1965
+ status = PTR_ERR (filp );
1966
+ goto out ;
1967
+ }
1968
+ transport -> file = filp ;
1969
+
1953
1970
dprintk ("RPC: worker connecting xprt %p via AF_LOCAL to %s\n" ,
1954
1971
xprt , xprt -> address_strings [RPC_DISPLAY_ADDR ]);
1955
1972
0 commit comments