@@ -1287,25 +1287,12 @@ static inline void xs_tcp_read_common(struct rpc_xprt *xprt,
1287
1287
}
1288
1288
1289
1289
len = desc -> count ;
1290
- if (len > transport -> tcp_reclen - transport -> tcp_offset ) {
1291
- struct xdr_skb_reader my_desc ;
1292
-
1293
- len = transport -> tcp_reclen - transport -> tcp_offset ;
1294
- memcpy (& my_desc , desc , sizeof (my_desc ));
1295
- my_desc .count = len ;
1296
- r = xdr_partial_copy_from_skb (rcvbuf , transport -> tcp_copied ,
1297
- & my_desc , xdr_skb_read_bits );
1298
- desc -> count -= r ;
1299
- desc -> offset += r ;
1300
- } else
1301
- r = xdr_partial_copy_from_skb (rcvbuf , transport -> tcp_copied ,
1290
+ if (len > transport -> tcp_reclen - transport -> tcp_offset )
1291
+ desc -> count = transport -> tcp_reclen - transport -> tcp_offset ;
1292
+ r = xdr_partial_copy_from_skb (rcvbuf , transport -> tcp_copied ,
1302
1293
desc , xdr_skb_read_bits );
1303
1294
1304
- if (r > 0 ) {
1305
- transport -> tcp_copied += r ;
1306
- transport -> tcp_offset += r ;
1307
- }
1308
- if (r != len ) {
1295
+ if (desc -> count ) {
1309
1296
/* Error when copying to the receive buffer,
1310
1297
* usually because we weren't able to allocate
1311
1298
* additional buffer pages. All we can do now
@@ -1325,6 +1312,10 @@ static inline void xs_tcp_read_common(struct rpc_xprt *xprt,
1325
1312
return ;
1326
1313
}
1327
1314
1315
+ transport -> tcp_copied += r ;
1316
+ transport -> tcp_offset += r ;
1317
+ desc -> count = len - r ;
1318
+
1328
1319
dprintk ("RPC: XID %08x read %zd bytes\n" ,
1329
1320
ntohl (transport -> tcp_xid ), r );
1330
1321
dprintk ("RPC: xprt = %p, tcp_copied = %lu, tcp_offset = %u, "
0 commit comments