struct sock *sk = sock->sk;
        struct irda_sock *self;
        struct sk_buff *skb;
-       unsigned char *asmptr;
        int err;
 
        IRDA_DEBUG(4, "%s(), len=%zd\n", __FUNCTION__, len);
                return -ENOBUFS;
 
        skb_reserve(skb, self->max_header_size + 16);
-
-       asmptr = skb->h.raw = skb_put(skb, len);
-       err = memcpy_fromiovec(asmptr, msg->msg_iov, len);
+       skb_reset_transport_header(skb);
+       skb_put(skb, len);
+       err = memcpy_fromiovec(skb_transport_header(skb), msg->msg_iov, len);
        if (err) {
                kfree_skb(skb);
                return err;
        struct sock *sk = sock->sk;
        struct irda_sock *self;
        struct sk_buff *skb;
-       unsigned char *asmptr;
        int err;
 
        IRDA_DEBUG(4, "%s(), len=%zd\n", __FUNCTION__, len);
                return -ENOBUFS;
 
        skb_reserve(skb, self->max_header_size);
+       skb_reset_transport_header(skb);
 
        IRDA_DEBUG(4, "%s(), appending user data\n", __FUNCTION__);
-       asmptr = skb->h.raw = skb_put(skb, len);
-       err = memcpy_fromiovec(asmptr, msg->msg_iov, len);
+       skb_put(skb, len);
+       err = memcpy_fromiovec(skb_transport_header(skb), msg->msg_iov, len);
        if (err) {
                kfree_skb(skb);
                return err;
        __u8 pid = 0;
        int bound = 0;
        struct sk_buff *skb;
-       unsigned char *asmptr;
        int err;
 
        IRDA_DEBUG(4, "%s(), len=%zd\n", __FUNCTION__, len);
                return -ENOBUFS;
 
        skb_reserve(skb, self->max_header_size);
+       skb_reset_transport_header(skb);
 
        IRDA_DEBUG(4, "%s(), appending user data\n", __FUNCTION__);
-       asmptr = skb->h.raw = skb_put(skb, len);
-       err = memcpy_fromiovec(asmptr, msg->msg_iov, len);
+       skb_put(skb, len);
+       err = memcpy_fromiovec(skb_transport_header(skb), msg->msg_iov, len);
        if (err) {
                kfree_skb(skb);
                return err;
 
                goto out;
 
        skb_reserve(skb, size - len);
+       skb_reset_transport_header(skb);
 
        /*
         *      Push down the NET/ROM header
        /*
         *      Put the data on the end
         */
+       skb_put(skb, len);
 
-       skb->h.raw = skb_put(skb, len);
-
-       asmptr = skb->h.raw;
        SOCK_DEBUG(sk, "NET/ROM: Appending user data\n");
 
        /* User data follows immediately after the NET/ROM transport header */
-       if (memcpy_fromiovec(asmptr, msg->msg_iov, len)) {
+       if (memcpy_fromiovec(skb_transport_header(skb), msg->msg_iov, len)) {
                kfree_skb(skb);
                err = -EFAULT;
                goto out;
 
         */
        SOCK_DEBUG(sk, "ROSE: Appending user data\n");
 
-       asmptr = skb->h.raw = skb_put(skb, len);
+       skb_reset_transport_header(skb);
+       skb_put(skb, len);
 
-       err = memcpy_fromiovec(asmptr, msg->msg_iov, len);
+       err = memcpy_fromiovec(skb_transport_header(skb), msg->msg_iov, len);
        if (err) {
                kfree_skb(skb);
                return err;
 
         */
        SOCK_DEBUG(sk, "x25_sendmsg: Copying user data\n");
 
-       asmptr = skb->h.raw = skb_put(skb, len);
+       skb_reset_transport_header(skb);
+       skb_put(skb, len);
 
-       rc = memcpy_fromiovec(asmptr, msg->msg_iov, len);
+       rc = memcpy_fromiovec(skb_transport_header(skb), msg->msg_iov, len);
        if (rc)
                goto out_kfree_skb;