summaryrefslogtreecommitdiffstats
path: root/net/sunrpc/xprtsock.c
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@hammerspace.com>2018-08-13 15:48:42 -0400
committerTrond Myklebust <trond.myklebust@hammerspace.com>2018-09-30 15:35:14 -0400
commitd1109aa56c71e19fc117e75bff11384fc7279a3b (patch)
tree231799eeb09377033370e9d435a5b67006054d45 /net/sunrpc/xprtsock.c
parent3a03818fbee0a85196a2214f07db9e2b622e2550 (diff)
SUNRPC: Rename TCP receive-specific state variables
Since we will want to introduce similar TCP state variables for the transmission of requests, let's rename the existing ones to label that they are for the receive side. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Diffstat (limited to 'net/sunrpc/xprtsock.c')
-rw-r--r--net/sunrpc/xprtsock.c178
1 files changed, 89 insertions, 89 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 6b7539c0466e..cd7d093721ae 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -1169,42 +1169,42 @@ static inline void xs_tcp_read_fraghdr(struct rpc_xprt *xprt, struct xdr_skb_rea
1169 size_t len, used; 1169 size_t len, used;
1170 char *p; 1170 char *p;
1171 1171
1172 p = ((char *) &transport->tcp_fraghdr) + transport->tcp_offset; 1172 p = ((char *) &transport->recv.fraghdr) + transport->recv.offset;
1173 len = sizeof(transport->tcp_fraghdr) - transport->tcp_offset; 1173 len = sizeof(transport->recv.fraghdr) - transport->recv.offset;
1174 used = xdr_skb_read_bits(desc, p, len); 1174 used = xdr_skb_read_bits(desc, p, len);
1175 transport->tcp_offset += used; 1175 transport->recv.offset += used;
1176 if (used != len) 1176 if (used != len)
1177 return; 1177 return;
1178 1178
1179 transport->tcp_reclen = ntohl(transport->tcp_fraghdr); 1179 transport->recv.len = ntohl(transport->recv.fraghdr);
1180 if (transport->tcp_reclen & RPC_LAST_STREAM_FRAGMENT) 1180 if (transport->recv.len & RPC_LAST_STREAM_FRAGMENT)
1181 transport->tcp_flags |= TCP_RCV_LAST_FRAG; 1181 transport->recv.flags |= TCP_RCV_LAST_FRAG;
1182 else 1182 else
1183 transport->tcp_flags &= ~TCP_RCV_LAST_FRAG; 1183 transport->recv.flags &= ~TCP_RCV_LAST_FRAG;
1184 transport->tcp_reclen &= RPC_FRAGMENT_SIZE_MASK; 1184 transport->recv.len &= RPC_FRAGMENT_SIZE_MASK;
1185 1185
1186 transport->tcp_flags &= ~TCP_RCV_COPY_FRAGHDR; 1186 transport->recv.flags &= ~TCP_RCV_COPY_FRAGHDR;
1187 transport->tcp_offset = 0; 1187 transport->recv.offset = 0;
1188 1188
1189 /* Sanity check of the record length */ 1189 /* Sanity check of the record length */
1190 if (unlikely(transport->tcp_reclen < 8)) { 1190 if (unlikely(transport->recv.len < 8)) {
1191 dprintk("RPC: invalid TCP record fragment length\n"); 1191 dprintk("RPC: invalid TCP record fragment length\n");
1192 xs_tcp_force_close(xprt); 1192 xs_tcp_force_close(xprt);
1193 return; 1193 return;
1194 } 1194 }
1195 dprintk("RPC: reading TCP record fragment of length %d\n", 1195 dprintk("RPC: reading TCP record fragment of length %d\n",
1196 transport->tcp_reclen); 1196 transport->recv.len);
1197} 1197}
1198 1198
1199static void xs_tcp_check_fraghdr(struct sock_xprt *transport) 1199static void xs_tcp_check_fraghdr(struct sock_xprt *transport)
1200{ 1200{
1201 if (transport->tcp_offset == transport->tcp_reclen) { 1201 if (transport->recv.offset == transport->recv.len) {
1202 transport->tcp_flags |= TCP_RCV_COPY_FRAGHDR; 1202 transport->recv.flags |= TCP_RCV_COPY_FRAGHDR;
1203 transport->tcp_offset = 0; 1203 transport->recv.offset = 0;
1204 if (transport->tcp_flags & TCP_RCV_LAST_FRAG) { 1204 if (transport->recv.flags & TCP_RCV_LAST_FRAG) {
1205 transport->tcp_flags &= ~TCP_RCV_COPY_DATA; 1205 transport->recv.flags &= ~TCP_RCV_COPY_DATA;
1206 transport->tcp_flags |= TCP_RCV_COPY_XID; 1206 transport->recv.flags |= TCP_RCV_COPY_XID;
1207 transport->tcp_copied = 0; 1207 transport->recv.copied = 0;
1208 } 1208 }
1209 } 1209 }
1210} 1210}
@@ -1214,20 +1214,20 @@ static inline void xs_tcp_read_xid(struct sock_xprt *transport, struct xdr_skb_r
1214 size_t len, used; 1214 size_t len, used;
1215 char *p; 1215 char *p;
1216 1216
1217 len = sizeof(transport->tcp_xid) - transport->tcp_offset; 1217 len = sizeof(transport->recv.xid) - transport->recv.offset;
1218 dprintk("RPC: reading XID (%zu bytes)\n", len); 1218 dprintk("RPC: reading XID (%zu bytes)\n", len);
1219 p = ((char *) &transport->tcp_xid) + transport->tcp_offset; 1219 p = ((char *) &transport->recv.xid) + transport->recv.offset;
1220 used = xdr_skb_read_bits(desc, p, len); 1220 used = xdr_skb_read_bits(desc, p, len);
1221 transport->tcp_offset += used; 1221 transport->recv.offset += used;
1222 if (used != len) 1222 if (used != len)
1223 return; 1223 return;
1224 transport->tcp_flags &= ~TCP_RCV_COPY_XID; 1224 transport->recv.flags &= ~TCP_RCV_COPY_XID;
1225 transport->tcp_flags |= TCP_RCV_READ_CALLDIR; 1225 transport->recv.flags |= TCP_RCV_READ_CALLDIR;
1226 transport->tcp_copied = 4; 1226 transport->recv.copied = 4;
1227 dprintk("RPC: reading %s XID %08x\n", 1227 dprintk("RPC: reading %s XID %08x\n",
1228 (transport->tcp_flags & TCP_RPC_REPLY) ? "reply for" 1228 (transport->recv.flags & TCP_RPC_REPLY) ? "reply for"
1229 : "request with", 1229 : "request with",
1230 ntohl(transport->tcp_xid)); 1230 ntohl(transport->recv.xid));
1231 xs_tcp_check_fraghdr(transport); 1231 xs_tcp_check_fraghdr(transport);
1232} 1232}
1233 1233
@@ -1239,34 +1239,34 @@ static inline void xs_tcp_read_calldir(struct sock_xprt *transport,
1239 char *p; 1239 char *p;
1240 1240
1241 /* 1241 /*
1242 * We want transport->tcp_offset to be 8 at the end of this routine 1242 * We want transport->recv.offset to be 8 at the end of this routine
1243 * (4 bytes for the xid and 4 bytes for the call/reply flag). 1243 * (4 bytes for the xid and 4 bytes for the call/reply flag).
1244 * When this function is called for the first time, 1244 * When this function is called for the first time,
1245 * transport->tcp_offset is 4 (after having already read the xid). 1245 * transport->recv.offset is 4 (after having already read the xid).
1246 */ 1246 */
1247 offset = transport->tcp_offset - sizeof(transport->tcp_xid); 1247 offset = transport->recv.offset - sizeof(transport->recv.xid);
1248 len = sizeof(transport->tcp_calldir) - offset; 1248 len = sizeof(transport->recv.calldir) - offset;
1249 dprintk("RPC: reading CALL/REPLY flag (%zu bytes)\n", len); 1249 dprintk("RPC: reading CALL/REPLY flag (%zu bytes)\n", len);
1250 p = ((char *) &transport->tcp_calldir) + offset; 1250 p = ((char *) &transport->recv.calldir) + offset;
1251 used = xdr_skb_read_bits(desc, p, len); 1251 used = xdr_skb_read_bits(desc, p, len);
1252 transport->tcp_offset += used; 1252 transport->recv.offset += used;
1253 if (used != len) 1253 if (used != len)
1254 return; 1254 return;
1255 transport->tcp_flags &= ~TCP_RCV_READ_CALLDIR; 1255 transport->recv.flags &= ~TCP_RCV_READ_CALLDIR;
1256 /* 1256 /*
1257 * We don't yet have the XDR buffer, so we will write the calldir 1257 * We don't yet have the XDR buffer, so we will write the calldir
1258 * out after we get the buffer from the 'struct rpc_rqst' 1258 * out after we get the buffer from the 'struct rpc_rqst'
1259 */ 1259 */
1260 switch (ntohl(transport->tcp_calldir)) { 1260 switch (ntohl(transport->recv.calldir)) {
1261 case RPC_REPLY: 1261 case RPC_REPLY:
1262 transport->tcp_flags |= TCP_RCV_COPY_CALLDIR; 1262 transport->recv.flags |= TCP_RCV_COPY_CALLDIR;
1263 transport->tcp_flags |= TCP_RCV_COPY_DATA; 1263 transport->recv.flags |= TCP_RCV_COPY_DATA;
1264 transport->tcp_flags |= TCP_RPC_REPLY; 1264 transport->recv.flags |= TCP_RPC_REPLY;
1265 break; 1265 break;
1266 case RPC_CALL: 1266 case RPC_CALL:
1267 transport->tcp_flags |= TCP_RCV_COPY_CALLDIR; 1267 transport->recv.flags |= TCP_RCV_COPY_CALLDIR;
1268 transport->tcp_flags |= TCP_RCV_COPY_DATA; 1268 transport->recv.flags |= TCP_RCV_COPY_DATA;
1269 transport->tcp_flags &= ~TCP_RPC_REPLY; 1269 transport->recv.flags &= ~TCP_RPC_REPLY;
1270 break; 1270 break;
1271 default: 1271 default:
1272 dprintk("RPC: invalid request message type\n"); 1272 dprintk("RPC: invalid request message type\n");
@@ -1287,21 +1287,21 @@ static inline void xs_tcp_read_common(struct rpc_xprt *xprt,
1287 1287
1288 rcvbuf = &req->rq_private_buf; 1288 rcvbuf = &req->rq_private_buf;
1289 1289
1290 if (transport->tcp_flags & TCP_RCV_COPY_CALLDIR) { 1290 if (transport->recv.flags & TCP_RCV_COPY_CALLDIR) {
1291 /* 1291 /*
1292 * Save the RPC direction in the XDR buffer 1292 * Save the RPC direction in the XDR buffer
1293 */ 1293 */
1294 memcpy(rcvbuf->head[0].iov_base + transport->tcp_copied, 1294 memcpy(rcvbuf->head[0].iov_base + transport->recv.copied,
1295 &transport->tcp_calldir, 1295 &transport->recv.calldir,
1296 sizeof(transport->tcp_calldir)); 1296 sizeof(transport->recv.calldir));
1297 transport->tcp_copied += sizeof(transport->tcp_calldir); 1297 transport->recv.copied += sizeof(transport->recv.calldir);
1298 transport->tcp_flags &= ~TCP_RCV_COPY_CALLDIR; 1298 transport->recv.flags &= ~TCP_RCV_COPY_CALLDIR;
1299 } 1299 }
1300 1300
1301 len = desc->count; 1301 len = desc->count;
1302 if (len > transport->tcp_reclen - transport->tcp_offset) 1302 if (len > transport->recv.len - transport->recv.offset)
1303 desc->count = transport->tcp_reclen - transport->tcp_offset; 1303 desc->count = transport->recv.len - transport->recv.offset;
1304 r = xdr_partial_copy_from_skb(rcvbuf, transport->tcp_copied, 1304 r = xdr_partial_copy_from_skb(rcvbuf, transport->recv.copied,
1305 desc, xdr_skb_read_bits); 1305 desc, xdr_skb_read_bits);
1306 1306
1307 if (desc->count) { 1307 if (desc->count) {
@@ -1314,31 +1314,31 @@ static inline void xs_tcp_read_common(struct rpc_xprt *xprt,
1314 * Any remaining data from this record will 1314 * Any remaining data from this record will
1315 * be discarded. 1315 * be discarded.
1316 */ 1316 */
1317 transport->tcp_flags &= ~TCP_RCV_COPY_DATA; 1317 transport->recv.flags &= ~TCP_RCV_COPY_DATA;
1318 dprintk("RPC: XID %08x truncated request\n", 1318 dprintk("RPC: XID %08x truncated request\n",
1319 ntohl(transport->tcp_xid)); 1319 ntohl(transport->recv.xid));
1320 dprintk("RPC: xprt = %p, tcp_copied = %lu, " 1320 dprintk("RPC: xprt = %p, recv.copied = %lu, "
1321 "tcp_offset = %u, tcp_reclen = %u\n", 1321 "recv.offset = %u, recv.len = %u\n",
1322 xprt, transport->tcp_copied, 1322 xprt, transport->recv.copied,
1323 transport->tcp_offset, transport->tcp_reclen); 1323 transport->recv.offset, transport->recv.len);
1324 return; 1324 return;
1325 } 1325 }
1326 1326
1327 transport->tcp_copied += r; 1327 transport->recv.copied += r;
1328 transport->tcp_offset += r; 1328 transport->recv.offset += r;
1329 desc->count = len - r; 1329 desc->count = len - r;
1330 1330
1331 dprintk("RPC: XID %08x read %zd bytes\n", 1331 dprintk("RPC: XID %08x read %zd bytes\n",
1332 ntohl(transport->tcp_xid), r); 1332 ntohl(transport->recv.xid), r);
1333 dprintk("RPC: xprt = %p, tcp_copied = %lu, tcp_offset = %u, " 1333 dprintk("RPC: xprt = %p, recv.copied = %lu, recv.offset = %u, "
1334 "tcp_reclen = %u\n", xprt, transport->tcp_copied, 1334 "recv.len = %u\n", xprt, transport->recv.copied,
1335 transport->tcp_offset, transport->tcp_reclen); 1335 transport->recv.offset, transport->recv.len);
1336 1336
1337 if (transport->tcp_copied == req->rq_private_buf.buflen) 1337 if (transport->recv.copied == req->rq_private_buf.buflen)
1338 transport->tcp_flags &= ~TCP_RCV_COPY_DATA; 1338 transport->recv.flags &= ~TCP_RCV_COPY_DATA;
1339 else if (transport->tcp_offset == transport->tcp_reclen) { 1339 else if (transport->recv.offset == transport->recv.len) {
1340 if (transport->tcp_flags & TCP_RCV_LAST_FRAG) 1340 if (transport->recv.flags & TCP_RCV_LAST_FRAG)
1341 transport->tcp_flags &= ~TCP_RCV_COPY_DATA; 1341 transport->recv.flags &= ~TCP_RCV_COPY_DATA;
1342 } 1342 }
1343} 1343}
1344 1344
@@ -1353,14 +1353,14 @@ static inline int xs_tcp_read_reply(struct rpc_xprt *xprt,
1353 container_of(xprt, struct sock_xprt, xprt); 1353 container_of(xprt, struct sock_xprt, xprt);
1354 struct rpc_rqst *req; 1354 struct rpc_rqst *req;
1355 1355
1356 dprintk("RPC: read reply XID %08x\n", ntohl(transport->tcp_xid)); 1356 dprintk("RPC: read reply XID %08x\n", ntohl(transport->recv.xid));
1357 1357
1358 /* Find and lock the request corresponding to this xid */ 1358 /* Find and lock the request corresponding to this xid */
1359 spin_lock(&xprt->recv_lock); 1359 spin_lock(&xprt->recv_lock);
1360 req = xprt_lookup_rqst(xprt, transport->tcp_xid); 1360 req = xprt_lookup_rqst(xprt, transport->recv.xid);
1361 if (!req) { 1361 if (!req) {
1362 dprintk("RPC: XID %08x request not found!\n", 1362 dprintk("RPC: XID %08x request not found!\n",
1363 ntohl(transport->tcp_xid)); 1363 ntohl(transport->recv.xid));
1364 spin_unlock(&xprt->recv_lock); 1364 spin_unlock(&xprt->recv_lock);
1365 return -1; 1365 return -1;
1366 } 1366 }
@@ -1370,8 +1370,8 @@ static inline int xs_tcp_read_reply(struct rpc_xprt *xprt,
1370 xs_tcp_read_common(xprt, desc, req); 1370 xs_tcp_read_common(xprt, desc, req);
1371 1371
1372 spin_lock(&xprt->recv_lock); 1372 spin_lock(&xprt->recv_lock);
1373 if (!(transport->tcp_flags & TCP_RCV_COPY_DATA)) 1373 if (!(transport->recv.flags & TCP_RCV_COPY_DATA))
1374 xprt_complete_rqst(req->rq_task, transport->tcp_copied); 1374 xprt_complete_rqst(req->rq_task, transport->recv.copied);
1375 xprt_unpin_rqst(req); 1375 xprt_unpin_rqst(req);
1376 spin_unlock(&xprt->recv_lock); 1376 spin_unlock(&xprt->recv_lock);
1377 return 0; 1377 return 0;
@@ -1393,7 +1393,7 @@ static int xs_tcp_read_callback(struct rpc_xprt *xprt,
1393 struct rpc_rqst *req; 1393 struct rpc_rqst *req;
1394 1394
1395 /* Look up the request corresponding to the given XID */ 1395 /* Look up the request corresponding to the given XID */
1396 req = xprt_lookup_bc_request(xprt, transport->tcp_xid); 1396 req = xprt_lookup_bc_request(xprt, transport->recv.xid);
1397 if (req == NULL) { 1397 if (req == NULL) {
1398 printk(KERN_WARNING "Callback slot table overflowed\n"); 1398 printk(KERN_WARNING "Callback slot table overflowed\n");
1399 xprt_force_disconnect(xprt); 1399 xprt_force_disconnect(xprt);
@@ -1403,8 +1403,8 @@ static int xs_tcp_read_callback(struct rpc_xprt *xprt,
1403 dprintk("RPC: read callback XID %08x\n", ntohl(req->rq_xid)); 1403 dprintk("RPC: read callback XID %08x\n", ntohl(req->rq_xid));
1404 xs_tcp_read_common(xprt, desc, req); 1404 xs_tcp_read_common(xprt, desc, req);
1405 1405
1406 if (!(transport->tcp_flags & TCP_RCV_COPY_DATA)) 1406 if (!(transport->recv.flags & TCP_RCV_COPY_DATA))
1407 xprt_complete_bc_request(req, transport->tcp_copied); 1407 xprt_complete_bc_request(req, transport->recv.copied);
1408 1408
1409 return 0; 1409 return 0;
1410} 1410}
@@ -1415,7 +1415,7 @@ static inline int _xs_tcp_read_data(struct rpc_xprt *xprt,
1415 struct sock_xprt *transport = 1415 struct sock_xprt *transport =
1416 container_of(xprt, struct sock_xprt, xprt); 1416 container_of(xprt, struct sock_xprt, xprt);
1417 1417
1418 return (transport->tcp_flags & TCP_RPC_REPLY) ? 1418 return (transport->recv.flags & TCP_RPC_REPLY) ?
1419 xs_tcp_read_reply(xprt, desc) : 1419 xs_tcp_read_reply(xprt, desc) :
1420 xs_tcp_read_callback(xprt, desc); 1420 xs_tcp_read_callback(xprt, desc);
1421} 1421}
@@ -1458,9 +1458,9 @@ static void xs_tcp_read_data(struct rpc_xprt *xprt,
1458 else { 1458 else {
1459 /* 1459 /*
1460 * The transport_lock protects the request handling. 1460 * The transport_lock protects the request handling.
1461 * There's no need to hold it to update the tcp_flags. 1461 * There's no need to hold it to update the recv.flags.
1462 */ 1462 */
1463 transport->tcp_flags &= ~TCP_RCV_COPY_DATA; 1463 transport->recv.flags &= ~TCP_RCV_COPY_DATA;
1464 } 1464 }
1465} 1465}
1466 1466
@@ -1468,12 +1468,12 @@ static inline void xs_tcp_read_discard(struct sock_xprt *transport, struct xdr_s
1468{ 1468{
1469 size_t len; 1469 size_t len;
1470 1470
1471 len = transport->tcp_reclen - transport->tcp_offset; 1471 len = transport->recv.len - transport->recv.offset;
1472 if (len > desc->count) 1472 if (len > desc->count)
1473 len = desc->count; 1473 len = desc->count;
1474 desc->count -= len; 1474 desc->count -= len;
1475 desc->offset += len; 1475 desc->offset += len;
1476 transport->tcp_offset += len; 1476 transport->recv.offset += len;
1477 dprintk("RPC: discarded %zu bytes\n", len); 1477 dprintk("RPC: discarded %zu bytes\n", len);
1478 xs_tcp_check_fraghdr(transport); 1478 xs_tcp_check_fraghdr(transport);
1479} 1479}
@@ -1494,22 +1494,22 @@ static int xs_tcp_data_recv(read_descriptor_t *rd_desc, struct sk_buff *skb, uns
1494 trace_xs_tcp_data_recv(transport); 1494 trace_xs_tcp_data_recv(transport);
1495 /* Read in a new fragment marker if necessary */ 1495 /* Read in a new fragment marker if necessary */
1496 /* Can we ever really expect to get completely empty fragments? */ 1496 /* Can we ever really expect to get completely empty fragments? */
1497 if (transport->tcp_flags & TCP_RCV_COPY_FRAGHDR) { 1497 if (transport->recv.flags & TCP_RCV_COPY_FRAGHDR) {
1498 xs_tcp_read_fraghdr(xprt, &desc); 1498 xs_tcp_read_fraghdr(xprt, &desc);
1499 continue; 1499 continue;
1500 } 1500 }
1501 /* Read in the xid if necessary */ 1501 /* Read in the xid if necessary */
1502 if (transport->tcp_flags & TCP_RCV_COPY_XID) { 1502 if (transport->recv.flags & TCP_RCV_COPY_XID) {
1503 xs_tcp_read_xid(transport, &desc); 1503 xs_tcp_read_xid(transport, &desc);
1504 continue; 1504 continue;
1505 } 1505 }
1506 /* Read in the call/reply flag */ 1506 /* Read in the call/reply flag */
1507 if (transport->tcp_flags & TCP_RCV_READ_CALLDIR) { 1507 if (transport->recv.flags & TCP_RCV_READ_CALLDIR) {
1508 xs_tcp_read_calldir(transport, &desc); 1508 xs_tcp_read_calldir(transport, &desc);
1509 continue; 1509 continue;
1510 } 1510 }
1511 /* Read in the request data */ 1511 /* Read in the request data */
1512 if (transport->tcp_flags & TCP_RCV_COPY_DATA) { 1512 if (transport->recv.flags & TCP_RCV_COPY_DATA) {
1513 xs_tcp_read_data(xprt, &desc); 1513 xs_tcp_read_data(xprt, &desc);
1514 continue; 1514 continue;
1515 } 1515 }
@@ -1602,10 +1602,10 @@ static void xs_tcp_state_change(struct sock *sk)
1602 if (!xprt_test_and_set_connected(xprt)) { 1602 if (!xprt_test_and_set_connected(xprt)) {
1603 1603
1604 /* Reset TCP record info */ 1604 /* Reset TCP record info */
1605 transport->tcp_offset = 0; 1605 transport->recv.offset = 0;
1606 transport->tcp_reclen = 0; 1606 transport->recv.len = 0;
1607 transport->tcp_copied = 0; 1607 transport->recv.copied = 0;
1608 transport->tcp_flags = 1608 transport->recv.flags =
1609 TCP_RCV_COPY_FRAGHDR | TCP_RCV_COPY_XID; 1609 TCP_RCV_COPY_FRAGHDR | TCP_RCV_COPY_XID;
1610 xprt->connect_cookie++; 1610 xprt->connect_cookie++;
1611 clear_bit(XPRT_SOCK_CONNECTING, &transport->sock_state); 1611 clear_bit(XPRT_SOCK_CONNECTING, &transport->sock_state);