return timeo == MAX_SCHEDULE_TIMEOUT ? -ERESTARTSYS : -EINTR;
 }
 
+#define sock_skb_cb_check_size(size) \
+       BUILD_BUG_ON((size) > FIELD_SIZEOF(struct sk_buff, cb))
+
 void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
                           struct sk_buff *skb);
 void __sock_recv_wifi_status(struct msghdr *msg, struct sock *sk,
 
 
 static int __init bt_init(void)
 {
-       struct sk_buff *skb;
        int err;
 
-       BUILD_BUG_ON(sizeof(struct bt_skb_cb) > sizeof(skb->cb));
+       sock_skb_cb_check_size(sizeof(struct bt_skb_cb));
 
        BT_INFO("Core ver %s", VERSION);
 
 
         *  containing the interface index.
         */
 
-       BUILD_BUG_ON(sizeof(skb->cb) < sizeof(struct sockaddr_can));
+       sock_skb_cb_check_size(sizeof(struct sockaddr_can));
        addr = (struct sockaddr_can *)skb->cb;
        memset(addr, 0, sizeof(*addr));
        addr->can_family  = AF_CAN;
 
  */
 static inline unsigned int *raw_flags(struct sk_buff *skb)
 {
-       BUILD_BUG_ON(sizeof(skb->cb) <= (sizeof(struct sockaddr_can) +
-                                        sizeof(unsigned int)));
+       sock_skb_cb_check_size(sizeof(struct sockaddr_can) +
+                              sizeof(unsigned int));
 
        /* return pointer after struct sockaddr_can */
        return (unsigned int *)(&((struct sockaddr_can *)skb->cb)[1]);
         *  containing the interface index.
         */
 
-       BUILD_BUG_ON(sizeof(skb->cb) < sizeof(struct sockaddr_can));
+       sock_skb_cb_check_size(sizeof(struct sockaddr_can));
        addr = (struct sockaddr_can *)skb->cb;
        memset(addr, 0, sizeof(*addr));
        addr->can_family  = AF_CAN;
 
        struct list_head *r;
        int rc = -EINVAL;
 
-       BUILD_BUG_ON(sizeof(struct inet_skb_parm) > FIELD_SIZEOF(struct sk_buff, cb));
+       sock_skb_cb_check_size(sizeof(struct inet_skb_parm));
 
        rc = proto_register(&tcp_prot, 1);
        if (rc)
 
 
 void __init tcp_init(void)
 {
-       struct sk_buff *skb = NULL;
        unsigned long limit;
        int max_rshare, max_wshare, cnt;
        unsigned int i;
 
-       BUILD_BUG_ON(sizeof(struct tcp_skb_cb) > sizeof(skb->cb));
+       sock_skb_cb_check_size(sizeof(struct tcp_skb_cb));
 
        percpu_counter_init(&tcp_sockets_allocated, 0, GFP_KERNEL);
        percpu_counter_init(&tcp_orphan_count, 0, GFP_KERNEL);
 
        struct list_head *r;
        int err = 0;
 
-       BUILD_BUG_ON(sizeof(struct inet6_skb_parm) > FIELD_SIZEOF(struct sk_buff, cb));
+       sock_skb_cb_check_size(sizeof(struct inet6_skb_parm));
 
        /* Register the socket-side information for inet6_create.  */
        for (r = &inetsw6[0]; r < &inetsw6[SOCK_MAX]; ++r)
 
                skb = nskb;
        }
 
-       BUILD_BUG_ON(sizeof(*PACKET_SKB_CB(skb)) + MAX_ADDR_LEN - 8 >
-                    sizeof(skb->cb));
+       sock_skb_cb_check_size(sizeof(*PACKET_SKB_CB(skb)) + MAX_ADDR_LEN - 8);
 
        sll = &PACKET_SKB_CB(skb)->sa.ll;
        sll->sll_hatype = dev->type;
 
        int max_share;
        int order;
 
-       BUILD_BUG_ON(sizeof(struct sctp_ulpevent) >
-                    sizeof(((struct sk_buff *) 0)->cb));
+       sock_skb_cb_check_size(sizeof(struct sctp_ulpevent));
 
        /* Allocate bind_bucket and chunk caches. */
        status = -ENOBUFS;