Lines Matching defs:txb

23 	struct rxrpc_txbuf *txb;
27 txb = kmalloc(sizeof(*txb), gfp);
28 if (!txb)
40 kfree(txb);
46 INIT_LIST_HEAD(&txb->call_link);
47 INIT_LIST_HEAD(&txb->tx_link);
48 refcount_set(&txb->ref, 1);
49 txb->last_sent = KTIME_MIN;
50 txb->call_debug_id = call->debug_id;
51 txb->debug_id = atomic_inc_return(&rxrpc_txbuf_debug_ids);
52 txb->space = data_size;
53 txb->len = 0;
54 txb->offset = sizeof(*whdr);
55 txb->flags = call->conn->out_clientflag;
56 txb->ack_why = 0;
57 txb->seq = call->tx_prepared + 1;
58 txb->serial = 0;
59 txb->cksum = 0;
60 txb->nr_kvec = 1;
61 txb->kvec[0].iov_base = whdr;
62 txb->kvec[0].iov_len = sizeof(*whdr);
67 whdr->seq = htonl(txb->seq);
75 trace_rxrpc_txbuf(txb->debug_id, txb->call_debug_id, txb->seq, 1,
79 return txb;
90 struct rxrpc_txbuf *txb;
95 txb = kmalloc(sizeof(*txb), gfp);
96 if (!txb)
102 kfree(txb);
110 kfree(txb);
120 INIT_LIST_HEAD(&txb->call_link);
121 INIT_LIST_HEAD(&txb->tx_link);
122 refcount_set(&txb->ref, 1);
123 txb->call_debug_id = call->debug_id;
124 txb->debug_id = atomic_inc_return(&rxrpc_txbuf_debug_ids);
125 txb->space = 0;
126 txb->len = sizeof(*whdr) + sizeof(*ack) + 3 + sizeof(*trailer);
127 txb->offset = 0;
128 txb->flags = call->conn->out_clientflag;
129 txb->ack_rwind = 0;
130 txb->seq = 0;
131 txb->serial = 0;
132 txb->cksum = 0;
133 txb->nr_kvec = 3;
134 txb->kvec[0].iov_base = whdr;
135 txb->kvec[0].iov_len = sizeof(*whdr) + sizeof(*ack);
136 txb->kvec[1].iov_base = buf2;
137 txb->kvec[1].iov_len = sack_size;
138 txb->kvec[2].iov_base = filler;
139 txb->kvec[2].iov_len = 3 + sizeof(*trailer);
154 trace_rxrpc_txbuf(txb->debug_id, txb->call_debug_id, txb->seq, 1,
157 return txb;
160 void rxrpc_get_txbuf(struct rxrpc_txbuf *txb, enum rxrpc_txbuf_trace what)
164 __refcount_inc(&txb->ref, &r);
165 trace_rxrpc_txbuf(txb->debug_id, txb->call_debug_id, txb->seq, r + 1, what);
168 void rxrpc_see_txbuf(struct rxrpc_txbuf *txb, enum rxrpc_txbuf_trace what)
170 int r = refcount_read(&txb->ref);
172 trace_rxrpc_txbuf(txb->debug_id, txb->call_debug_id, txb->seq, r, what);
175 static void rxrpc_free_txbuf(struct rxrpc_txbuf *txb)
179 trace_rxrpc_txbuf(txb->debug_id, txb->call_debug_id, txb->seq, 0,
181 for (i = 0; i < txb->nr_kvec; i++)
182 if (txb->kvec[i].iov_base)
183 page_frag_free(txb->kvec[i].iov_base);
184 kfree(txb);
188 void rxrpc_put_txbuf(struct rxrpc_txbuf *txb, enum rxrpc_txbuf_trace what)
195 if (txb) {
196 debug_id = txb->debug_id;
197 call_debug_id = txb->call_debug_id;
198 seq = txb->seq;
199 dead = __refcount_dec_and_test(&txb->ref, &r);
202 rxrpc_free_txbuf(txb);
211 struct rxrpc_txbuf *txb;
217 while ((txb = list_first_entry_or_null(&call->tx_buffer,
220 if (before(hard_ack, txb->seq))
223 if (txb->seq != call->tx_bottom + 1)
224 rxrpc_see_txbuf(txb, rxrpc_txbuf_see_out_of_step);
225 ASSERTCMP(txb->seq, ==, call->tx_bottom + 1);
227 list_del_rcu(&txb->call_link);
231 rxrpc_put_txbuf(txb, rxrpc_txbuf_put_rotated);