]> Pileus Git - ~andy/linux/blob - net/core/datagram.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[~andy/linux] / net / core / datagram.c
1 /*
2  *      SUCS NET3:
3  *
4  *      Generic datagram handling routines. These are generic for all
5  *      protocols. Possibly a generic IP version on top of these would
6  *      make sense. Not tonight however 8-).
7  *      This is used because UDP, RAW, PACKET, DDP, IPX, AX.25 and
8  *      NetROM layer all have identical poll code and mostly
9  *      identical recvmsg() code. So we share it here. The poll was
10  *      shared before but buried in udp.c so I moved it.
11  *
12  *      Authors:        Alan Cox <alan@lxorguk.ukuu.org.uk>. (datagram_poll() from old
13  *                                                   udp.c code)
14  *
15  *      Fixes:
16  *              Alan Cox        :       NULL return from skb_peek_copy()
17  *                                      understood
18  *              Alan Cox        :       Rewrote skb_read_datagram to avoid the
19  *                                      skb_peek_copy stuff.
20  *              Alan Cox        :       Added support for SOCK_SEQPACKET.
21  *                                      IPX can no longer use the SO_TYPE hack
22  *                                      but AX.25 now works right, and SPX is
23  *                                      feasible.
24  *              Alan Cox        :       Fixed write poll of non IP protocol
25  *                                      crash.
26  *              Florian  La Roche:      Changed for my new skbuff handling.
27  *              Darryl Miles    :       Fixed non-blocking SOCK_SEQPACKET.
28  *              Linus Torvalds  :       BSD semantic fixes.
29  *              Alan Cox        :       Datagram iovec handling
30  *              Darryl Miles    :       Fixed non-blocking SOCK_STREAM.
31  *              Alan Cox        :       POSIXisms
32  *              Pete Wyckoff    :       Unconnected accept() fix.
33  *
34  */
35
36 #include <linux/module.h>
37 #include <linux/types.h>
38 #include <linux/kernel.h>
39 #include <asm/uaccess.h>
40 #include <linux/mm.h>
41 #include <linux/interrupt.h>
42 #include <linux/errno.h>
43 #include <linux/sched.h>
44 #include <linux/inet.h>
45 #include <linux/netdevice.h>
46 #include <linux/rtnetlink.h>
47 #include <linux/poll.h>
48 #include <linux/highmem.h>
49 #include <linux/spinlock.h>
50 #include <linux/slab.h>
51
52 #include <net/protocol.h>
53 #include <linux/skbuff.h>
54
55 #include <net/checksum.h>
56 #include <net/sock.h>
57 #include <net/tcp_states.h>
58 #include <trace/events/skb.h>
59 #include <net/ll_poll.h>
60
61 /*
62  *      Is a socket 'connection oriented' ?
63  */
64 static inline int connection_based(struct sock *sk)
65 {
66         return sk->sk_type == SOCK_SEQPACKET || sk->sk_type == SOCK_STREAM;
67 }
68
69 static int receiver_wake_function(wait_queue_t *wait, unsigned int mode, int sync,
70                                   void *key)
71 {
72         unsigned long bits = (unsigned long)key;
73
74         /*
75          * Avoid a wakeup if event not interesting for us
76          */
77         if (bits && !(bits & (POLLIN | POLLERR)))
78                 return 0;
79         return autoremove_wake_function(wait, mode, sync, key);
80 }
81 /*
82  * Wait for the last received packet to be different from skb
83  */
84 static int wait_for_more_packets(struct sock *sk, int *err, long *timeo_p,
85                                  const struct sk_buff *skb)
86 {
87         int error;
88         DEFINE_WAIT_FUNC(wait, receiver_wake_function);
89
90         prepare_to_wait_exclusive(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
91
92         /* Socket errors? */
93         error = sock_error(sk);
94         if (error)
95                 goto out_err;
96
97         if (sk->sk_receive_queue.prev != skb)
98                 goto out;
99
100         /* Socket shut down? */
101         if (sk->sk_shutdown & RCV_SHUTDOWN)
102                 goto out_noerr;
103
104         /* Sequenced packets can come disconnected.
105          * If so we report the problem
106          */
107         error = -ENOTCONN;
108         if (connection_based(sk) &&
109             !(sk->sk_state == TCP_ESTABLISHED || sk->sk_state == TCP_LISTEN))
110                 goto out_err;
111
112         /* handle signals */
113         if (signal_pending(current))
114                 goto interrupted;
115
116         error = 0;
117         *timeo_p = schedule_timeout(*timeo_p);
118 out:
119         finish_wait(sk_sleep(sk), &wait);
120         return error;
121 interrupted:
122         error = sock_intr_errno(*timeo_p);
123 out_err:
124         *err = error;
125         goto out;
126 out_noerr:
127         *err = 0;
128         error = 1;
129         goto out;
130 }
131
132 /**
133  *      __skb_recv_datagram - Receive a datagram skbuff
134  *      @sk: socket
135  *      @flags: MSG_ flags
136  *      @peeked: returns non-zero if this packet has been seen before
137  *      @off: an offset in bytes to peek skb from. Returns an offset
138  *            within an skb where data actually starts
139  *      @err: error code returned
140  *
141  *      Get a datagram skbuff, understands the peeking, nonblocking wakeups
142  *      and possible races. This replaces identical code in packet, raw and
143  *      udp, as well as the IPX AX.25 and Appletalk. It also finally fixes
144  *      the long standing peek and read race for datagram sockets. If you
145  *      alter this routine remember it must be re-entrant.
146  *
147  *      This function will lock the socket if a skb is returned, so the caller
148  *      needs to unlock the socket in that case (usually by calling
149  *      skb_free_datagram)
150  *
151  *      * It does not lock socket since today. This function is
152  *      * free of race conditions. This measure should/can improve
153  *      * significantly datagram socket latencies at high loads,
154  *      * when data copying to user space takes lots of time.
155  *      * (BTW I've just killed the last cli() in IP/IPv6/core/netlink/packet
156  *      *  8) Great win.)
157  *      *                                           --ANK (980729)
158  *
159  *      The order of the tests when we find no data waiting are specified
160  *      quite explicitly by POSIX 1003.1g, don't change them without having
161  *      the standard around please.
162  */
163 struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned int flags,
164                                     int *peeked, int *off, int *err)
165 {
166         struct sk_buff *skb, *last;
167         long timeo;
168         /*
169          * Caller is allowed not to check sk->sk_err before skb_recv_datagram()
170          */
171         int error = sock_error(sk);
172
173         if (error)
174                 goto no_packet;
175
176         timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
177
178         do {
179                 /* Again only user level code calls this function, so nothing
180                  * interrupt level will suddenly eat the receive_queue.
181                  *
182                  * Look at current nfs client by the way...
183                  * However, this function was correct in any case. 8)
184                  */
185                 unsigned long cpu_flags;
186                 struct sk_buff_head *queue = &sk->sk_receive_queue;
187                 int _off = *off;
188
189                 last = (struct sk_buff *)queue;
190                 spin_lock_irqsave(&queue->lock, cpu_flags);
191                 skb_queue_walk(queue, skb) {
192                         last = skb;
193                         *peeked = skb->peeked;
194                         if (flags & MSG_PEEK) {
195                                 if (_off >= skb->len && (skb->len || _off ||
196                                                          skb->peeked)) {
197                                         _off -= skb->len;
198                                         continue;
199                                 }
200                                 skb->peeked = 1;
201                                 atomic_inc(&skb->users);
202                         } else
203                                 __skb_unlink(skb, queue);
204
205                         spin_unlock_irqrestore(&queue->lock, cpu_flags);
206                         *off = _off;
207                         return skb;
208                 }
209                 spin_unlock_irqrestore(&queue->lock, cpu_flags);
210
211                 if (sk_valid_ll(sk) && sk_poll_ll(sk, flags & MSG_DONTWAIT))
212                         continue;
213
214                 /* User doesn't want to wait */
215                 error = -EAGAIN;
216                 if (!timeo)
217                         goto no_packet;
218
219         } while (!wait_for_more_packets(sk, err, &timeo, last));
220
221         return NULL;
222
223 no_packet:
224         *err = error;
225         return NULL;
226 }
227 EXPORT_SYMBOL(__skb_recv_datagram);
228
229 struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned int flags,
230                                   int noblock, int *err)
231 {
232         int peeked, off = 0;
233
234         return __skb_recv_datagram(sk, flags | (noblock ? MSG_DONTWAIT : 0),
235                                    &peeked, &off, err);
236 }
237 EXPORT_SYMBOL(skb_recv_datagram);
238
239 void skb_free_datagram(struct sock *sk, struct sk_buff *skb)
240 {
241         consume_skb(skb);
242         sk_mem_reclaim_partial(sk);
243 }
244 EXPORT_SYMBOL(skb_free_datagram);
245
246 void skb_free_datagram_locked(struct sock *sk, struct sk_buff *skb)
247 {
248         bool slow;
249
250         if (likely(atomic_read(&skb->users) == 1))
251                 smp_rmb();
252         else if (likely(!atomic_dec_and_test(&skb->users)))
253                 return;
254
255         slow = lock_sock_fast(sk);
256         skb_orphan(skb);
257         sk_mem_reclaim_partial(sk);
258         unlock_sock_fast(sk, slow);
259
260         /* skb is now orphaned, can be freed outside of locked section */
261         __kfree_skb(skb);
262 }
263 EXPORT_SYMBOL(skb_free_datagram_locked);
264
265 /**
266  *      skb_kill_datagram - Free a datagram skbuff forcibly
267  *      @sk: socket
268  *      @skb: datagram skbuff
269  *      @flags: MSG_ flags
270  *
271  *      This function frees a datagram skbuff that was received by
272  *      skb_recv_datagram.  The flags argument must match the one
273  *      used for skb_recv_datagram.
274  *
275  *      If the MSG_PEEK flag is set, and the packet is still on the
276  *      receive queue of the socket, it will be taken off the queue
277  *      before it is freed.
278  *
279  *      This function currently only disables BH when acquiring the
280  *      sk_receive_queue lock.  Therefore it must not be used in a
281  *      context where that lock is acquired in an IRQ context.
282  *
283  *      It returns 0 if the packet was removed by us.
284  */
285
286 int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags)
287 {
288         int err = 0;
289
290         if (flags & MSG_PEEK) {
291                 err = -ENOENT;
292                 spin_lock_bh(&sk->sk_receive_queue.lock);
293                 if (skb == skb_peek(&sk->sk_receive_queue)) {
294                         __skb_unlink(skb, &sk->sk_receive_queue);
295                         atomic_dec(&skb->users);
296                         err = 0;
297                 }
298                 spin_unlock_bh(&sk->sk_receive_queue.lock);
299         }
300
301         kfree_skb(skb);
302         atomic_inc(&sk->sk_drops);
303         sk_mem_reclaim_partial(sk);
304
305         return err;
306 }
307 EXPORT_SYMBOL(skb_kill_datagram);
308
309 /**
310  *      skb_copy_datagram_iovec - Copy a datagram to an iovec.
311  *      @skb: buffer to copy
312  *      @offset: offset in the buffer to start copying from
313  *      @to: io vector to copy to
314  *      @len: amount of data to copy from buffer to iovec
315  *
316  *      Note: the iovec is modified during the copy.
317  */
318 int skb_copy_datagram_iovec(const struct sk_buff *skb, int offset,
319                             struct iovec *to, int len)
320 {
321         int start = skb_headlen(skb);
322         int i, copy = start - offset;
323         struct sk_buff *frag_iter;
324
325         trace_skb_copy_datagram_iovec(skb, len);
326
327         /* Copy header. */
328         if (copy > 0) {
329                 if (copy > len)
330                         copy = len;
331                 if (memcpy_toiovec(to, skb->data + offset, copy))
332                         goto fault;
333                 if ((len -= copy) == 0)
334                         return 0;
335                 offset += copy;
336         }
337
338         /* Copy paged appendix. Hmm... why does this look so complicated? */
339         for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
340                 int end;
341                 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
342
343                 WARN_ON(start > offset + len);
344
345                 end = start + skb_frag_size(frag);
346                 if ((copy = end - offset) > 0) {
347                         int err;
348                         u8  *vaddr;
349                         struct page *page = skb_frag_page(frag);
350
351                         if (copy > len)
352                                 copy = len;
353                         vaddr = kmap(page);
354                         err = memcpy_toiovec(to, vaddr + frag->page_offset +
355                                              offset - start, copy);
356                         kunmap(page);
357                         if (err)
358                                 goto fault;
359                         if (!(len -= copy))
360                                 return 0;
361                         offset += copy;
362                 }
363                 start = end;
364         }
365
366         skb_walk_frags(skb, frag_iter) {
367                 int end;
368
369                 WARN_ON(start > offset + len);
370
371                 end = start + frag_iter->len;
372                 if ((copy = end - offset) > 0) {
373                         if (copy > len)
374                                 copy = len;
375                         if (skb_copy_datagram_iovec(frag_iter,
376                                                     offset - start,
377                                                     to, copy))
378                                 goto fault;
379                         if ((len -= copy) == 0)
380                                 return 0;
381                         offset += copy;
382                 }
383                 start = end;
384         }
385         if (!len)
386                 return 0;
387
388 fault:
389         return -EFAULT;
390 }
391 EXPORT_SYMBOL(skb_copy_datagram_iovec);
392
393 /**
394  *      skb_copy_datagram_const_iovec - Copy a datagram to an iovec.
395  *      @skb: buffer to copy
396  *      @offset: offset in the buffer to start copying from
397  *      @to: io vector to copy to
398  *      @to_offset: offset in the io vector to start copying to
399  *      @len: amount of data to copy from buffer to iovec
400  *
401  *      Returns 0 or -EFAULT.
402  *      Note: the iovec is not modified during the copy.
403  */
404 int skb_copy_datagram_const_iovec(const struct sk_buff *skb, int offset,
405                                   const struct iovec *to, int to_offset,
406                                   int len)
407 {
408         int start = skb_headlen(skb);
409         int i, copy = start - offset;
410         struct sk_buff *frag_iter;
411
412         /* Copy header. */
413         if (copy > 0) {
414                 if (copy > len)
415                         copy = len;
416                 if (memcpy_toiovecend(to, skb->data + offset, to_offset, copy))
417                         goto fault;
418                 if ((len -= copy) == 0)
419                         return 0;
420                 offset += copy;
421                 to_offset += copy;
422         }
423
424         /* Copy paged appendix. Hmm... why does this look so complicated? */
425         for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
426                 int end;
427                 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
428
429                 WARN_ON(start > offset + len);
430
431                 end = start + skb_frag_size(frag);
432                 if ((copy = end - offset) > 0) {
433                         int err;
434                         u8  *vaddr;
435                         struct page *page = skb_frag_page(frag);
436
437                         if (copy > len)
438                                 copy = len;
439                         vaddr = kmap(page);
440                         err = memcpy_toiovecend(to, vaddr + frag->page_offset +
441                                                 offset - start, to_offset, copy);
442                         kunmap(page);
443                         if (err)
444                                 goto fault;
445                         if (!(len -= copy))
446                                 return 0;
447                         offset += copy;
448                         to_offset += copy;
449                 }
450                 start = end;
451         }
452
453         skb_walk_frags(skb, frag_iter) {
454                 int end;
455
456                 WARN_ON(start > offset + len);
457
458                 end = start + frag_iter->len;
459                 if ((copy = end - offset) > 0) {
460                         if (copy > len)
461                                 copy = len;
462                         if (skb_copy_datagram_const_iovec(frag_iter,
463                                                           offset - start,
464                                                           to, to_offset,
465                                                           copy))
466                                 goto fault;
467                         if ((len -= copy) == 0)
468                                 return 0;
469                         offset += copy;
470                         to_offset += copy;
471                 }
472                 start = end;
473         }
474         if (!len)
475                 return 0;
476
477 fault:
478         return -EFAULT;
479 }
480 EXPORT_SYMBOL(skb_copy_datagram_const_iovec);
481
482 /**
483  *      skb_copy_datagram_from_iovec - Copy a datagram from an iovec.
484  *      @skb: buffer to copy
485  *      @offset: offset in the buffer to start copying to
486  *      @from: io vector to copy to
487  *      @from_offset: offset in the io vector to start copying from
488  *      @len: amount of data to copy to buffer from iovec
489  *
490  *      Returns 0 or -EFAULT.
491  *      Note: the iovec is not modified during the copy.
492  */
493 int skb_copy_datagram_from_iovec(struct sk_buff *skb, int offset,
494                                  const struct iovec *from, int from_offset,
495                                  int len)
496 {
497         int start = skb_headlen(skb);
498         int i, copy = start - offset;
499         struct sk_buff *frag_iter;
500
501         /* Copy header. */
502         if (copy > 0) {
503                 if (copy > len)
504                         copy = len;
505                 if (memcpy_fromiovecend(skb->data + offset, from, from_offset,
506                                         copy))
507                         goto fault;
508                 if ((len -= copy) == 0)
509                         return 0;
510                 offset += copy;
511                 from_offset += copy;
512         }
513
514         /* Copy paged appendix. Hmm... why does this look so complicated? */
515         for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
516                 int end;
517                 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
518
519                 WARN_ON(start > offset + len);
520
521                 end = start + skb_frag_size(frag);
522                 if ((copy = end - offset) > 0) {
523                         int err;
524                         u8  *vaddr;
525                         struct page *page = skb_frag_page(frag);
526
527                         if (copy > len)
528                                 copy = len;
529                         vaddr = kmap(page);
530                         err = memcpy_fromiovecend(vaddr + frag->page_offset +
531                                                   offset - start,
532                                                   from, from_offset, copy);
533                         kunmap(page);
534                         if (err)
535                                 goto fault;
536
537                         if (!(len -= copy))
538                                 return 0;
539                         offset += copy;
540                         from_offset += copy;
541                 }
542                 start = end;
543         }
544
545         skb_walk_frags(skb, frag_iter) {
546                 int end;
547
548                 WARN_ON(start > offset + len);
549
550                 end = start + frag_iter->len;
551                 if ((copy = end - offset) > 0) {
552                         if (copy > len)
553                                 copy = len;
554                         if (skb_copy_datagram_from_iovec(frag_iter,
555                                                          offset - start,
556                                                          from,
557                                                          from_offset,
558                                                          copy))
559                                 goto fault;
560                         if ((len -= copy) == 0)
561                                 return 0;
562                         offset += copy;
563                         from_offset += copy;
564                 }
565                 start = end;
566         }
567         if (!len)
568                 return 0;
569
570 fault:
571         return -EFAULT;
572 }
573 EXPORT_SYMBOL(skb_copy_datagram_from_iovec);
574
575 static int skb_copy_and_csum_datagram(const struct sk_buff *skb, int offset,
576                                       u8 __user *to, int len,
577                                       __wsum *csump)
578 {
579         int start = skb_headlen(skb);
580         int i, copy = start - offset;
581         struct sk_buff *frag_iter;
582         int pos = 0;
583
584         /* Copy header. */
585         if (copy > 0) {
586                 int err = 0;
587                 if (copy > len)
588                         copy = len;
589                 *csump = csum_and_copy_to_user(skb->data + offset, to, copy,
590                                                *csump, &err);
591                 if (err)
592                         goto fault;
593                 if ((len -= copy) == 0)
594                         return 0;
595                 offset += copy;
596                 to += copy;
597                 pos = copy;
598         }
599
600         for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
601                 int end;
602                 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
603
604                 WARN_ON(start > offset + len);
605
606                 end = start + skb_frag_size(frag);
607                 if ((copy = end - offset) > 0) {
608                         __wsum csum2;
609                         int err = 0;
610                         u8  *vaddr;
611                         struct page *page = skb_frag_page(frag);
612
613                         if (copy > len)
614                                 copy = len;
615                         vaddr = kmap(page);
616                         csum2 = csum_and_copy_to_user(vaddr +
617                                                         frag->page_offset +
618                                                         offset - start,
619                                                       to, copy, 0, &err);
620                         kunmap(page);
621                         if (err)
622                                 goto fault;
623                         *csump = csum_block_add(*csump, csum2, pos);
624                         if (!(len -= copy))
625                                 return 0;
626                         offset += copy;
627                         to += copy;
628                         pos += copy;
629                 }
630                 start = end;
631         }
632
633         skb_walk_frags(skb, frag_iter) {
634                 int end;
635
636                 WARN_ON(start > offset + len);
637
638                 end = start + frag_iter->len;
639                 if ((copy = end - offset) > 0) {
640                         __wsum csum2 = 0;
641                         if (copy > len)
642                                 copy = len;
643                         if (skb_copy_and_csum_datagram(frag_iter,
644                                                        offset - start,
645                                                        to, copy,
646                                                        &csum2))
647                                 goto fault;
648                         *csump = csum_block_add(*csump, csum2, pos);
649                         if ((len -= copy) == 0)
650                                 return 0;
651                         offset += copy;
652                         to += copy;
653                         pos += copy;
654                 }
655                 start = end;
656         }
657         if (!len)
658                 return 0;
659
660 fault:
661         return -EFAULT;
662 }
663
664 __sum16 __skb_checksum_complete_head(struct sk_buff *skb, int len)
665 {
666         __sum16 sum;
667
668         sum = csum_fold(skb_checksum(skb, 0, len, skb->csum));
669         if (likely(!sum)) {
670                 if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE))
671                         netdev_rx_csum_fault(skb->dev);
672                 skb->ip_summed = CHECKSUM_UNNECESSARY;
673         }
674         return sum;
675 }
676 EXPORT_SYMBOL(__skb_checksum_complete_head);
677
678 __sum16 __skb_checksum_complete(struct sk_buff *skb)
679 {
680         return __skb_checksum_complete_head(skb, skb->len);
681 }
682 EXPORT_SYMBOL(__skb_checksum_complete);
683
684 /**
685  *      skb_copy_and_csum_datagram_iovec - Copy and checkum skb to user iovec.
686  *      @skb: skbuff
687  *      @hlen: hardware length
688  *      @iov: io vector
689  *
690  *      Caller _must_ check that skb will fit to this iovec.
691  *
692  *      Returns: 0       - success.
693  *               -EINVAL - checksum failure.
694  *               -EFAULT - fault during copy. Beware, in this case iovec
695  *                         can be modified!
696  */
697 int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb,
698                                      int hlen, struct iovec *iov)
699 {
700         __wsum csum;
701         int chunk = skb->len - hlen;
702
703         if (!chunk)
704                 return 0;
705
706         /* Skip filled elements.
707          * Pretty silly, look at memcpy_toiovec, though 8)
708          */
709         while (!iov->iov_len)
710                 iov++;
711
712         if (iov->iov_len < chunk) {
713                 if (__skb_checksum_complete(skb))
714                         goto csum_error;
715                 if (skb_copy_datagram_iovec(skb, hlen, iov, chunk))
716                         goto fault;
717         } else {
718                 csum = csum_partial(skb->data, hlen, skb->csum);
719                 if (skb_copy_and_csum_datagram(skb, hlen, iov->iov_base,
720                                                chunk, &csum))
721                         goto fault;
722                 if (csum_fold(csum))
723                         goto csum_error;
724                 if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE))
725                         netdev_rx_csum_fault(skb->dev);
726                 iov->iov_len -= chunk;
727                 iov->iov_base += chunk;
728         }
729         return 0;
730 csum_error:
731         return -EINVAL;
732 fault:
733         return -EFAULT;
734 }
735 EXPORT_SYMBOL(skb_copy_and_csum_datagram_iovec);
736
737 /**
738  *      datagram_poll - generic datagram poll
739  *      @file: file struct
740  *      @sock: socket
741  *      @wait: poll table
742  *
743  *      Datagram poll: Again totally generic. This also handles
744  *      sequenced packet sockets providing the socket receive queue
745  *      is only ever holding data ready to receive.
746  *
747  *      Note: when you _don't_ use this routine for this protocol,
748  *      and you use a different write policy from sock_writeable()
749  *      then please supply your own write_space callback.
750  */
751 unsigned int datagram_poll(struct file *file, struct socket *sock,
752                            poll_table *wait)
753 {
754         struct sock *sk = sock->sk;
755         unsigned int mask;
756
757         sock_poll_wait(file, sk_sleep(sk), wait);
758         mask = 0;
759
760         /* exceptional events? */
761         if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))
762                 mask |= POLLERR |
763                         (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? POLLPRI : 0);
764
765         if (sk->sk_shutdown & RCV_SHUTDOWN)
766                 mask |= POLLRDHUP | POLLIN | POLLRDNORM;
767         if (sk->sk_shutdown == SHUTDOWN_MASK)
768                 mask |= POLLHUP;
769
770         /* readable? */
771         if (!skb_queue_empty(&sk->sk_receive_queue))
772                 mask |= POLLIN | POLLRDNORM;
773
774         /* Connection-based need to check for termination and startup */
775         if (connection_based(sk)) {
776                 if (sk->sk_state == TCP_CLOSE)
777                         mask |= POLLHUP;
778                 /* connection hasn't started yet? */
779                 if (sk->sk_state == TCP_SYN_SENT)
780                         return mask;
781         }
782
783         /* writable? */
784         if (sock_writeable(sk))
785                 mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
786         else
787                 set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
788
789         return mask;
790 }
791 EXPORT_SYMBOL(datagram_poll);