@@ -97,64 +97,63 @@ static ssize_t rpc_sysfs_xprt_dstaddr_show(struct kobject *kobj,
9797 return 0 ;
9898 ret = sprintf (buf , "%s\n" , xprt -> address_strings [RPC_DISPLAY_ADDR ]);
9999 xprt_put (xprt );
100- return ret + 1 ;
100+ return ret ;
101101}
102102
103103static ssize_t rpc_sysfs_xprt_srcaddr_show (struct kobject * kobj ,
104104 struct kobj_attribute * attr ,
105105 char * buf )
106106{
107107 struct rpc_xprt * xprt = rpc_sysfs_xprt_kobj_get_xprt (kobj );
108- struct sockaddr_storage saddr ;
109- struct sock_xprt * sock ;
110- ssize_t ret = -1 ;
108+ size_t buflen = PAGE_SIZE ;
109+ ssize_t ret = - ENOTSOCK ;
111110
112111 if (!xprt || !xprt_connected (xprt )) {
113- xprt_put (xprt );
114- return - ENOTCONN ;
112+ ret = - ENOTCONN ;
113+ } else if (xprt -> ops -> get_srcaddr ) {
114+ ret = xprt -> ops -> get_srcaddr (xprt , buf , buflen );
115+ if (ret > 0 ) {
116+ if (ret < buflen - 1 ) {
117+ buf [ret ] = '\n' ;
118+ ret ++ ;
119+ buf [ret ] = '\0' ;
120+ }
121+ }
115122 }
116-
117- sock = container_of (xprt , struct sock_xprt , xprt );
118- mutex_lock (& sock -> recv_mutex );
119- if (sock -> sock == NULL ||
120- kernel_getsockname (sock -> sock , (struct sockaddr * )& saddr ) < 0 )
121- goto out ;
122-
123- ret = sprintf (buf , "%pISc\n" , & saddr );
124- out :
125- mutex_unlock (& sock -> recv_mutex );
126123 xprt_put (xprt );
127- return ret + 1 ;
124+ return ret ;
128125}
129126
130127static ssize_t rpc_sysfs_xprt_info_show (struct kobject * kobj ,
131- struct kobj_attribute * attr ,
132- char * buf )
128+ struct kobj_attribute * attr , char * buf )
133129{
134130 struct rpc_xprt * xprt = rpc_sysfs_xprt_kobj_get_xprt (kobj );
131+ unsigned short srcport = 0 ;
132+ size_t buflen = PAGE_SIZE ;
135133 ssize_t ret ;
136134
137135 if (!xprt || !xprt_connected (xprt )) {
138136 xprt_put (xprt );
139137 return - ENOTCONN ;
140138 }
141139
142- ret = sprintf (buf , "last_used=%lu\ncur_cong=%lu\ncong_win=%lu\n"
140+ if (xprt -> ops -> get_srcport )
141+ srcport = xprt -> ops -> get_srcport (xprt );
142+
143+ ret = snprintf (buf , buflen ,
144+ "last_used=%lu\ncur_cong=%lu\ncong_win=%lu\n"
143145 "max_num_slots=%u\nmin_num_slots=%u\nnum_reqs=%u\n"
144146 "binding_q_len=%u\nsending_q_len=%u\npending_q_len=%u\n"
145147 "backlog_q_len=%u\nmain_xprt=%d\nsrc_port=%u\n"
146148 "tasks_queuelen=%ld\ndst_port=%s\n" ,
147149 xprt -> last_used , xprt -> cong , xprt -> cwnd , xprt -> max_reqs ,
148150 xprt -> min_reqs , xprt -> num_reqs , xprt -> binding .qlen ,
149151 xprt -> sending .qlen , xprt -> pending .qlen ,
150- xprt -> backlog .qlen , xprt -> main ,
151- (xprt -> xprt_class -> ident == XPRT_TRANSPORT_TCP ) ?
152- get_srcport (xprt ) : 0 ,
152+ xprt -> backlog .qlen , xprt -> main , srcport ,
153153 atomic_long_read (& xprt -> queuelen ),
154- (xprt -> xprt_class -> ident == XPRT_TRANSPORT_TCP ) ?
155- xprt -> address_strings [RPC_DISPLAY_PORT ] : "0" );
154+ xprt -> address_strings [RPC_DISPLAY_PORT ]);
156155 xprt_put (xprt );
157- return ret + 1 ;
156+ return ret ;
158157}
159158
160159static ssize_t rpc_sysfs_xprt_state_show (struct kobject * kobj ,
@@ -201,7 +200,7 @@ static ssize_t rpc_sysfs_xprt_state_show(struct kobject *kobj,
201200 }
202201
203202 xprt_put (xprt );
204- return ret + 1 ;
203+ return ret ;
205204}
206205
207206static ssize_t rpc_sysfs_xprt_switch_info_show (struct kobject * kobj ,
@@ -220,7 +219,7 @@ static ssize_t rpc_sysfs_xprt_switch_info_show(struct kobject *kobj,
220219 xprt_switch -> xps_nunique_destaddr_xprts ,
221220 atomic_long_read (& xprt_switch -> xps_queuelen ));
222221 xprt_switch_put (xprt_switch );
223- return ret + 1 ;
222+ return ret ;
224223}
225224
226225static ssize_t rpc_sysfs_xprt_dstaddr_store (struct kobject * kobj ,
0 commit comments