if (c->event == XFRM_SAP_DELETED)
                hsc = 0;
 
-       if (c->event == XFRM_SAP_EXPIRED) {
-               if (c->data)
-                       hsc = 2;
-               else
-                       hsc = 1;
-       }
-
        skb = pfkey_xfrm_state2msg(x, 0, hsc);
 
        if (IS_ERR(skb))
        if (!skb)
                return -ENOBUFS;
        hdr = (struct sadb_msg *) skb_put(skb, sizeof(struct sadb_msg));
-       hdr->sadb_msg_satype = pfkey_proto2satype(c->data);
+       hdr->sadb_msg_satype = pfkey_proto2satype(c->data.proto);
        hdr->sadb_msg_seq = c->seq;
        hdr->sadb_msg_pid = c->pid;
        hdr->sadb_msg_version = PF_KEY_V2;
                return -EINVAL;
 
        xfrm_state_flush(proto);
-       c.data = proto;
+       c.data.proto = proto;
        c.seq = hdr->sadb_msg_seq;
        c.pid = hdr->sadb_msg_pid;
        c.event = XFRM_SAP_FLUSHED;
        out_hdr = (struct sadb_msg *) out_skb->data;
        out_hdr->sadb_msg_version = PF_KEY_V2;
 
-       if (c->data && c->event == XFRM_SAP_DELETED)
+       if (c->data.byid && c->event == XFRM_SAP_DELETED)
                out_hdr->sadb_msg_type = SADB_X_SPDDELETE2;
        else
                out_hdr->sadb_msg_type = event2poltype(c->event);
        c.seq = hdr->sadb_msg_seq;
        c.pid = hdr->sadb_msg_pid;
        if (hdr->sadb_msg_type == SADB_X_SPDDELETE2) {
-               c.data = 1; // to signal pfkey of SADB_X_SPDDELETE2
+               c.data.byid = 1;
                c.event = XFRM_SAP_DELETED;
                km_policy_notify(xp, pol->sadb_x_policy_dir-1, &c);
        } else {
        int hard;
        int hsc;
 
-       hard = c->data;
+       hard = c->data.hard;
        if (hard)
                hsc = 2;
        else
 
        struct xfrm_usersa_flush *p = NLMSG_DATA(nlh);
 
        xfrm_state_flush(p->proto);
-       c.data = p->proto;
+       c.data.proto = p->proto;
        c.event = XFRM_SAP_FLUSHED;
        c.seq = nlh->nlmsg_seq;
        c.pid = nlh->nlmsg_pid;
 static int xfrm_exp_state_notify(struct xfrm_state *x, struct km_event *c)
 {
        struct sk_buff *skb;
-       int hard = c ->data;
 
        /* fix to do alloc using NLM macros */
        skb = alloc_skb(sizeof(struct xfrm_user_expire) + 16, GFP_ATOMIC);
        if (skb == NULL)
                return -ENOMEM;
 
-       if (build_expire(skb, x, hard) < 0)
+       if (build_expire(skb, x, c->data.hard) < 0)
                BUG();
 
        NETLINK_CB(skb).dst_groups = XFRMGRP_EXPIRE;
        nlh->nlmsg_flags = 0;
 
        p = NLMSG_DATA(nlh);
-       p->proto = c->data;
+       p->proto = c->data.proto;
 
        nlh->nlmsg_len = skb->tail - b;
 
        if (skb == NULL)
                return -ENOMEM;
 
-       if (build_polexpire(skb, xp, dir, c->data) < 0)
+       if (build_polexpire(skb, xp, dir, c->data.hard) < 0)
                BUG();
 
        NETLINK_CB(skb).dst_groups = XFRMGRP_EXPIRE;