]>
Commit | Line | Data |
---|---|---|
b5a39c4d JR |
1 | it has been suggested that atm_vcc has redundant members with |
2 | struct sock. | |
3 | ||
4 | this patch removes family, tx_inuse, rx_inuse, and recvq from | |
5 | atm_vcc in favor of sk->family, sk->wmem_alloc, sk->rmem_alloc, | |
6 | and sk->receive_queue (respectively). listenq and backlog_quota | |
7 | should be removed as well but i need to think about them for a | |
8 | bit. also, atm_dev now uses the list manipulation routines (converting | |
9 | the vccs lists is a bit more involved since some the atm drivers know | |
10 | too much) | |
11 | ||
12 | ||
13 | Index: linux/include/linux/atmdev.h | |
14 | =================================================================== | |
15 | RCS file: /home/chas/CVSROOT/linux/include/linux/atmdev.h,v | |
16 | retrieving revision 1.2 | |
17 | diff -u -r1.2 atmdev.h | |
18 | --- linux/include/linux/atmdev.h 20 Feb 2003 20:17:59 -0000 1.2 | |
19 | +++ linux/include/linux/atmdev.h 5 Mar 2003 00:05:46 -0000 | |
20 | @@ -277,7 +277,6 @@ | |
21 | ||
22 | struct atm_vcc { | |
23 | unsigned long flags; /* VCC flags (ATM_VF_*) */ | |
24 | - unsigned char family; /* address family; 0 if unused */ | |
25 | short vpi; /* VPI and VCI (types must be equal */ | |
26 | /* with sockaddr) */ | |
27 | int vci; | |
28 | @@ -286,7 +285,6 @@ | |
29 | struct atm_dev *dev; /* device back pointer */ | |
30 | struct atm_qos qos; /* QOS */ | |
31 | struct atm_sap sap; /* SAP */ | |
32 | - atomic_t tx_inuse,rx_inuse; /* buffer space in use */ | |
33 | void (*push)(struct atm_vcc *vcc,struct sk_buff *skb); | |
34 | void (*pop)(struct atm_vcc *vcc,struct sk_buff *skb); /* optional */ | |
35 | struct sk_buff *(*alloc_tx)(struct atm_vcc *vcc,unsigned int size); | |
36 | @@ -297,7 +295,6 @@ | |
37 | int (*send)(struct atm_vcc *vcc,struct sk_buff *skb); | |
38 | void *dev_data; /* per-device data */ | |
39 | void *proto_data; /* per-protocol data */ | |
40 | - struct sk_buff_head recvq; /* receive queue */ | |
41 | struct k_atm_aal_stats *stats; /* pointer to AAL stats group */ | |
42 | wait_queue_head_t sleep; /* if socket is busy */ | |
43 | struct sock *sk; /* socket backpointer */ | |
44 | @@ -346,7 +343,7 @@ | |
45 | struct proc_dir_entry *proc_entry; /* proc entry */ | |
46 | char *proc_name; /* proc entry name */ | |
47 | #endif | |
48 | - struct atm_dev *prev,*next; /* linkage */ | |
49 | + struct list_head dev_list; /* linkage */ | |
50 | }; | |
51 | ||
52 | ||
53 | @@ -425,19 +422,19 @@ | |
54 | ||
55 | static __inline__ void atm_force_charge(struct atm_vcc *vcc,int truesize) | |
56 | { | |
57 | - atomic_add(truesize+ATM_PDU_OVHD,&vcc->rx_inuse); | |
58 | + atomic_add(truesize+ATM_PDU_OVHD,&vcc->sk->rmem_alloc); | |
59 | } | |
60 | ||
61 | ||
62 | static __inline__ void atm_return(struct atm_vcc *vcc,int truesize) | |
63 | { | |
64 | - atomic_sub(truesize+ATM_PDU_OVHD,&vcc->rx_inuse); | |
65 | + atomic_sub(truesize+ATM_PDU_OVHD,&vcc->sk->rmem_alloc); | |
66 | } | |
67 | ||
68 | ||
69 | static __inline__ int atm_may_send(struct atm_vcc *vcc,unsigned int size) | |
70 | { | |
71 | - return size+atomic_read(&vcc->tx_inuse)+ATM_PDU_OVHD < vcc->sk->sndbuf; | |
72 | + return size+atomic_read(&vcc->sk->wmem_alloc)+ATM_PDU_OVHD < vcc->sk->sndbuf; | |
73 | } | |
74 | ||
75 | ||
76 | Index: linux/net/atm/atm_misc.c | |
77 | =================================================================== | |
78 | RCS file: /home/chas/CVSROOT/linux/net/atm/atm_misc.c,v | |
79 | retrieving revision 1.1.1.1 | |
80 | diff -u -r1.1.1.1 atm_misc.c | |
81 | --- linux/net/atm/atm_misc.c 20 Feb 2003 13:46:30 -0000 1.1.1.1 | |
82 | +++ linux/net/atm/atm_misc.c 4 Mar 2003 23:29:50 -0000 | |
83 | @@ -16,7 +16,7 @@ | |
84 | int atm_charge(struct atm_vcc *vcc,int truesize) | |
85 | { | |
86 | atm_force_charge(vcc,truesize); | |
87 | - if (atomic_read(&vcc->rx_inuse) <= vcc->sk->rcvbuf) return 1; | |
88 | + if (atomic_read(&vcc->sk->rmem_alloc) <= vcc->sk->rcvbuf) return 1; | |
89 | atm_return(vcc,truesize); | |
90 | atomic_inc(&vcc->stats->rx_drop); | |
91 | return 0; | |
92 | @@ -29,11 +29,11 @@ | |
93 | int guess = atm_guess_pdu2truesize(pdu_size); | |
94 | ||
95 | atm_force_charge(vcc,guess); | |
96 | - if (atomic_read(&vcc->rx_inuse) <= vcc->sk->rcvbuf) { | |
97 | + if (atomic_read(&vcc->sk->rmem_alloc) <= vcc->sk->rcvbuf) { | |
98 | struct sk_buff *skb = alloc_skb(pdu_size,gfp_flags); | |
99 | ||
100 | if (skb) { | |
101 | - atomic_add(skb->truesize-guess,&vcc->rx_inuse); | |
102 | + atomic_add(skb->truesize-guess,&vcc->sk->rmem_alloc); | |
103 | return skb; | |
104 | } | |
105 | } | |
106 | Index: linux/net/atm/clip.c | |
107 | =================================================================== | |
108 | RCS file: /home/chas/CVSROOT/linux/net/atm/clip.c,v | |
109 | retrieving revision 1.3 | |
110 | diff -u -r1.3 clip.c | |
111 | --- linux/net/atm/clip.c 4 Mar 2003 20:48:04 -0000 1.3 | |
112 | +++ linux/net/atm/clip.c 4 Mar 2003 23:45:45 -0000 | |
113 | @@ -63,7 +63,7 @@ | |
114 | ctrl->itf_num = itf; | |
115 | ctrl->ip = ip; | |
116 | atm_force_charge(atmarpd,skb->truesize); | |
117 | - skb_queue_tail(&atmarpd->recvq,skb); | |
118 | + skb_queue_tail(&atmarpd->sk->receive_queue,skb); | |
119 | wake_up(&atmarpd->sleep); | |
120 | return 0; | |
121 | } | |
122 | @@ -426,7 +426,7 @@ | |
123 | memcpy(here,llc_oui,sizeof(llc_oui)); | |
124 | ((u16 *) here)[3] = skb->protocol; | |
125 | } | |
126 | - atomic_add(skb->truesize,&vcc->tx_inuse); | |
127 | + atomic_add(skb->truesize,&vcc->sk->wmem_alloc); | |
128 | ATM_SKB(skb)->iovcnt = 0; | |
129 | ATM_SKB(skb)->atm_options = vcc->atm_options; | |
130 | entry->vccs->last_use = jiffies; | |
131 | @@ -485,7 +485,7 @@ | |
132 | vcc->push = clip_push; | |
133 | vcc->pop = clip_pop; | |
134 | skb_queue_head_init(©); | |
135 | - skb_migrate(&vcc->recvq,©); | |
136 | + skb_migrate(&vcc->sk->receive_queue,©); | |
137 | /* re-process everything received between connection setup and MKIP */ | |
138 | while ((skb = skb_dequeue(©))) | |
139 | if (!clip_devs) { | |
140 | @@ -691,10 +691,10 @@ | |
141 | barrier(); | |
142 | unregister_inetaddr_notifier(&clip_inet_notifier); | |
143 | unregister_netdevice_notifier(&clip_dev_notifier); | |
144 | - if (skb_peek(&vcc->recvq)) | |
145 | + if (skb_peek(&vcc->sk->receive_queue)) | |
146 | printk(KERN_ERR "atmarpd_close: closing with requests " | |
147 | "pending\n"); | |
148 | - skb_queue_purge(&vcc->recvq); | |
149 | + skb_queue_purge(&vcc->sk->receive_queue); | |
150 | DPRINTK("(done)\n"); | |
151 | module_put(THIS_MODULE); | |
152 | } | |
153 | Index: linux/net/atm/common.c | |
154 | =================================================================== | |
155 | RCS file: /home/chas/CVSROOT/linux/net/atm/common.c,v | |
156 | retrieving revision 1.6 | |
157 | diff -u -r1.6 common.c | |
158 | --- linux/net/atm/common.c 3 Mar 2003 22:23:13 -0000 1.6 | |
159 | +++ linux/net/atm/common.c 5 Mar 2003 00:15:53 -0000 | |
160 | @@ -91,14 +91,14 @@ | |
161 | { | |
162 | struct sk_buff *skb; | |
163 | ||
164 | - if (atomic_read(&vcc->tx_inuse) && !atm_may_send(vcc,size)) { | |
165 | - DPRINTK("Sorry: tx_inuse = %d, size = %d, sndbuf = %d\n", | |
166 | - atomic_read(&vcc->tx_inuse),size,vcc->sk->sndbuf); | |
167 | + if (atomic_read(&vcc->sk->wmem_alloc) && !atm_may_send(vcc,size)) { | |
168 | + DPRINTK("Sorry: wmem_alloc = %d, size = %d, sndbuf = %d\n", | |
169 | + atomic_read(&vcc->sk->wmem_alloc),size,vcc->sk->sndbuf); | |
170 | return NULL; | |
171 | } | |
172 | while (!(skb = alloc_skb(size,GFP_KERNEL))) schedule(); | |
173 | - DPRINTK("AlTx %d += %d\n",atomic_read(&vcc->tx_inuse),skb->truesize); | |
174 | - atomic_add(skb->truesize+ATM_PDU_OVHD,&vcc->tx_inuse); | |
175 | + DPRINTK("AlTx %d += %d\n",atomic_read(&vcc->sk->wmem_alloc),skb->truesize); | |
176 | + atomic_add(skb->truesize+ATM_PDU_OVHD,&vcc->sk->wmem_alloc); | |
177 | return skb; | |
178 | } | |
179 | ||
180 | @@ -114,21 +114,19 @@ | |
181 | vcc = atm_sk(sk); | |
182 | memset(&vcc->flags,0,sizeof(vcc->flags)); | |
183 | vcc->dev = NULL; | |
184 | - vcc->family = sock->ops->family; | |
185 | vcc->alloc_tx = alloc_tx; | |
186 | vcc->callback = NULL; | |
187 | memset(&vcc->local,0,sizeof(struct sockaddr_atmsvc)); | |
188 | memset(&vcc->remote,0,sizeof(struct sockaddr_atmsvc)); | |
189 | vcc->qos.txtp.max_sdu = 1 << 16; /* for meta VCs */ | |
190 | - atomic_set(&vcc->tx_inuse,0); | |
191 | - atomic_set(&vcc->rx_inuse,0); | |
192 | + atomic_set(&vcc->sk->wmem_alloc,0); | |
193 | + atomic_set(&vcc->sk->rmem_alloc,0); | |
194 | vcc->push = NULL; | |
195 | vcc->pop = NULL; | |
196 | vcc->push_oam = NULL; | |
197 | vcc->vpi = vcc->vci = 0; /* no VCI/VPI yet */ | |
198 | vcc->atm_options = vcc->aal_options = 0; | |
199 | init_waitqueue_head(&vcc->sleep); | |
200 | - skb_queue_head_init(&vcc->recvq); | |
201 | skb_queue_head_init(&vcc->listenq); | |
202 | sk->sleep = &vcc->sleep; | |
203 | sock->sk = sk; | |
204 | @@ -145,7 +143,7 @@ | |
205 | if (vcc->dev) { | |
206 | if (vcc->dev->ops->close) vcc->dev->ops->close(vcc); | |
207 | if (vcc->push) vcc->push(vcc,NULL); /* atmarpd has no push */ | |
208 | - while ((skb = skb_dequeue(&vcc->recvq))) { | |
209 | + while ((skb = skb_dequeue(&vcc->sk->receive_queue))) { | |
210 | atm_return(vcc,skb->truesize); | |
211 | if (vcc->dev->ops->free_rx_skb) | |
212 | vcc->dev->ops->free_rx_skb(vcc,skb); | |
213 | @@ -153,10 +151,10 @@ | |
214 | } | |
215 | down(&atm_dev_sem); | |
216 | fops_put (vcc->dev->ops); | |
217 | - if (atomic_read(&vcc->rx_inuse)) | |
218 | + if (atomic_read(&vcc->sk->rmem_alloc)) | |
219 | printk(KERN_WARNING "atm_release_vcc: strange ... " | |
220 | - "rx_inuse == %d after closing\n", | |
221 | - atomic_read(&vcc->rx_inuse)); | |
222 | + "rmem_alloc == %d after closing\n", | |
223 | + atomic_read(&vcc->sk->rmem_alloc)); | |
224 | bind_vcc(vcc,NULL); | |
225 | } else | |
226 | down(&atm_dev_sem); | |
227 | @@ -311,11 +309,15 @@ | |
228 | if (error) return error; | |
229 | } | |
230 | else { | |
231 | - struct atm_dev *dev; | |
232 | + struct atm_dev *dev = NULL; | |
233 | + struct list_head *p; | |
234 | ||
235 | down(&atm_dev_sem); | |
236 | - for (dev = atm_devs; dev; dev = dev->next) | |
237 | + list_for_each(p, &atm_devs) { | |
238 | + dev = list_entry(p, struct atm_dev, dev_list); | |
239 | if (!atm_do_connect_dev(vcc,dev,vpi,vci)) break; | |
240 | + dev = NULL; | |
241 | + } | |
242 | up(&atm_dev_sem); | |
243 | if (!dev) return -ENODEV; | |
244 | } | |
245 | @@ -360,7 +362,7 @@ | |
246 | add_wait_queue(&vcc->sleep,&wait); | |
247 | set_current_state(TASK_INTERRUPTIBLE); | |
248 | error = 1; /* <= 0 is error */ | |
249 | - while (!(skb = skb_dequeue(&vcc->recvq))) { | |
250 | + while (!(skb = skb_dequeue(&vcc->sk->receive_queue))) { | |
251 | if (test_bit(ATM_VF_RELEASED,&vcc->flags) || | |
252 | test_bit(ATM_VF_CLOSE,&vcc->flags)) { | |
253 | error = vcc->reply; | |
254 | @@ -391,7 +393,7 @@ | |
255 | if (vcc->dev->ops->feedback) | |
256 | vcc->dev->ops->feedback(vcc,skb,(unsigned long) skb->data, | |
257 | (unsigned long) buff,eff_len); | |
258 | - DPRINTK("RcvM %d -= %d\n",atomic_read(&vcc->rx_inuse),skb->truesize); | |
259 | + DPRINTK("RcvM %d -= %d\n",atomic_read(&vcc->sk->rmem_alloc),skb->truesize); | |
260 | atm_return(vcc,skb->truesize); | |
261 | if (ATM_SKB(skb)->iovcnt) { /* @@@ hack */ | |
262 | /* iovcnt set, use scatter-gather for receive */ | |
263 | @@ -494,14 +496,14 @@ | |
264 | vcc = ATM_SD(sock); | |
265 | poll_wait(file,&vcc->sleep,wait); | |
266 | mask = 0; | |
267 | - if (skb_peek(&vcc->recvq) || skb_peek(&vcc->listenq)) | |
268 | + if (skb_peek(&vcc->sk->receive_queue) || skb_peek(&vcc->listenq)) | |
269 | mask |= POLLIN | POLLRDNORM; | |
270 | if (test_bit(ATM_VF_RELEASED,&vcc->flags) || | |
271 | test_bit(ATM_VF_CLOSE,&vcc->flags)) | |
272 | mask |= POLLHUP; | |
273 | if (sock->state != SS_CONNECTING) { | |
274 | if (vcc->qos.txtp.traffic_class != ATM_NONE && | |
275 | - vcc->qos.txtp.max_sdu+atomic_read(&vcc->tx_inuse)+ | |
276 | + vcc->qos.txtp.max_sdu+atomic_read(&vcc->sk->wmem_alloc)+ | |
277 | ATM_PDU_OVHD <= vcc->sk->sndbuf) | |
278 | mask |= POLLOUT | POLLWRNORM; | |
279 | } | |
280 | @@ -552,6 +554,7 @@ | |
281 | int atm_ioctl(struct socket *sock,unsigned int cmd,unsigned long arg) | |
282 | { | |
283 | struct atm_dev *dev; | |
284 | + struct list_head *p; | |
285 | struct atm_vcc *vcc; | |
286 | int *tmp_buf, *tmp_p; | |
287 | void *buf; | |
288 | @@ -568,7 +571,7 @@ | |
289 | goto done; | |
290 | } | |
291 | ret_val = put_user(vcc->sk->sndbuf- | |
292 | - atomic_read(&vcc->tx_inuse)-ATM_PDU_OVHD, | |
293 | + atomic_read(&vcc->sk->wmem_alloc)-ATM_PDU_OVHD, | |
294 | (int *) arg) ? -EFAULT : 0; | |
295 | goto done; | |
296 | case SIOCINQ: | |
297 | @@ -579,7 +582,7 @@ | |
298 | ret_val = -EINVAL; | |
299 | goto done; | |
300 | } | |
301 | - skb = skb_peek(&vcc->recvq); | |
302 | + skb = skb_peek(&vcc->sk->receive_queue); | |
303 | ret_val = put_user(skb ? skb->len : 0,(int *) arg) | |
304 | ? -EFAULT : 0; | |
305 | goto done; | |
306 | @@ -596,7 +599,7 @@ | |
307 | goto done; | |
308 | } | |
309 | size = 0; | |
310 | - for (dev = atm_devs; dev; dev = dev->next) | |
311 | + list_for_each(p, &atm_devs) | |
312 | size += sizeof(int); | |
313 | if (size > len) { | |
314 | ret_val = -E2BIG; | |
315 | @@ -608,8 +611,10 @@ | |
316 | goto done; | |
317 | } | |
318 | tmp_p = tmp_buf; | |
319 | - for (dev = atm_devs; dev; dev = dev->next) | |
320 | + list_for_each(p, &atm_devs) { | |
321 | + dev = list_entry(p, struct atm_dev, dev_list); | |
322 | *tmp_p++ = dev->number; | |
323 | + } | |
324 | ret_val = ((copy_to_user(buf, tmp_buf, size)) || | |
325 | put_user(size, &((struct atm_iobuf *) arg)->length) | |
326 | ) ? -EFAULT : 0; | |
327 | @@ -990,7 +995,7 @@ | |
328 | if (!error) error = adjust_tp(&qos->rxtp,qos->aal); | |
329 | if (error) return error; | |
330 | if (!vcc->dev->ops->change_qos) return -EOPNOTSUPP; | |
331 | - if (vcc->family == AF_ATMPVC) | |
332 | + if (vcc->sk->family == AF_ATMPVC) | |
333 | return vcc->dev->ops->change_qos(vcc,qos,ATM_MF_SET); | |
334 | return svc_change_qos(vcc,qos); | |
335 | } | |
336 | Index: linux/net/atm/lec.c | |
337 | =================================================================== | |
338 | RCS file: /home/chas/CVSROOT/linux/net/atm/lec.c,v | |
339 | retrieving revision 1.14 | |
340 | diff -u -r1.14 lec.c | |
341 | --- linux/net/atm/lec.c 4 Mar 2003 20:48:28 -0000 1.14 | |
342 | +++ linux/net/atm/lec.c 4 Mar 2003 23:42:21 -0000 | |
343 | @@ -125,7 +125,7 @@ | |
344 | ||
345 | priv = (struct lec_priv *)dev->priv; | |
346 | atm_force_charge(priv->lecd, skb2->truesize); | |
347 | - skb_queue_tail(&priv->lecd->recvq, skb2); | |
348 | + skb_queue_tail(&priv->lecd->sk->receive_queue, skb2); | |
349 | wake_up(&priv->lecd->sleep); | |
350 | } | |
351 | ||
352 | @@ -202,7 +202,7 @@ | |
353 | lec_send(struct atm_vcc *vcc, struct sk_buff *skb, struct lec_priv *priv) | |
354 | { | |
355 | if (atm_may_send(vcc, skb->len)) { | |
356 | - atomic_add(skb->truesize, &vcc->tx_inuse); | |
357 | + atomic_add(skb->truesize, &vcc->sk->wmem_alloc); | |
358 | ATM_SKB(skb)->vcc = vcc; | |
359 | ATM_SKB(skb)->iovcnt = 0; | |
360 | ATM_SKB(skb)->atm_options = vcc->atm_options; | |
361 | @@ -399,7 +399,7 @@ | |
362 | int i; | |
363 | char *tmp; /* FIXME */ | |
364 | ||
365 | - atomic_sub(skb->truesize+ATM_PDU_OVHD, &vcc->tx_inuse); | |
366 | + atomic_sub(skb->truesize+ATM_PDU_OVHD, &vcc->sk->wmem_alloc); | |
367 | mesg = (struct atmlec_msg *)skb->data; | |
368 | tmp = skb->data; | |
369 | tmp += sizeof(struct atmlec_msg); | |
370 | @@ -505,7 +505,7 @@ | |
371 | skb2->len = sizeof(struct atmlec_msg); | |
372 | memcpy(skb2->data, mesg, sizeof(struct atmlec_msg)); | |
373 | atm_force_charge(priv->lecd, skb2->truesize); | |
374 | - skb_queue_tail(&priv->lecd->recvq, skb2); | |
375 | + skb_queue_tail(&priv->lecd->sk->receive_queue, skb2); | |
376 | wake_up(&priv->lecd->sleep); | |
377 | } | |
378 | if (f != NULL) br_fdb_put_hook(f); | |
379 | @@ -534,10 +534,10 @@ | |
380 | netif_stop_queue(dev); | |
381 | lec_arp_destroy(priv); | |
382 | ||
383 | - if (skb_peek(&vcc->recvq)) | |
384 | + if (skb_peek(&vcc->sk->receive_queue)) | |
385 | printk("%s lec_atm_close: closing with messages pending\n", | |
386 | dev->name); | |
387 | - while ((skb = skb_dequeue(&vcc->recvq))) { | |
388 | + while ((skb = skb_dequeue(&vcc->sk->receive_queue))) { | |
389 | atm_return(vcc, skb->truesize); | |
390 | dev_kfree_skb(skb); | |
391 | } | |
392 | @@ -595,13 +595,13 @@ | |
393 | memcpy(&mesg->content.normal.atm_addr, atm_addr, ATM_ESA_LEN); | |
394 | ||
395 | atm_force_charge(priv->lecd, skb->truesize); | |
396 | - skb_queue_tail(&priv->lecd->recvq, skb); | |
397 | + skb_queue_tail(&priv->lecd->sk->receive_queue, skb); | |
398 | wake_up(&priv->lecd->sleep); | |
399 | ||
400 | if (data != NULL) { | |
401 | DPRINTK("lec: about to send %d bytes of data\n", data->len); | |
402 | atm_force_charge(priv->lecd, data->truesize); | |
403 | - skb_queue_tail(&priv->lecd->recvq, data); | |
404 | + skb_queue_tail(&priv->lecd->sk->receive_queue, data); | |
405 | wake_up(&priv->lecd->sleep); | |
406 | } | |
407 | ||
408 | @@ -683,7 +683,7 @@ | |
409 | #endif /* DUMP_PACKETS > 0 */ | |
410 | if (memcmp(skb->data, lec_ctrl_magic, 4) ==0) { /* Control frame, to daemon*/ | |
411 | DPRINTK("%s: To daemon\n",dev->name); | |
412 | - skb_queue_tail(&vcc->recvq, skb); | |
413 | + skb_queue_tail(&vcc->sk->receive_queue, skb); | |
414 | wake_up(&vcc->sleep); | |
415 | } else { /* Data frame, queue to protocol handlers */ | |
416 | unsigned char *dst; | |
417 | Index: linux/net/atm/mpc.c | |
418 | =================================================================== | |
419 | RCS file: /home/chas/CVSROOT/linux/net/atm/mpc.c,v | |
420 | retrieving revision 1.4 | |
421 | diff -u -r1.4 mpc.c | |
422 | --- linux/net/atm/mpc.c 3 Mar 2003 22:23:13 -0000 1.4 | |
423 | +++ linux/net/atm/mpc.c 4 Mar 2003 23:42:27 -0000 | |
424 | @@ -520,7 +520,7 @@ | |
425 | memcpy(skb->data, &llc_snap_mpoa_data, sizeof(struct llc_snap_hdr)); | |
426 | } | |
427 | ||
428 | - atomic_add(skb->truesize, &entry->shortcut->tx_inuse); | |
429 | + atomic_add(skb->truesize, &entry->shortcut->sk->wmem_alloc); | |
430 | ATM_SKB(skb)->iovcnt = 0; /* just to be safe ... */ | |
431 | ATM_SKB(skb)->atm_options = entry->shortcut->atm_options; | |
432 | entry->shortcut->send(entry->shortcut, skb); | |
433 | @@ -665,7 +665,7 @@ | |
434 | skb->dev = dev; | |
435 | if (memcmp(skb->data, &llc_snap_mpoa_ctrl, sizeof(struct llc_snap_hdr)) == 0) { | |
436 | dprintk("mpoa: (%s) mpc_push: control packet arrived\n", dev->name); | |
437 | - skb_queue_tail(&vcc->recvq, skb); /* Pass control packets to daemon */ | |
438 | + skb_queue_tail(&vcc->sk->receive_queue, skb); /* Pass control packets to daemon */ | |
439 | wake_up(&vcc->sleep); | |
440 | return; | |
441 | } | |
442 | @@ -840,7 +840,7 @@ | |
443 | mpc->in_ops->destroy_cache(mpc); | |
444 | mpc->eg_ops->destroy_cache(mpc); | |
445 | ||
446 | - while ( (skb = skb_dequeue(&vcc->recvq)) ){ | |
447 | + while ( (skb = skb_dequeue(&vcc->sk->receive_queue)) ){ | |
448 | atm_return(vcc, skb->truesize); | |
449 | kfree_skb(skb); | |
450 | } | |
451 | @@ -860,7 +860,7 @@ | |
452 | ||
453 | struct mpoa_client *mpc = find_mpc_by_vcc(vcc); | |
454 | struct k_message *mesg = (struct k_message*)skb->data; | |
455 | - atomic_sub(skb->truesize+ATM_PDU_OVHD, &vcc->tx_inuse); | |
456 | + atomic_sub(skb->truesize+ATM_PDU_OVHD, &vcc->sk->wmem_alloc); | |
457 | ||
458 | if (mpc == NULL) { | |
459 | printk("mpoa: msg_from_mpoad: no mpc found\n"); | |
460 | @@ -937,7 +937,7 @@ | |
461 | skb_put(skb, sizeof(struct k_message)); | |
462 | memcpy(skb->data, mesg, sizeof(struct k_message)); | |
463 | atm_force_charge(mpc->mpoad_vcc, skb->truesize); | |
464 | - skb_queue_tail(&mpc->mpoad_vcc->recvq, skb); | |
465 | + skb_queue_tail(&mpc->mpoad_vcc->sk->receive_queue, skb); | |
466 | wake_up(&mpc->mpoad_vcc->sleep); | |
467 | ||
468 | return 0; | |
469 | @@ -1214,7 +1214,7 @@ | |
470 | purge_msg->content.eg_info = entry->ctrl_info; | |
471 | ||
472 | atm_force_charge(vcc, skb->truesize); | |
473 | - skb_queue_tail(&vcc->recvq, skb); | |
474 | + skb_queue_tail(&vcc->sk->receive_queue, skb); | |
475 | wake_up(&vcc->sleep); | |
476 | dprintk("mpoa: purge_egress_shortcut: exiting:\n"); | |
477 | ||
478 | Index: linux/net/atm/proc.c | |
479 | =================================================================== | |
480 | RCS file: /home/chas/CVSROOT/linux/net/atm/proc.c,v | |
481 | retrieving revision 1.3 | |
482 | diff -u -r1.3 proc.c | |
483 | --- linux/net/atm/proc.c 3 Mar 2003 22:23:13 -0000 1.3 | |
484 | +++ linux/net/atm/proc.c 5 Mar 2003 00:19:32 -0000 | |
485 | @@ -134,7 +134,7 @@ | |
486 | unsigned char *ip; | |
487 | int svc,off,ip_len; | |
488 | ||
489 | - svc = !clip_vcc || clip_vcc->vcc->family == AF_ATMSVC; | |
490 | + svc = !clip_vcc || clip_vcc->vcc->sk->family == AF_ATMSVC; | |
491 | off = sprintf(buf,"%-6s%-4s%-4s%5ld ",dev->name,svc ? "SVC" : "PVC", | |
492 | !clip_vcc || clip_vcc->encap ? "LLC" : "NULL", | |
493 | (jiffies-(clip_vcc ? clip_vcc->last_use : entry->neigh->used))/ | |
494 | @@ -209,7 +209,7 @@ | |
495 | if (!vcc->dev) here += sprintf(here,"Unassigned "); | |
496 | else here += sprintf(here,"%3d %3d %5d ",vcc->dev->number,vcc->vpi, | |
497 | vcc->vci); | |
498 | - switch (vcc->family) { | |
499 | + switch (vcc->sk->family) { | |
500 | case AF_ATMPVC: | |
501 | here += sprintf(here,"PVC"); | |
502 | break; | |
503 | @@ -217,12 +217,12 @@ | |
504 | here += sprintf(here,"SVC"); | |
505 | break; | |
506 | default: | |
507 | - here += sprintf(here,"%3d",vcc->family); | |
508 | + here += sprintf(here,"%3d",vcc->sk->family); | |
509 | } | |
510 | here += sprintf(here," %04lx %5d %7d/%7d %7d/%7d\n",vcc->flags, | |
511 | vcc->reply, | |
512 | - atomic_read(&vcc->tx_inuse),vcc->sk->sndbuf, | |
513 | - atomic_read(&vcc->rx_inuse),vcc->sk->rcvbuf); | |
514 | + atomic_read(&vcc->sk->wmem_alloc),vcc->sk->sndbuf, | |
515 | + atomic_read(&vcc->sk->rmem_alloc),vcc->sk->rcvbuf); | |
516 | } | |
517 | ||
518 | ||
519 | @@ -302,6 +302,7 @@ | |
520 | static int atm_devices_info(loff_t pos,char *buf) | |
521 | { | |
522 | struct atm_dev *dev; | |
523 | + struct list_head *p; | |
524 | int left; | |
525 | ||
526 | if (!pos) { | |
527 | @@ -309,10 +310,14 @@ | |
528 | "AAL(TX,err,RX,err,drop) ...\n"); | |
529 | } | |
530 | left = pos-1; | |
531 | - for (dev = atm_devs; dev && left; dev = dev->next) left--; | |
532 | - if (!dev) return 0; | |
533 | - dev_info(dev,buf); | |
534 | - return strlen(buf); | |
535 | + list_for_each(p, &atm_devs) { | |
536 | + dev = list_entry(p, struct atm_dev, dev_list); | |
537 | + if (left-- == 0) { | |
538 | + dev_info(dev,buf); | |
539 | + return strlen(buf); | |
540 | + } | |
541 | + } | |
542 | + return 0; | |
543 | } | |
544 | ||
545 | /* | |
546 | @@ -323,6 +328,7 @@ | |
547 | static int atm_pvc_info(loff_t pos,char *buf) | |
548 | { | |
549 | struct atm_dev *dev; | |
550 | + struct list_head *p; | |
551 | struct atm_vcc *vcc; | |
552 | int left; | |
553 | ||
554 | @@ -331,13 +337,15 @@ | |
555 | "TX(PCR,Class)\n"); | |
556 | } | |
557 | left = pos-1; | |
558 | - for (dev = atm_devs; dev; dev = dev->next) | |
559 | + list_for_each(p, &atm_devs) { | |
560 | + dev = list_entry(p, struct atm_dev, dev_list); | |
561 | for (vcc = dev->vccs; vcc; vcc = vcc->next) | |
562 | - if (vcc->family == PF_ATMPVC && | |
563 | + if (vcc->sk->family == PF_ATMPVC && | |
564 | vcc->dev && !left--) { | |
565 | pvc_info(vcc,buf); | |
566 | return strlen(buf); | |
567 | } | |
568 | + } | |
569 | return 0; | |
570 | } | |
571 | ||
572 | @@ -345,6 +353,7 @@ | |
573 | static int atm_vc_info(loff_t pos,char *buf) | |
574 | { | |
575 | struct atm_dev *dev; | |
576 | + struct list_head *p; | |
577 | struct atm_vcc *vcc; | |
578 | int left; | |
579 | ||
580 | @@ -353,12 +362,14 @@ | |
581 | "Address"," Itf VPI VCI Fam Flags Reply Send buffer" | |
582 | " Recv buffer\n"); | |
583 | left = pos-1; | |
584 | - for (dev = atm_devs; dev; dev = dev->next) | |
585 | + list_for_each(p, &atm_devs) { | |
586 | + dev = list_entry(p, struct atm_dev, dev_list); | |
587 | for (vcc = dev->vccs; vcc; vcc = vcc->next) | |
588 | if (!left--) { | |
589 | vc_info(vcc,buf); | |
590 | return strlen(buf); | |
591 | } | |
592 | + } | |
593 | for (vcc = nodev_vccs; vcc; vcc = vcc->next) | |
594 | if (!left--) { | |
595 | vc_info(vcc,buf); | |
596 | @@ -372,20 +383,23 @@ | |
597 | static int atm_svc_info(loff_t pos,char *buf) | |
598 | { | |
599 | struct atm_dev *dev; | |
600 | + struct list_head *p; | |
601 | struct atm_vcc *vcc; | |
602 | int left; | |
603 | ||
604 | if (!pos) | |
605 | return sprintf(buf,"Itf VPI VCI State Remote\n"); | |
606 | left = pos-1; | |
607 | - for (dev = atm_devs; dev; dev = dev->next) | |
608 | + list_for_each(p, &atm_devs) { | |
609 | + dev = list_entry(p, struct atm_dev, dev_list); | |
610 | for (vcc = dev->vccs; vcc; vcc = vcc->next) | |
611 | - if (vcc->family == PF_ATMSVC && !left--) { | |
612 | + if (vcc->sk->family == PF_ATMSVC && !left--) { | |
613 | svc_info(vcc,buf); | |
614 | return strlen(buf); | |
615 | } | |
616 | + } | |
617 | for (vcc = nodev_vccs; vcc; vcc = vcc->next) | |
618 | - if (vcc->family == PF_ATMSVC && !left--) { | |
619 | + if (vcc->sk->family == PF_ATMSVC && !left--) { | |
620 | svc_info(vcc,buf); | |
621 | return strlen(buf); | |
622 | } | |
623 | Index: linux/net/atm/raw.c | |
624 | =================================================================== | |
625 | RCS file: /home/chas/CVSROOT/linux/net/atm/raw.c,v | |
626 | retrieving revision 1.1.1.1 | |
627 | diff -u -r1.1.1.1 raw.c | |
628 | --- linux/net/atm/raw.c 20 Feb 2003 13:46:30 -0000 1.1.1.1 | |
629 | +++ linux/net/atm/raw.c 4 Mar 2003 23:42:30 -0000 | |
630 | @@ -28,7 +28,7 @@ | |
631 | void atm_push_raw(struct atm_vcc *vcc,struct sk_buff *skb) | |
632 | { | |
633 | if (skb) { | |
634 | - skb_queue_tail(&vcc->recvq,skb); | |
635 | + skb_queue_tail(&vcc->sk->receive_queue,skb); | |
636 | wake_up(&vcc->sleep); | |
637 | } | |
638 | } | |
639 | @@ -36,8 +36,8 @@ | |
640 | ||
641 | static void atm_pop_raw(struct atm_vcc *vcc,struct sk_buff *skb) | |
642 | { | |
643 | - DPRINTK("APopR (%d) %d -= %d\n",vcc->vci,vcc->tx_inuse,skb->truesize); | |
644 | - atomic_sub(skb->truesize+ATM_PDU_OVHD,&vcc->tx_inuse); | |
645 | + DPRINTK("APopR (%d) %d -= %d\n",vcc->vci,vcc->sk->wmem_alloc,skb->truesize); | |
646 | + atomic_sub(skb->truesize+ATM_PDU_OVHD,&vcc->sk->wmem_alloc); | |
647 | dev_kfree_skb_any(skb); | |
648 | wake_up(&vcc->sleep); | |
649 | } | |
650 | Index: linux/net/atm/resources.c | |
651 | =================================================================== | |
652 | RCS file: /home/chas/CVSROOT/linux/net/atm/resources.c,v | |
653 | retrieving revision 1.2 | |
654 | diff -u -r1.2 resources.c | |
655 | --- linux/net/atm/resources.c 25 Feb 2003 20:03:53 -0000 1.2 | |
656 | +++ linux/net/atm/resources.c 5 Mar 2003 00:10:01 -0000 | |
657 | @@ -26,8 +26,7 @@ | |
658 | #endif | |
659 | ||
660 | ||
661 | -struct atm_dev *atm_devs = NULL; | |
662 | -static struct atm_dev *last_dev = NULL; | |
663 | +LIST_HEAD(atm_devs); | |
664 | struct atm_vcc *nodev_vccs = NULL; | |
665 | extern struct semaphore atm_dev_sem; | |
666 | ||
667 | @@ -43,15 +42,7 @@ | |
668 | dev->type = type; | |
669 | dev->signal = ATM_PHY_SIG_UNKNOWN; | |
670 | dev->link_rate = ATM_OC3_PCR; | |
671 | - dev->next = NULL; | |
672 | - | |
673 | - dev->prev = last_dev; | |
674 | - | |
675 | - if (atm_devs) | |
676 | - last_dev->next = dev; | |
677 | - else | |
678 | - atm_devs = dev; | |
679 | - last_dev = dev; | |
680 | + list_add_tail(&dev->dev_list, &atm_devs); | |
681 | ||
682 | return dev; | |
683 | } | |
684 | @@ -59,14 +50,7 @@ | |
685 | /* Caller must hold atm_dev_sem. */ | |
686 | static void __free_atm_dev(struct atm_dev *dev) | |
687 | { | |
688 | - if (dev->prev) | |
689 | - dev->prev->next = dev->next; | |
690 | - else | |
691 | - atm_devs = dev->next; | |
692 | - if (dev->next) | |
693 | - dev->next->prev = dev->prev; | |
694 | - else | |
695 | - last_dev = dev->prev; | |
696 | + list_del(&dev->dev_list); | |
697 | kfree(dev); | |
698 | } | |
699 | ||
700 | @@ -74,10 +58,13 @@ | |
701 | struct atm_dev *atm_find_dev(int number) | |
702 | { | |
703 | struct atm_dev *dev; | |
704 | + struct list_head *p; | |
705 | ||
706 | - for (dev = atm_devs; dev; dev = dev->next) | |
707 | + list_for_each(p, &atm_devs) { | |
708 | + dev = list_entry(p, struct atm_dev, dev_list); | |
709 | if (dev->ops && dev->number == number) | |
710 | return dev; | |
711 | + } | |
712 | return NULL; | |
713 | } | |
714 | ||
715 | Index: linux/net/atm/resources.h | |
716 | =================================================================== | |
717 | RCS file: /home/chas/CVSROOT/linux/net/atm/resources.h,v | |
718 | retrieving revision 1.1.1.1 | |
719 | diff -u -r1.1.1.1 resources.h | |
720 | --- linux/net/atm/resources.h 20 Feb 2003 13:46:30 -0000 1.1.1.1 | |
721 | +++ linux/net/atm/resources.h 5 Mar 2003 00:11:51 -0000 | |
722 | @@ -10,7 +10,7 @@ | |
723 | #include <linux/atmdev.h> | |
724 | ||
725 | ||
726 | -extern struct atm_dev *atm_devs; | |
727 | +extern struct list_head atm_devs; | |
728 | extern struct atm_vcc *nodev_vccs; /* VCCs not linked to any device */ | |
729 | ||
730 | ||
731 | Index: linux/net/atm/signaling.c | |
732 | =================================================================== | |
733 | RCS file: /home/chas/CVSROOT/linux/net/atm/signaling.c,v | |
734 | retrieving revision 1.2 | |
735 | diff -u -r1.2 signaling.c | |
736 | --- linux/net/atm/signaling.c 25 Feb 2003 20:03:53 -0000 1.2 | |
737 | +++ linux/net/atm/signaling.c 5 Mar 2003 00:21:45 -0000 | |
738 | @@ -61,7 +61,7 @@ | |
739 | } | |
740 | #endif | |
741 | atm_force_charge(sigd,skb->truesize); | |
742 | - skb_queue_tail(&sigd->recvq,skb); | |
743 | + skb_queue_tail(&sigd->sk->receive_queue,skb); | |
744 | wake_up(&sigd->sleep); | |
745 | } | |
746 | ||
747 | @@ -98,7 +98,7 @@ | |
748 | struct atm_vcc *session_vcc; | |
749 | ||
750 | msg = (struct atmsvc_msg *) skb->data; | |
751 | - atomic_sub(skb->truesize+ATM_PDU_OVHD,&vcc->tx_inuse); | |
752 | + atomic_sub(skb->truesize+ATM_PDU_OVHD,&vcc->sk->wmem_alloc); | |
753 | DPRINTK("sigd_send %d (0x%lx)\n",(int) msg->type, | |
754 | (unsigned long) msg->vcc); | |
755 | vcc = *(struct atm_vcc **) &msg->vcc; | |
756 | @@ -198,7 +198,7 @@ | |
757 | static void purge_vccs(struct atm_vcc *vcc) | |
758 | { | |
759 | while (vcc) { | |
760 | - if (vcc->family == PF_ATMSVC && | |
761 | + if (vcc->sk->family == PF_ATMSVC && | |
762 | !test_bit(ATM_VF_META,&vcc->flags)) { | |
763 | set_bit(ATM_VF_RELEASED,&vcc->flags); | |
764 | vcc->reply = -EUNATCH; | |
765 | @@ -212,16 +212,20 @@ | |
766 | static void sigd_close(struct atm_vcc *vcc) | |
767 | { | |
768 | struct atm_dev *dev; | |
769 | + struct list_head *p; | |
770 | ||
771 | DPRINTK("sigd_close\n"); | |
772 | sigd = NULL; | |
773 | - if (skb_peek(&vcc->recvq)) | |
774 | + if (skb_peek(&vcc->sk->receive_queue)) | |
775 | printk(KERN_ERR "sigd_close: closing with requests pending\n"); | |
776 | - skb_queue_purge(&vcc->recvq); | |
777 | + skb_queue_purge(&vcc->sk->receive_queue); | |
778 | purge_vccs(nodev_vccs); | |
779 | ||
780 | down(&atm_dev_sem); | |
781 | - for (dev = atm_devs; dev; dev = dev->next) purge_vccs(dev->vccs); | |
782 | + list_for_each(p, &atm_devs) { | |
783 | + dev = list_entry(p, struct atm_dev, dev_list); | |
784 | + purge_vccs(dev->vccs); | |
785 | + } | |
786 | up(&atm_dev_sem); | |
787 | } | |
788 | ||
789 | --- linux-2.4.20/drivers/atm/idt77252.c.orig Fri Dec 21 18:41:53 2001 | |
790 | +++ linux-2.4.20/drivers/atm/idt77252.c Wed Mar 5 20:27:00 2003 | |
791 | @@ -730,7 +730,7 @@ | |
792 | struct atm_vcc *vcc = vc->tx_vcc; | |
793 | ||
794 | vc->estimator->cells += (skb->len + 47) / 48; | |
795 | - if (atomic_read(&vcc->tx_inuse) > (vcc->sk->sndbuf >> 1)) { | |
796 | + if (atomic_read(&vcc->sk->wmem_alloc) > (vcc->sk->sndbuf >> 1)) { | |
797 | u32 cps = vc->estimator->maxcps; | |
798 | ||
799 | vc->estimator->cps = cps; | |
800 | @@ -2025,7 +2025,7 @@ | |
801 | atomic_inc(&vcc->stats->tx_err); | |
802 | return -ENOMEM; | |
803 | } | |
804 | - atomic_add(skb->truesize + ATM_PDU_OVHD, &vcc->tx_inuse); | |
805 | + atomic_add(skb->truesize + ATM_PDU_OVHD, &vcc->sk->wmem_alloc); | |
806 | ATM_SKB(skb)->iovcnt = 0; | |
807 | ||
808 | memcpy(skb_put(skb, 52), cell, 52); | |
809 | --- linux-2.4.20/net/atm/br2684.c.orig Wed Mar 5 22:11:10 2003 | |
810 | +++ linux-2.4.20/net/atm/br2684.c Wed Mar 5 22:42:20 2003 | |
811 | @@ -188,7 +188,7 @@ | |
812 | dev_kfree_skb(skb); | |
813 | return 0; | |
814 | } | |
815 | - atomic_add(skb->truesize, &atmvcc->tx_inuse); | |
816 | + atomic_add(skb->truesize, &atmvcc->sk->wmem_alloc); | |
817 | ATM_SKB(skb)->iovcnt = 0; | |
818 | ATM_SKB(skb)->atm_options = atmvcc->atm_options; | |
819 | brdev->stats.tx_packets++; | |
820 | @@ -553,7 +553,7 @@ | |
821 | barrier(); | |
822 | atmvcc->push = br2684_push; | |
823 | skb_queue_head_init(©); | |
824 | - skb_migrate(&atmvcc->recvq, ©); | |
825 | + skb_migrate(&atmvcc->sk->receive_queue, ©); | |
826 | while ((skb = skb_dequeue(©))) { | |
827 | BRPRIV(skb->dev)->stats.rx_bytes -= skb->len; | |
828 | BRPRIV(skb->dev)->stats.rx_packets--; | |
829 | --- linux-2.4.20/net/atm/pppoatm.c~ Sat Aug 3 02:39:46 2002 | |
830 | +++ linux-2.4.20/net/atm/pppoatm.c Wed Mar 5 22:43:51 2003 | |
831 | @@ -231,7 +231,7 @@ | |
832 | kfree_skb(skb); | |
833 | return 1; | |
834 | } | |
835 | - atomic_add(skb->truesize, &ATM_SKB(skb)->vcc->tx_inuse); | |
836 | + atomic_add(skb->truesize, &ATM_SKB(skb)->vcc->sk->wmem_alloc); | |
837 | ATM_SKB(skb)->iovcnt = 0; | |
838 | ATM_SKB(skb)->atm_options = ATM_SKB(skb)->vcc->atm_options; | |
839 | DPRINTK("(unit %d): atm_skb(%p)->vcc(%p)->dev(%p)\n", | |
6ebfd311 JR |
840 | --- linux-2.4.20/net/sched/sch_atm.c.orig Fri Dec 21 18:42:06 2001 |
841 | +++ linux-2.4.20/net/sched/sch_atm.c Thu Mar 6 22:55:53 2003 | |
842 | @@ -511,7 +511,7 @@ | |
843 | ATM_SKB(skb)->vcc = flow->vcc; | |
844 | memcpy(skb_push(skb,flow->hdr_len),flow->hdr, | |
845 | flow->hdr_len); | |
846 | - atomic_add(skb->truesize,&flow->vcc->tx_inuse); | |
847 | + atomic_add(skb->truesize,&flow->vcc->sk->wmem_alloc); | |
848 | ATM_SKB(skb)->iovcnt = 0; | |
849 | /* atm.atm_options are already set by atm_tc_enqueue */ | |
850 | (void) flow->vcc->send(flow->vcc,skb); | |
b5a39c4d JR |
851 | - |
852 | To unsubscribe from this list: send the line "unsubscribe linux-kernel" in | |
853 | the body of a message to majordomo@vger.kernel.org | |
854 | More majordomo info at http://vger.kernel.org/majordomo-info.html | |
855 | Please read the FAQ at http://www.tux.org/lkml/ |