af_iucv: Provide new socket type SOCK_SEQPACKET
[cascardo/linux.git] / net / iucv / af_iucv.c
1 /*
2  *  linux/net/iucv/af_iucv.c
3  *
4  *  IUCV protocol stack for Linux on zSeries
5  *
6  *  Copyright 2006 IBM Corporation
7  *
8  *  Author(s):  Jennifer Hunt <jenhunt@us.ibm.com>
9  */
10
11 #define KMSG_COMPONENT "af_iucv"
12 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
13
14 #include <linux/module.h>
15 #include <linux/types.h>
16 #include <linux/list.h>
17 #include <linux/errno.h>
18 #include <linux/kernel.h>
19 #include <linux/sched.h>
20 #include <linux/slab.h>
21 #include <linux/skbuff.h>
22 #include <linux/init.h>
23 #include <linux/poll.h>
24 #include <net/sock.h>
25 #include <asm/ebcdic.h>
26 #include <asm/cpcmd.h>
27 #include <linux/kmod.h>
28
29 #include <net/iucv/iucv.h>
30 #include <net/iucv/af_iucv.h>
31
32 #define VERSION "1.1"
33
34 static char iucv_userid[80];
35
36 static struct proto_ops iucv_sock_ops;
37
38 static struct proto iucv_proto = {
39         .name           = "AF_IUCV",
40         .owner          = THIS_MODULE,
41         .obj_size       = sizeof(struct iucv_sock),
42 };
43
44 /* special AF_IUCV IPRM messages */
45 static const u8 iprm_shutdown[8] =
46         {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};
47
48 #define TRGCLS_SIZE     (sizeof(((struct iucv_message *)0)->class))
49
50 /* macros to set/get socket control buffer at correct offset */
51 #define CB_TAG(skb)     ((skb)->cb)             /* iucv message tag */
52 #define CB_TAG_LEN      (sizeof(((struct iucv_message *) 0)->tag))
53 #define CB_TRGCLS(skb)  ((skb)->cb + CB_TAG_LEN) /* iucv msg target class */
54 #define CB_TRGCLS_LEN   (TRGCLS_SIZE)
55
56
57 static void iucv_sock_kill(struct sock *sk);
58 static void iucv_sock_close(struct sock *sk);
59
60 /* Call Back functions */
61 static void iucv_callback_rx(struct iucv_path *, struct iucv_message *);
62 static void iucv_callback_txdone(struct iucv_path *, struct iucv_message *);
63 static void iucv_callback_connack(struct iucv_path *, u8 ipuser[16]);
64 static int iucv_callback_connreq(struct iucv_path *, u8 ipvmid[8],
65                                  u8 ipuser[16]);
66 static void iucv_callback_connrej(struct iucv_path *, u8 ipuser[16]);
67 static void iucv_callback_shutdown(struct iucv_path *, u8 ipuser[16]);
68
69 static struct iucv_sock_list iucv_sk_list = {
70         .lock = __RW_LOCK_UNLOCKED(iucv_sk_list.lock),
71         .autobind_name = ATOMIC_INIT(0)
72 };
73
74 static struct iucv_handler af_iucv_handler = {
75         .path_pending     = iucv_callback_connreq,
76         .path_complete    = iucv_callback_connack,
77         .path_severed     = iucv_callback_connrej,
78         .message_pending  = iucv_callback_rx,
79         .message_complete = iucv_callback_txdone,
80         .path_quiesced    = iucv_callback_shutdown,
81 };
82
83 static inline void high_nmcpy(unsigned char *dst, char *src)
84 {
85        memcpy(dst, src, 8);
86 }
87
88 static inline void low_nmcpy(unsigned char *dst, char *src)
89 {
90        memcpy(&dst[8], src, 8);
91 }
92
93 /**
94  * iucv_msg_length() - Returns the length of an iucv message.
95  * @msg:        Pointer to struct iucv_message, MUST NOT be NULL
96  *
97  * The function returns the length of the specified iucv message @msg of data
98  * stored in a buffer and of data stored in the parameter list (PRMDATA).
99  *
100  * For IUCV_IPRMDATA, AF_IUCV uses the following convention to transport socket
101  * data:
102  *      PRMDATA[0..6]   socket data (max 7 bytes);
103  *      PRMDATA[7]      socket data length value (len is 0xff - PRMDATA[7])
104  *
105  * The socket data length is computed by substracting the socket data length
106  * value from 0xFF.
107  * If the socket data len is greater 7, then PRMDATA can be used for special
108  * notifications (see iucv_sock_shutdown); and further,
109  * if the socket data len is > 7, the function returns 8.
110  *
111  * Use this function to allocate socket buffers to store iucv message data.
112  */
113 static inline size_t iucv_msg_length(struct iucv_message *msg)
114 {
115         size_t datalen;
116
117         if (msg->flags & IUCV_IPRMDATA) {
118                 datalen = 0xff - msg->rmmsg[7];
119                 return (datalen < 8) ? datalen : 8;
120         }
121         return msg->length;
122 }
123
124 /* Timers */
125 static void iucv_sock_timeout(unsigned long arg)
126 {
127         struct sock *sk = (struct sock *)arg;
128
129         bh_lock_sock(sk);
130         sk->sk_err = ETIMEDOUT;
131         sk->sk_state_change(sk);
132         bh_unlock_sock(sk);
133
134         iucv_sock_kill(sk);
135         sock_put(sk);
136 }
137
138 static void iucv_sock_clear_timer(struct sock *sk)
139 {
140         sk_stop_timer(sk, &sk->sk_timer);
141 }
142
143 static struct sock *__iucv_get_sock_by_name(char *nm)
144 {
145         struct sock *sk;
146         struct hlist_node *node;
147
148         sk_for_each(sk, node, &iucv_sk_list.head)
149                 if (!memcmp(&iucv_sk(sk)->src_name, nm, 8))
150                         return sk;
151
152         return NULL;
153 }
154
155 static void iucv_sock_destruct(struct sock *sk)
156 {
157         skb_queue_purge(&sk->sk_receive_queue);
158         skb_queue_purge(&sk->sk_write_queue);
159 }
160
161 /* Cleanup Listen */
162 static void iucv_sock_cleanup_listen(struct sock *parent)
163 {
164         struct sock *sk;
165
166         /* Close non-accepted connections */
167         while ((sk = iucv_accept_dequeue(parent, NULL))) {
168                 iucv_sock_close(sk);
169                 iucv_sock_kill(sk);
170         }
171
172         parent->sk_state = IUCV_CLOSED;
173         sock_set_flag(parent, SOCK_ZAPPED);
174 }
175
176 /* Kill socket */
177 static void iucv_sock_kill(struct sock *sk)
178 {
179         if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
180                 return;
181
182         iucv_sock_unlink(&iucv_sk_list, sk);
183         sock_set_flag(sk, SOCK_DEAD);
184         sock_put(sk);
185 }
186
187 /* Close an IUCV socket */
188 static void iucv_sock_close(struct sock *sk)
189 {
190         unsigned char user_data[16];
191         struct iucv_sock *iucv = iucv_sk(sk);
192         int err;
193         unsigned long timeo;
194
195         iucv_sock_clear_timer(sk);
196         lock_sock(sk);
197
198         switch (sk->sk_state) {
199         case IUCV_LISTEN:
200                 iucv_sock_cleanup_listen(sk);
201                 break;
202
203         case IUCV_CONNECTED:
204         case IUCV_DISCONN:
205                 err = 0;
206
207                 sk->sk_state = IUCV_CLOSING;
208                 sk->sk_state_change(sk);
209
210                 if (!skb_queue_empty(&iucv->send_skb_q)) {
211                         if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
212                                 timeo = sk->sk_lingertime;
213                         else
214                                 timeo = IUCV_DISCONN_TIMEOUT;
215                         err = iucv_sock_wait_state(sk, IUCV_CLOSED, 0, timeo);
216                 }
217
218                 sk->sk_state = IUCV_CLOSED;
219                 sk->sk_state_change(sk);
220
221                 if (iucv->path) {
222                         low_nmcpy(user_data, iucv->src_name);
223                         high_nmcpy(user_data, iucv->dst_name);
224                         ASCEBC(user_data, sizeof(user_data));
225                         err = iucv_path_sever(iucv->path, user_data);
226                         iucv_path_free(iucv->path);
227                         iucv->path = NULL;
228                 }
229
230                 sk->sk_err = ECONNRESET;
231                 sk->sk_state_change(sk);
232
233                 skb_queue_purge(&iucv->send_skb_q);
234                 skb_queue_purge(&iucv->backlog_skb_q);
235
236                 sock_set_flag(sk, SOCK_ZAPPED);
237                 break;
238
239         default:
240                 sock_set_flag(sk, SOCK_ZAPPED);
241                 break;
242         }
243
244         release_sock(sk);
245         iucv_sock_kill(sk);
246 }
247
248 static void iucv_sock_init(struct sock *sk, struct sock *parent)
249 {
250         if (parent)
251                 sk->sk_type = parent->sk_type;
252 }
253
254 static struct sock *iucv_sock_alloc(struct socket *sock, int proto, gfp_t prio)
255 {
256         struct sock *sk;
257
258         sk = sk_alloc(&init_net, PF_IUCV, prio, &iucv_proto);
259         if (!sk)
260                 return NULL;
261
262         sock_init_data(sock, sk);
263         INIT_LIST_HEAD(&iucv_sk(sk)->accept_q);
264         spin_lock_init(&iucv_sk(sk)->accept_q_lock);
265         skb_queue_head_init(&iucv_sk(sk)->send_skb_q);
266         INIT_LIST_HEAD(&iucv_sk(sk)->message_q.list);
267         spin_lock_init(&iucv_sk(sk)->message_q.lock);
268         skb_queue_head_init(&iucv_sk(sk)->backlog_skb_q);
269         iucv_sk(sk)->send_tag = 0;
270         iucv_sk(sk)->flags = 0;
271
272         sk->sk_destruct = iucv_sock_destruct;
273         sk->sk_sndtimeo = IUCV_CONN_TIMEOUT;
274         sk->sk_allocation = GFP_DMA;
275
276         sock_reset_flag(sk, SOCK_ZAPPED);
277
278         sk->sk_protocol = proto;
279         sk->sk_state    = IUCV_OPEN;
280
281         setup_timer(&sk->sk_timer, iucv_sock_timeout, (unsigned long)sk);
282
283         iucv_sock_link(&iucv_sk_list, sk);
284         return sk;
285 }
286
287 /* Create an IUCV socket */
288 static int iucv_sock_create(struct net *net, struct socket *sock, int protocol)
289 {
290         struct sock *sk;
291
292         if (protocol && protocol != PF_IUCV)
293                 return -EPROTONOSUPPORT;
294
295         sock->state = SS_UNCONNECTED;
296
297         switch (sock->type) {
298         case SOCK_STREAM:
299                 sock->ops = &iucv_sock_ops;
300                 break;
301         case SOCK_SEQPACKET:
302                 /* currently, proto ops can handle both sk types */
303                 sock->ops = &iucv_sock_ops;
304                 break;
305         default:
306                 return -ESOCKTNOSUPPORT;
307         }
308
309         sk = iucv_sock_alloc(sock, protocol, GFP_KERNEL);
310         if (!sk)
311                 return -ENOMEM;
312
313         iucv_sock_init(sk, NULL);
314
315         return 0;
316 }
317
318 void iucv_sock_link(struct iucv_sock_list *l, struct sock *sk)
319 {
320         write_lock_bh(&l->lock);
321         sk_add_node(sk, &l->head);
322         write_unlock_bh(&l->lock);
323 }
324
325 void iucv_sock_unlink(struct iucv_sock_list *l, struct sock *sk)
326 {
327         write_lock_bh(&l->lock);
328         sk_del_node_init(sk);
329         write_unlock_bh(&l->lock);
330 }
331
332 void iucv_accept_enqueue(struct sock *parent, struct sock *sk)
333 {
334         unsigned long flags;
335         struct iucv_sock *par = iucv_sk(parent);
336
337         sock_hold(sk);
338         spin_lock_irqsave(&par->accept_q_lock, flags);
339         list_add_tail(&iucv_sk(sk)->accept_q, &par->accept_q);
340         spin_unlock_irqrestore(&par->accept_q_lock, flags);
341         iucv_sk(sk)->parent = parent;
342         parent->sk_ack_backlog++;
343 }
344
345 void iucv_accept_unlink(struct sock *sk)
346 {
347         unsigned long flags;
348         struct iucv_sock *par = iucv_sk(iucv_sk(sk)->parent);
349
350         spin_lock_irqsave(&par->accept_q_lock, flags);
351         list_del_init(&iucv_sk(sk)->accept_q);
352         spin_unlock_irqrestore(&par->accept_q_lock, flags);
353         iucv_sk(sk)->parent->sk_ack_backlog--;
354         iucv_sk(sk)->parent = NULL;
355         sock_put(sk);
356 }
357
358 struct sock *iucv_accept_dequeue(struct sock *parent, struct socket *newsock)
359 {
360         struct iucv_sock *isk, *n;
361         struct sock *sk;
362
363         list_for_each_entry_safe(isk, n, &iucv_sk(parent)->accept_q, accept_q) {
364                 sk = (struct sock *) isk;
365                 lock_sock(sk);
366
367                 if (sk->sk_state == IUCV_CLOSED) {
368                         iucv_accept_unlink(sk);
369                         release_sock(sk);
370                         continue;
371                 }
372
373                 if (sk->sk_state == IUCV_CONNECTED ||
374                     sk->sk_state == IUCV_SEVERED ||
375                     !newsock) {
376                         iucv_accept_unlink(sk);
377                         if (newsock)
378                                 sock_graft(sk, newsock);
379
380                         if (sk->sk_state == IUCV_SEVERED)
381                                 sk->sk_state = IUCV_DISCONN;
382
383                         release_sock(sk);
384                         return sk;
385                 }
386
387                 release_sock(sk);
388         }
389         return NULL;
390 }
391
392 int iucv_sock_wait_state(struct sock *sk, int state, int state2,
393                          unsigned long timeo)
394 {
395         DECLARE_WAITQUEUE(wait, current);
396         int err = 0;
397
398         add_wait_queue(sk->sk_sleep, &wait);
399         while (sk->sk_state != state && sk->sk_state != state2) {
400                 set_current_state(TASK_INTERRUPTIBLE);
401
402                 if (!timeo) {
403                         err = -EAGAIN;
404                         break;
405                 }
406
407                 if (signal_pending(current)) {
408                         err = sock_intr_errno(timeo);
409                         break;
410                 }
411
412                 release_sock(sk);
413                 timeo = schedule_timeout(timeo);
414                 lock_sock(sk);
415
416                 err = sock_error(sk);
417                 if (err)
418                         break;
419         }
420         set_current_state(TASK_RUNNING);
421         remove_wait_queue(sk->sk_sleep, &wait);
422         return err;
423 }
424
425 /* Bind an unbound socket */
426 static int iucv_sock_bind(struct socket *sock, struct sockaddr *addr,
427                           int addr_len)
428 {
429         struct sockaddr_iucv *sa = (struct sockaddr_iucv *) addr;
430         struct sock *sk = sock->sk;
431         struct iucv_sock *iucv;
432         int err;
433
434         /* Verify the input sockaddr */
435         if (!addr || addr->sa_family != AF_IUCV)
436                 return -EINVAL;
437
438         lock_sock(sk);
439         if (sk->sk_state != IUCV_OPEN) {
440                 err = -EBADFD;
441                 goto done;
442         }
443
444         write_lock_bh(&iucv_sk_list.lock);
445
446         iucv = iucv_sk(sk);
447         if (__iucv_get_sock_by_name(sa->siucv_name)) {
448                 err = -EADDRINUSE;
449                 goto done_unlock;
450         }
451         if (iucv->path) {
452                 err = 0;
453                 goto done_unlock;
454         }
455
456         /* Bind the socket */
457         memcpy(iucv->src_name, sa->siucv_name, 8);
458
459         /* Copy the user id */
460         memcpy(iucv->src_user_id, iucv_userid, 8);
461         sk->sk_state = IUCV_BOUND;
462         err = 0;
463
464 done_unlock:
465         /* Release the socket list lock */
466         write_unlock_bh(&iucv_sk_list.lock);
467 done:
468         release_sock(sk);
469         return err;
470 }
471
472 /* Automatically bind an unbound socket */
473 static int iucv_sock_autobind(struct sock *sk)
474 {
475         struct iucv_sock *iucv = iucv_sk(sk);
476         char query_buffer[80];
477         char name[12];
478         int err = 0;
479
480         /* Set the userid and name */
481         cpcmd("QUERY USERID", query_buffer, sizeof(query_buffer), &err);
482         if (unlikely(err))
483                 return -EPROTO;
484
485         memcpy(iucv->src_user_id, query_buffer, 8);
486
487         write_lock_bh(&iucv_sk_list.lock);
488
489         sprintf(name, "%08x", atomic_inc_return(&iucv_sk_list.autobind_name));
490         while (__iucv_get_sock_by_name(name)) {
491                 sprintf(name, "%08x",
492                         atomic_inc_return(&iucv_sk_list.autobind_name));
493         }
494
495         write_unlock_bh(&iucv_sk_list.lock);
496
497         memcpy(&iucv->src_name, name, 8);
498
499         return err;
500 }
501
502 /* Connect an unconnected socket */
503 static int iucv_sock_connect(struct socket *sock, struct sockaddr *addr,
504                              int alen, int flags)
505 {
506         struct sockaddr_iucv *sa = (struct sockaddr_iucv *) addr;
507         struct sock *sk = sock->sk;
508         struct iucv_sock *iucv;
509         unsigned char user_data[16];
510         int err;
511
512         if (addr->sa_family != AF_IUCV || alen < sizeof(struct sockaddr_iucv))
513                 return -EINVAL;
514
515         if (sk->sk_state != IUCV_OPEN && sk->sk_state != IUCV_BOUND)
516                 return -EBADFD;
517
518         if (sk->sk_type != SOCK_STREAM && sk->sk_type != SOCK_SEQPACKET)
519                 return -EINVAL;
520
521         if (sk->sk_state == IUCV_OPEN) {
522                 err = iucv_sock_autobind(sk);
523                 if (unlikely(err))
524                         return err;
525         }
526
527         lock_sock(sk);
528
529         /* Set the destination information */
530         memcpy(iucv_sk(sk)->dst_user_id, sa->siucv_user_id, 8);
531         memcpy(iucv_sk(sk)->dst_name, sa->siucv_name, 8);
532
533         high_nmcpy(user_data, sa->siucv_name);
534         low_nmcpy(user_data, iucv_sk(sk)->src_name);
535         ASCEBC(user_data, sizeof(user_data));
536
537         iucv = iucv_sk(sk);
538         /* Create path. */
539         iucv->path = iucv_path_alloc(IUCV_QUEUELEN_DEFAULT,
540                                      IUCV_IPRMDATA, GFP_KERNEL);
541         if (!iucv->path) {
542                 err = -ENOMEM;
543                 goto done;
544         }
545         err = iucv_path_connect(iucv->path, &af_iucv_handler,
546                                 sa->siucv_user_id, NULL, user_data, sk);
547         if (err) {
548                 iucv_path_free(iucv->path);
549                 iucv->path = NULL;
550                 switch (err) {
551                 case 0x0b:      /* Target communicator is not logged on */
552                         err = -ENETUNREACH;
553                         break;
554                 case 0x0d:      /* Max connections for this guest exceeded */
555                 case 0x0e:      /* Max connections for target guest exceeded */
556                         err = -EAGAIN;
557                         break;
558                 case 0x0f:      /* Missing IUCV authorization */
559                         err = -EACCES;
560                         break;
561                 default:
562                         err = -ECONNREFUSED;
563                         break;
564                 }
565                 goto done;
566         }
567
568         if (sk->sk_state != IUCV_CONNECTED) {
569                 err = iucv_sock_wait_state(sk, IUCV_CONNECTED, IUCV_DISCONN,
570                                 sock_sndtimeo(sk, flags & O_NONBLOCK));
571         }
572
573         if (sk->sk_state == IUCV_DISCONN) {
574                 err = -ECONNREFUSED;
575         }
576
577         if (err) {
578                 iucv_path_sever(iucv->path, NULL);
579                 iucv_path_free(iucv->path);
580                 iucv->path = NULL;
581         }
582
583 done:
584         release_sock(sk);
585         return err;
586 }
587
588 /* Move a socket into listening state. */
589 static int iucv_sock_listen(struct socket *sock, int backlog)
590 {
591         struct sock *sk = sock->sk;
592         int err;
593
594         lock_sock(sk);
595
596         err = -EINVAL;
597         if (sk->sk_state != IUCV_BOUND)
598                 goto done;
599
600         if (sock->type != SOCK_STREAM && sock->type != SOCK_SEQPACKET)
601                 goto done;
602
603         sk->sk_max_ack_backlog = backlog;
604         sk->sk_ack_backlog = 0;
605         sk->sk_state = IUCV_LISTEN;
606         err = 0;
607
608 done:
609         release_sock(sk);
610         return err;
611 }
612
613 /* Accept a pending connection */
614 static int iucv_sock_accept(struct socket *sock, struct socket *newsock,
615                             int flags)
616 {
617         DECLARE_WAITQUEUE(wait, current);
618         struct sock *sk = sock->sk, *nsk;
619         long timeo;
620         int err = 0;
621
622         lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
623
624         if (sk->sk_state != IUCV_LISTEN) {
625                 err = -EBADFD;
626                 goto done;
627         }
628
629         timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
630
631         /* Wait for an incoming connection */
632         add_wait_queue_exclusive(sk->sk_sleep, &wait);
633         while (!(nsk = iucv_accept_dequeue(sk, newsock))) {
634                 set_current_state(TASK_INTERRUPTIBLE);
635                 if (!timeo) {
636                         err = -EAGAIN;
637                         break;
638                 }
639
640                 release_sock(sk);
641                 timeo = schedule_timeout(timeo);
642                 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
643
644                 if (sk->sk_state != IUCV_LISTEN) {
645                         err = -EBADFD;
646                         break;
647                 }
648
649                 if (signal_pending(current)) {
650                         err = sock_intr_errno(timeo);
651                         break;
652                 }
653         }
654
655         set_current_state(TASK_RUNNING);
656         remove_wait_queue(sk->sk_sleep, &wait);
657
658         if (err)
659                 goto done;
660
661         newsock->state = SS_CONNECTED;
662
663 done:
664         release_sock(sk);
665         return err;
666 }
667
668 static int iucv_sock_getname(struct socket *sock, struct sockaddr *addr,
669                              int *len, int peer)
670 {
671         struct sockaddr_iucv *siucv = (struct sockaddr_iucv *) addr;
672         struct sock *sk = sock->sk;
673
674         addr->sa_family = AF_IUCV;
675         *len = sizeof(struct sockaddr_iucv);
676
677         if (peer) {
678                 memcpy(siucv->siucv_user_id, iucv_sk(sk)->dst_user_id, 8);
679                 memcpy(siucv->siucv_name, &iucv_sk(sk)->dst_name, 8);
680         } else {
681                 memcpy(siucv->siucv_user_id, iucv_sk(sk)->src_user_id, 8);
682                 memcpy(siucv->siucv_name, iucv_sk(sk)->src_name, 8);
683         }
684         memset(&siucv->siucv_port, 0, sizeof(siucv->siucv_port));
685         memset(&siucv->siucv_addr, 0, sizeof(siucv->siucv_addr));
686         memset(siucv->siucv_nodeid, 0, sizeof(siucv->siucv_nodeid));
687
688         return 0;
689 }
690
691 /**
692  * iucv_send_iprm() - Send socket data in parameter list of an iucv message.
693  * @path:       IUCV path
694  * @msg:        Pointer to a struct iucv_message
695  * @skb:        The socket data to send, skb->len MUST BE <= 7
696  *
697  * Send the socket data in the parameter list in the iucv message
698  * (IUCV_IPRMDATA). The socket data is stored at index 0 to 6 in the parameter
699  * list and the socket data len at index 7 (last byte).
700  * See also iucv_msg_length().
701  *
702  * Returns the error code from the iucv_message_send() call.
703  */
704 static int iucv_send_iprm(struct iucv_path *path, struct iucv_message *msg,
705                           struct sk_buff *skb)
706 {
707         u8 prmdata[8];
708
709         memcpy(prmdata, (void *) skb->data, skb->len);
710         prmdata[7] = 0xff - (u8) skb->len;
711         return iucv_message_send(path, msg, IUCV_IPRMDATA, 0,
712                                  (void *) prmdata, 8);
713 }
714
715 static int iucv_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
716                              struct msghdr *msg, size_t len)
717 {
718         struct sock *sk = sock->sk;
719         struct iucv_sock *iucv = iucv_sk(sk);
720         struct sk_buff *skb;
721         struct iucv_message txmsg;
722         struct cmsghdr *cmsg;
723         int cmsg_done;
724         char user_id[9];
725         char appl_id[9];
726         int err;
727
728         err = sock_error(sk);
729         if (err)
730                 return err;
731
732         if (msg->msg_flags & MSG_OOB)
733                 return -EOPNOTSUPP;
734
735         /* SOCK_SEQPACKET: we do not support segmented records */
736         if (sk->sk_type == SOCK_SEQPACKET && !(msg->msg_flags & MSG_EOR))
737                 return -EOPNOTSUPP;
738
739         lock_sock(sk);
740
741         if (sk->sk_shutdown & SEND_SHUTDOWN) {
742                 err = -EPIPE;
743                 goto out;
744         }
745
746         if (sk->sk_state == IUCV_CONNECTED) {
747                 /* initialize defaults */
748                 cmsg_done   = 0;        /* check for duplicate headers */
749                 txmsg.class = 0;
750
751                 /* iterate over control messages */
752                 for (cmsg = CMSG_FIRSTHDR(msg); cmsg;
753                      cmsg = CMSG_NXTHDR(msg, cmsg)) {
754
755                         if (!CMSG_OK(msg, cmsg)) {
756                                 err = -EINVAL;
757                                 goto out;
758                         }
759
760                         if (cmsg->cmsg_level != SOL_IUCV)
761                                 continue;
762
763                         if (cmsg->cmsg_type & cmsg_done) {
764                                 err = -EINVAL;
765                                 goto out;
766                         }
767                         cmsg_done |= cmsg->cmsg_type;
768
769                         switch (cmsg->cmsg_type) {
770                         case SCM_IUCV_TRGCLS:
771                                 if (cmsg->cmsg_len != CMSG_LEN(TRGCLS_SIZE)) {
772                                         err = -EINVAL;
773                                         goto out;
774                                 }
775
776                                 /* set iucv message target class */
777                                 memcpy(&txmsg.class,
778                                         (void *) CMSG_DATA(cmsg), TRGCLS_SIZE);
779
780                                 break;
781
782                         default:
783                                 err = -EINVAL;
784                                 goto out;
785                                 break;
786                         }
787                 }
788
789                 /* allocate one skb for each iucv message:
790                  * this is fine for SOCK_SEQPACKET (unless we want to support
791                  * segmented records using the MSG_EOR flag), but
792                  * for SOCK_STREAM we might want to improve it in future */
793                 if (!(skb = sock_alloc_send_skb(sk, len,
794                                                 msg->msg_flags & MSG_DONTWAIT,
795                                                 &err)))
796                         goto out;
797
798                 if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
799                         err = -EFAULT;
800                         goto fail;
801                 }
802
803                 /* increment and save iucv message tag for msg_completion cbk */
804                 txmsg.tag = iucv->send_tag++;
805                 memcpy(CB_TAG(skb), &txmsg.tag, CB_TAG_LEN);
806                 skb_queue_tail(&iucv->send_skb_q, skb);
807
808                 if (((iucv->path->flags & IUCV_IPRMDATA) & iucv->flags)
809                     && skb->len <= 7) {
810                         err = iucv_send_iprm(iucv->path, &txmsg, skb);
811
812                         /* on success: there is no message_complete callback
813                          * for an IPRMDATA msg; remove skb from send queue */
814                         if (err == 0) {
815                                 skb_unlink(skb, &iucv->send_skb_q);
816                                 kfree_skb(skb);
817                         }
818
819                         /* this error should never happen since the
820                          * IUCV_IPRMDATA path flag is set... sever path */
821                         if (err == 0x15) {
822                                 iucv_path_sever(iucv->path, NULL);
823                                 skb_unlink(skb, &iucv->send_skb_q);
824                                 err = -EPIPE;
825                                 goto fail;
826                         }
827                 } else
828                         err = iucv_message_send(iucv->path, &txmsg, 0, 0,
829                                                 (void *) skb->data, skb->len);
830                 if (err) {
831                         if (err == 3) {
832                                 user_id[8] = 0;
833                                 memcpy(user_id, iucv->dst_user_id, 8);
834                                 appl_id[8] = 0;
835                                 memcpy(appl_id, iucv->dst_name, 8);
836                                 pr_err("Application %s on z/VM guest %s"
837                                        " exceeds message limit\n",
838                                        user_id, appl_id);
839                         }
840                         skb_unlink(skb, &iucv->send_skb_q);
841                         err = -EPIPE;
842                         goto fail;
843                 }
844
845         } else {
846                 err = -ENOTCONN;
847                 goto out;
848         }
849
850         release_sock(sk);
851         return len;
852
853 fail:
854         kfree_skb(skb);
855 out:
856         release_sock(sk);
857         return err;
858 }
859
860 static int iucv_fragment_skb(struct sock *sk, struct sk_buff *skb, int len)
861 {
862         int dataleft, size, copied = 0;
863         struct sk_buff *nskb;
864
865         dataleft = len;
866         while (dataleft) {
867                 if (dataleft >= sk->sk_rcvbuf / 4)
868                         size = sk->sk_rcvbuf / 4;
869                 else
870                         size = dataleft;
871
872                 nskb = alloc_skb(size, GFP_ATOMIC | GFP_DMA);
873                 if (!nskb)
874                         return -ENOMEM;
875
876                 /* copy target class to control buffer of new skb */
877                 memcpy(CB_TRGCLS(nskb), CB_TRGCLS(skb), CB_TRGCLS_LEN);
878
879                 /* copy data fragment */
880                 memcpy(nskb->data, skb->data + copied, size);
881                 copied += size;
882                 dataleft -= size;
883
884                 skb_reset_transport_header(nskb);
885                 skb_reset_network_header(nskb);
886                 nskb->len = size;
887
888                 skb_queue_tail(&iucv_sk(sk)->backlog_skb_q, nskb);
889         }
890
891         return 0;
892 }
893
894 static void iucv_process_message(struct sock *sk, struct sk_buff *skb,
895                                  struct iucv_path *path,
896                                  struct iucv_message *msg)
897 {
898         int rc;
899         unsigned int len;
900
901         len = iucv_msg_length(msg);
902
903         /* store msg target class in the second 4 bytes of skb ctrl buffer */
904         /* Note: the first 4 bytes are reserved for msg tag */
905         memcpy(CB_TRGCLS(skb), &msg->class, CB_TRGCLS_LEN);
906
907         /* check for special IPRM messages (e.g. iucv_sock_shutdown) */
908         if ((msg->flags & IUCV_IPRMDATA) && len > 7) {
909                 if (memcmp(msg->rmmsg, iprm_shutdown, 8) == 0) {
910                         skb->data = NULL;
911                         skb->len = 0;
912                 }
913         } else {
914                 rc = iucv_message_receive(path, msg, msg->flags & IUCV_IPRMDATA,
915                                           skb->data, len, NULL);
916                 if (rc) {
917                         kfree_skb(skb);
918                         return;
919                 }
920                 /* we need to fragment iucv messages for SOCK_STREAM only;
921                  * for SOCK_SEQPACKET, it is only relevant if we support
922                  * record segmentation using MSG_EOR (see also recvmsg()) */
923                 if (sk->sk_type == SOCK_STREAM &&
924                     skb->truesize >= sk->sk_rcvbuf / 4) {
925                         rc = iucv_fragment_skb(sk, skb, len);
926                         kfree_skb(skb);
927                         skb = NULL;
928                         if (rc) {
929                                 iucv_path_sever(path, NULL);
930                                 return;
931                         }
932                         skb = skb_dequeue(&iucv_sk(sk)->backlog_skb_q);
933                 } else {
934                         skb_reset_transport_header(skb);
935                         skb_reset_network_header(skb);
936                         skb->len = len;
937                 }
938         }
939
940         if (sock_queue_rcv_skb(sk, skb))
941                 skb_queue_head(&iucv_sk(sk)->backlog_skb_q, skb);
942 }
943
944 static void iucv_process_message_q(struct sock *sk)
945 {
946         struct iucv_sock *iucv = iucv_sk(sk);
947         struct sk_buff *skb;
948         struct sock_msg_q *p, *n;
949
950         list_for_each_entry_safe(p, n, &iucv->message_q.list, list) {
951                 skb = alloc_skb(iucv_msg_length(&p->msg), GFP_ATOMIC | GFP_DMA);
952                 if (!skb)
953                         break;
954                 iucv_process_message(sk, skb, p->path, &p->msg);
955                 list_del(&p->list);
956                 kfree(p);
957                 if (!skb_queue_empty(&iucv->backlog_skb_q))
958                         break;
959         }
960 }
961
962 static int iucv_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
963                              struct msghdr *msg, size_t len, int flags)
964 {
965         int noblock = flags & MSG_DONTWAIT;
966         struct sock *sk = sock->sk;
967         struct iucv_sock *iucv = iucv_sk(sk);
968         int target;
969         unsigned int copied, rlen;
970         struct sk_buff *skb, *rskb, *cskb;
971         int err = 0;
972
973         if ((sk->sk_state == IUCV_DISCONN || sk->sk_state == IUCV_SEVERED) &&
974             skb_queue_empty(&iucv->backlog_skb_q) &&
975             skb_queue_empty(&sk->sk_receive_queue) &&
976             list_empty(&iucv->message_q.list))
977                 return 0;
978
979         if (flags & (MSG_OOB))
980                 return -EOPNOTSUPP;
981
982         target = sock_rcvlowat(sk, flags & MSG_WAITALL, len);
983
984         skb = skb_recv_datagram(sk, flags, noblock, &err);
985         if (!skb) {
986                 if (sk->sk_shutdown & RCV_SHUTDOWN)
987                         return 0;
988                 return err;
989         }
990
991         rlen   = skb->len;              /* real length of skb */
992         copied = min_t(unsigned int, rlen, len);
993
994         cskb = skb;
995         if (memcpy_toiovec(msg->msg_iov, cskb->data, copied)) {
996                 skb_queue_head(&sk->sk_receive_queue, skb);
997                 if (copied == 0)
998                         return -EFAULT;
999                 goto done;
1000         }
1001
1002         /* SOCK_SEQPACKET: set MSG_TRUNC if recv buf size is too small */
1003         if (sk->sk_type == SOCK_SEQPACKET) {
1004                 if (copied < rlen)
1005                         msg->msg_flags |= MSG_TRUNC;
1006                 /* each iucv message contains a complete record */
1007                 msg->msg_flags |= MSG_EOR;
1008         }
1009
1010         /* create control message to store iucv msg target class:
1011          * get the trgcls from the control buffer of the skb due to
1012          * fragmentation of original iucv message. */
1013         err = put_cmsg(msg, SOL_IUCV, SCM_IUCV_TRGCLS,
1014                         CB_TRGCLS_LEN, CB_TRGCLS(skb));
1015         if (err) {
1016                 if (!(flags & MSG_PEEK))
1017                         skb_queue_head(&sk->sk_receive_queue, skb);
1018                 return err;
1019         }
1020
1021         /* Mark read part of skb as used */
1022         if (!(flags & MSG_PEEK)) {
1023
1024                 /* SOCK_STREAM: re-queue skb if it contains unreceived data */
1025                 if (sk->sk_type == SOCK_STREAM) {
1026                         skb_pull(skb, copied);
1027                         if (skb->len) {
1028                                 skb_queue_head(&sk->sk_receive_queue, skb);
1029                                 goto done;
1030                         }
1031                 }
1032
1033                 kfree_skb(skb);
1034
1035                 /* Queue backlog skbs */
1036                 rskb = skb_dequeue(&iucv->backlog_skb_q);
1037                 while (rskb) {
1038                         if (sock_queue_rcv_skb(sk, rskb)) {
1039                                 skb_queue_head(&iucv->backlog_skb_q,
1040                                                 rskb);
1041                                 break;
1042                         } else {
1043                                 rskb = skb_dequeue(&iucv->backlog_skb_q);
1044                         }
1045                 }
1046                 if (skb_queue_empty(&iucv->backlog_skb_q)) {
1047                         spin_lock_bh(&iucv->message_q.lock);
1048                         if (!list_empty(&iucv->message_q.list))
1049                                 iucv_process_message_q(sk);
1050                         spin_unlock_bh(&iucv->message_q.lock);
1051                 }
1052
1053         } else
1054                 skb_queue_head(&sk->sk_receive_queue, skb);
1055
1056 done:
1057         /* SOCK_SEQPACKET: return real length if MSG_TRUNC is set */
1058         if (sk->sk_type == SOCK_SEQPACKET && (flags & MSG_TRUNC))
1059                 copied = rlen;
1060
1061         return copied;
1062 }
1063
1064 static inline unsigned int iucv_accept_poll(struct sock *parent)
1065 {
1066         struct iucv_sock *isk, *n;
1067         struct sock *sk;
1068
1069         list_for_each_entry_safe(isk, n, &iucv_sk(parent)->accept_q, accept_q) {
1070                 sk = (struct sock *) isk;
1071
1072                 if (sk->sk_state == IUCV_CONNECTED)
1073                         return POLLIN | POLLRDNORM;
1074         }
1075
1076         return 0;
1077 }
1078
1079 unsigned int iucv_sock_poll(struct file *file, struct socket *sock,
1080                             poll_table *wait)
1081 {
1082         struct sock *sk = sock->sk;
1083         unsigned int mask = 0;
1084
1085         poll_wait(file, sk->sk_sleep, wait);
1086
1087         if (sk->sk_state == IUCV_LISTEN)
1088                 return iucv_accept_poll(sk);
1089
1090         if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))
1091                 mask |= POLLERR;
1092
1093         if (sk->sk_shutdown & RCV_SHUTDOWN)
1094                 mask |= POLLRDHUP;
1095
1096         if (sk->sk_shutdown == SHUTDOWN_MASK)
1097                 mask |= POLLHUP;
1098
1099         if (!skb_queue_empty(&sk->sk_receive_queue) ||
1100             (sk->sk_shutdown & RCV_SHUTDOWN))
1101                 mask |= POLLIN | POLLRDNORM;
1102
1103         if (sk->sk_state == IUCV_CLOSED)
1104                 mask |= POLLHUP;
1105
1106         if (sk->sk_state == IUCV_DISCONN || sk->sk_state == IUCV_SEVERED)
1107                 mask |= POLLIN;
1108
1109         if (sock_writeable(sk))
1110                 mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
1111         else
1112                 set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
1113
1114         return mask;
1115 }
1116
1117 static int iucv_sock_shutdown(struct socket *sock, int how)
1118 {
1119         struct sock *sk = sock->sk;
1120         struct iucv_sock *iucv = iucv_sk(sk);
1121         struct iucv_message txmsg;
1122         int err = 0;
1123
1124         how++;
1125
1126         if ((how & ~SHUTDOWN_MASK) || !how)
1127                 return -EINVAL;
1128
1129         lock_sock(sk);
1130         switch (sk->sk_state) {
1131         case IUCV_CLOSED:
1132                 err = -ENOTCONN;
1133                 goto fail;
1134
1135         default:
1136                 sk->sk_shutdown |= how;
1137                 break;
1138         }
1139
1140         if (how == SEND_SHUTDOWN || how == SHUTDOWN_MASK) {
1141                 txmsg.class = 0;
1142                 txmsg.tag = 0;
1143                 err = iucv_message_send(iucv->path, &txmsg, IUCV_IPRMDATA, 0,
1144                                         (void *) iprm_shutdown, 8);
1145                 if (err) {
1146                         switch (err) {
1147                         case 1:
1148                                 err = -ENOTCONN;
1149                                 break;
1150                         case 2:
1151                                 err = -ECONNRESET;
1152                                 break;
1153                         default:
1154                                 err = -ENOTCONN;
1155                                 break;
1156                         }
1157                 }
1158         }
1159
1160         if (how == RCV_SHUTDOWN || how == SHUTDOWN_MASK) {
1161                 err = iucv_path_quiesce(iucv_sk(sk)->path, NULL);
1162                 if (err)
1163                         err = -ENOTCONN;
1164
1165                 skb_queue_purge(&sk->sk_receive_queue);
1166         }
1167
1168         /* Wake up anyone sleeping in poll */
1169         sk->sk_state_change(sk);
1170
1171 fail:
1172         release_sock(sk);
1173         return err;
1174 }
1175
1176 static int iucv_sock_release(struct socket *sock)
1177 {
1178         struct sock *sk = sock->sk;
1179         int err = 0;
1180
1181         if (!sk)
1182                 return 0;
1183
1184         iucv_sock_close(sk);
1185
1186         /* Unregister with IUCV base support */
1187         if (iucv_sk(sk)->path) {
1188                 iucv_path_sever(iucv_sk(sk)->path, NULL);
1189                 iucv_path_free(iucv_sk(sk)->path);
1190                 iucv_sk(sk)->path = NULL;
1191         }
1192
1193         sock_orphan(sk);
1194         iucv_sock_kill(sk);
1195         return err;
1196 }
1197
1198 /* getsockopt and setsockopt */
1199 static int iucv_sock_setsockopt(struct socket *sock, int level, int optname,
1200                                 char __user *optval, int optlen)
1201 {
1202         struct sock *sk = sock->sk;
1203         struct iucv_sock *iucv = iucv_sk(sk);
1204         int val;
1205         int rc;
1206
1207         if (level != SOL_IUCV)
1208                 return -ENOPROTOOPT;
1209
1210         if (optlen < sizeof(int))
1211                 return -EINVAL;
1212
1213         if (get_user(val, (int __user *) optval))
1214                 return -EFAULT;
1215
1216         rc = 0;
1217
1218         lock_sock(sk);
1219         switch (optname) {
1220         case SO_IPRMDATA_MSG:
1221                 if (val)
1222                         iucv->flags |= IUCV_IPRMDATA;
1223                 else
1224                         iucv->flags &= ~IUCV_IPRMDATA;
1225                 break;
1226         default:
1227                 rc = -ENOPROTOOPT;
1228                 break;
1229         }
1230         release_sock(sk);
1231
1232         return rc;
1233 }
1234
1235 static int iucv_sock_getsockopt(struct socket *sock, int level, int optname,
1236                                 char __user *optval, int __user *optlen)
1237 {
1238         struct sock *sk = sock->sk;
1239         struct iucv_sock *iucv = iucv_sk(sk);
1240         int val, len;
1241
1242         if (level != SOL_IUCV)
1243                 return -ENOPROTOOPT;
1244
1245         if (get_user(len, optlen))
1246                 return -EFAULT;
1247
1248         if (len < 0)
1249                 return -EINVAL;
1250
1251         len = min_t(unsigned int, len, sizeof(int));
1252
1253         switch (optname) {
1254         case SO_IPRMDATA_MSG:
1255                 val = (iucv->flags & IUCV_IPRMDATA) ? 1 : 0;
1256                 break;
1257         default:
1258                 return -ENOPROTOOPT;
1259         }
1260
1261         if (put_user(len, optlen))
1262                 return -EFAULT;
1263         if (copy_to_user(optval, &val, len))
1264                 return -EFAULT;
1265
1266         return 0;
1267 }
1268
1269
1270 /* Callback wrappers - called from iucv base support */
1271 static int iucv_callback_connreq(struct iucv_path *path,
1272                                  u8 ipvmid[8], u8 ipuser[16])
1273 {
1274         unsigned char user_data[16];
1275         unsigned char nuser_data[16];
1276         unsigned char src_name[8];
1277         struct hlist_node *node;
1278         struct sock *sk, *nsk;
1279         struct iucv_sock *iucv, *niucv;
1280         int err;
1281
1282         memcpy(src_name, ipuser, 8);
1283         EBCASC(src_name, 8);
1284         /* Find out if this path belongs to af_iucv. */
1285         read_lock(&iucv_sk_list.lock);
1286         iucv = NULL;
1287         sk = NULL;
1288         sk_for_each(sk, node, &iucv_sk_list.head)
1289                 if (sk->sk_state == IUCV_LISTEN &&
1290                     !memcmp(&iucv_sk(sk)->src_name, src_name, 8)) {
1291                         /*
1292                          * Found a listening socket with
1293                          * src_name == ipuser[0-7].
1294                          */
1295                         iucv = iucv_sk(sk);
1296                         break;
1297                 }
1298         read_unlock(&iucv_sk_list.lock);
1299         if (!iucv)
1300                 /* No socket found, not one of our paths. */
1301                 return -EINVAL;
1302
1303         bh_lock_sock(sk);
1304
1305         /* Check if parent socket is listening */
1306         low_nmcpy(user_data, iucv->src_name);
1307         high_nmcpy(user_data, iucv->dst_name);
1308         ASCEBC(user_data, sizeof(user_data));
1309         if (sk->sk_state != IUCV_LISTEN) {
1310                 err = iucv_path_sever(path, user_data);
1311                 iucv_path_free(path);
1312                 goto fail;
1313         }
1314
1315         /* Check for backlog size */
1316         if (sk_acceptq_is_full(sk)) {
1317                 err = iucv_path_sever(path, user_data);
1318                 iucv_path_free(path);
1319                 goto fail;
1320         }
1321
1322         /* Create the new socket */
1323         nsk = iucv_sock_alloc(NULL, sk->sk_type, GFP_ATOMIC);
1324         if (!nsk) {
1325                 err = iucv_path_sever(path, user_data);
1326                 iucv_path_free(path);
1327                 goto fail;
1328         }
1329
1330         niucv = iucv_sk(nsk);
1331         iucv_sock_init(nsk, sk);
1332
1333         /* Set the new iucv_sock */
1334         memcpy(niucv->dst_name, ipuser + 8, 8);
1335         EBCASC(niucv->dst_name, 8);
1336         memcpy(niucv->dst_user_id, ipvmid, 8);
1337         memcpy(niucv->src_name, iucv->src_name, 8);
1338         memcpy(niucv->src_user_id, iucv->src_user_id, 8);
1339         niucv->path = path;
1340
1341         /* Call iucv_accept */
1342         high_nmcpy(nuser_data, ipuser + 8);
1343         memcpy(nuser_data + 8, niucv->src_name, 8);
1344         ASCEBC(nuser_data + 8, 8);
1345
1346         path->msglim = IUCV_QUEUELEN_DEFAULT;
1347         err = iucv_path_accept(path, &af_iucv_handler, nuser_data, nsk);
1348         if (err) {
1349                 err = iucv_path_sever(path, user_data);
1350                 iucv_path_free(path);
1351                 iucv_sock_kill(nsk);
1352                 goto fail;
1353         }
1354
1355         iucv_accept_enqueue(sk, nsk);
1356
1357         /* Wake up accept */
1358         nsk->sk_state = IUCV_CONNECTED;
1359         sk->sk_data_ready(sk, 1);
1360         err = 0;
1361 fail:
1362         bh_unlock_sock(sk);
1363         return 0;
1364 }
1365
1366 static void iucv_callback_connack(struct iucv_path *path, u8 ipuser[16])
1367 {
1368         struct sock *sk = path->private;
1369
1370         sk->sk_state = IUCV_CONNECTED;
1371         sk->sk_state_change(sk);
1372 }
1373
1374 static void iucv_callback_rx(struct iucv_path *path, struct iucv_message *msg)
1375 {
1376         struct sock *sk = path->private;
1377         struct iucv_sock *iucv = iucv_sk(sk);
1378         struct sk_buff *skb;
1379         struct sock_msg_q *save_msg;
1380         int len;
1381
1382         if (sk->sk_shutdown & RCV_SHUTDOWN)
1383                 return;
1384
1385         if (!list_empty(&iucv->message_q.list) ||
1386             !skb_queue_empty(&iucv->backlog_skb_q))
1387                 goto save_message;
1388
1389         len = atomic_read(&sk->sk_rmem_alloc);
1390         len += iucv_msg_length(msg) + sizeof(struct sk_buff);
1391         if (len > sk->sk_rcvbuf)
1392                 goto save_message;
1393
1394         skb = alloc_skb(iucv_msg_length(msg), GFP_ATOMIC | GFP_DMA);
1395         if (!skb)
1396                 goto save_message;
1397
1398         spin_lock(&iucv->message_q.lock);
1399         iucv_process_message(sk, skb, path, msg);
1400         spin_unlock(&iucv->message_q.lock);
1401
1402         return;
1403
1404 save_message:
1405         save_msg = kzalloc(sizeof(struct sock_msg_q), GFP_ATOMIC | GFP_DMA);
1406         if (!save_msg)
1407                 return;
1408         save_msg->path = path;
1409         save_msg->msg = *msg;
1410
1411         spin_lock(&iucv->message_q.lock);
1412         list_add_tail(&save_msg->list, &iucv->message_q.list);
1413         spin_unlock(&iucv->message_q.lock);
1414 }
1415
1416 static void iucv_callback_txdone(struct iucv_path *path,
1417                                  struct iucv_message *msg)
1418 {
1419         struct sock *sk = path->private;
1420         struct sk_buff *this = NULL;
1421         struct sk_buff_head *list = &iucv_sk(sk)->send_skb_q;
1422         struct sk_buff *list_skb = list->next;
1423         unsigned long flags;
1424
1425         if (!skb_queue_empty(list)) {
1426                 spin_lock_irqsave(&list->lock, flags);
1427
1428                 while (list_skb != (struct sk_buff *)list) {
1429                         if (!memcmp(&msg->tag, CB_TAG(list_skb), CB_TAG_LEN)) {
1430                                 this = list_skb;
1431                                 break;
1432                         }
1433                         list_skb = list_skb->next;
1434                 }
1435                 if (this)
1436                         __skb_unlink(this, list);
1437
1438                 spin_unlock_irqrestore(&list->lock, flags);
1439
1440                 kfree_skb(this);
1441         }
1442         BUG_ON(!this);
1443
1444         if (sk->sk_state == IUCV_CLOSING) {
1445                 if (skb_queue_empty(&iucv_sk(sk)->send_skb_q)) {
1446                         sk->sk_state = IUCV_CLOSED;
1447                         sk->sk_state_change(sk);
1448                 }
1449         }
1450
1451 }
1452
1453 static void iucv_callback_connrej(struct iucv_path *path, u8 ipuser[16])
1454 {
1455         struct sock *sk = path->private;
1456
1457         if (!list_empty(&iucv_sk(sk)->accept_q))
1458                 sk->sk_state = IUCV_SEVERED;
1459         else
1460                 sk->sk_state = IUCV_DISCONN;
1461
1462         sk->sk_state_change(sk);
1463 }
1464
1465 /* called if the other communication side shuts down its RECV direction;
1466  * in turn, the callback sets SEND_SHUTDOWN to disable sending of data.
1467  */
1468 static void iucv_callback_shutdown(struct iucv_path *path, u8 ipuser[16])
1469 {
1470         struct sock *sk = path->private;
1471
1472         bh_lock_sock(sk);
1473         if (sk->sk_state != IUCV_CLOSED) {
1474                 sk->sk_shutdown |= SEND_SHUTDOWN;
1475                 sk->sk_state_change(sk);
1476         }
1477         bh_unlock_sock(sk);
1478 }
1479
1480 static struct proto_ops iucv_sock_ops = {
1481         .family         = PF_IUCV,
1482         .owner          = THIS_MODULE,
1483         .release        = iucv_sock_release,
1484         .bind           = iucv_sock_bind,
1485         .connect        = iucv_sock_connect,
1486         .listen         = iucv_sock_listen,
1487         .accept         = iucv_sock_accept,
1488         .getname        = iucv_sock_getname,
1489         .sendmsg        = iucv_sock_sendmsg,
1490         .recvmsg        = iucv_sock_recvmsg,
1491         .poll           = iucv_sock_poll,
1492         .ioctl          = sock_no_ioctl,
1493         .mmap           = sock_no_mmap,
1494         .socketpair     = sock_no_socketpair,
1495         .shutdown       = iucv_sock_shutdown,
1496         .setsockopt     = iucv_sock_setsockopt,
1497         .getsockopt     = iucv_sock_getsockopt,
1498 };
1499
1500 static struct net_proto_family iucv_sock_family_ops = {
1501         .family = AF_IUCV,
1502         .owner  = THIS_MODULE,
1503         .create = iucv_sock_create,
1504 };
1505
1506 static int __init afiucv_init(void)
1507 {
1508         int err;
1509
1510         if (!MACHINE_IS_VM) {
1511                 pr_err("The af_iucv module cannot be loaded"
1512                        " without z/VM\n");
1513                 err = -EPROTONOSUPPORT;
1514                 goto out;
1515         }
1516         cpcmd("QUERY USERID", iucv_userid, sizeof(iucv_userid), &err);
1517         if (unlikely(err)) {
1518                 WARN_ON(err);
1519                 err = -EPROTONOSUPPORT;
1520                 goto out;
1521         }
1522
1523         err = iucv_register(&af_iucv_handler, 0);
1524         if (err)
1525                 goto out;
1526         err = proto_register(&iucv_proto, 0);
1527         if (err)
1528                 goto out_iucv;
1529         err = sock_register(&iucv_sock_family_ops);
1530         if (err)
1531                 goto out_proto;
1532         return 0;
1533
1534 out_proto:
1535         proto_unregister(&iucv_proto);
1536 out_iucv:
1537         iucv_unregister(&af_iucv_handler, 0);
1538 out:
1539         return err;
1540 }
1541
1542 static void __exit afiucv_exit(void)
1543 {
1544         sock_unregister(PF_IUCV);
1545         proto_unregister(&iucv_proto);
1546         iucv_unregister(&af_iucv_handler, 0);
1547 }
1548
1549 module_init(afiucv_init);
1550 module_exit(afiucv_exit);
1551
1552 MODULE_AUTHOR("Jennifer Hunt <jenhunt@us.ibm.com>");
1553 MODULE_DESCRIPTION("IUCV Sockets ver " VERSION);
1554 MODULE_VERSION(VERSION);
1555 MODULE_LICENSE("GPL");
1556 MODULE_ALIAS_NETPROTO(PF_IUCV);