struct tipc_subscription *s)
 {
        struct sub_seq *sseq = nseq->sseqs;
+       struct tipc_name_seq ns;
+
+       tipc_subscrp_convert_seq(&s->evt.s.seq, s->swap, &ns);
 
        list_add(&s->nameseq_list, &nseq->subscriptions);
 
                return;
 
        while (sseq != &nseq->sseqs[nseq->first_free]) {
-               if (tipc_subscrp_check_overlap(s, sseq->lower, sseq->upper)) {
+               if (tipc_subscrp_check_overlap(&ns, sseq->lower, sseq->upper)) {
                        struct publication *crs;
                        struct name_info *info = sseq->info;
                        int must_report = 1;
 void tipc_nametbl_subscribe(struct tipc_subscription *s)
 {
        struct tipc_net *tn = net_generic(s->net, tipc_net_id);
-       u32 type = s->seq.type;
+       u32 type = tipc_subscrp_convert_seq_type(s->evt.s.seq.type, s->swap);
        int index = hash(type);
        struct name_seq *seq;
+       struct tipc_name_seq ns;
 
        spin_lock_bh(&tn->nametbl_lock);
        seq = nametbl_find_seq(s->net, type);
                tipc_nameseq_subscribe(seq, s);
                spin_unlock_bh(&seq->lock);
        } else {
+               tipc_subscrp_convert_seq(&s->evt.s.seq, s->swap, &ns);
                pr_warn("Failed to create subscription for {%u,%u,%u}\n",
-                       s->seq.type, s->seq.lower, s->seq.upper);
+                       ns.type, ns.lower, ns.upper);
        }
        spin_unlock_bh(&tn->nametbl_lock);
 }
 {
        struct tipc_net *tn = net_generic(s->net, tipc_net_id);
        struct name_seq *seq;
+       u32 type = tipc_subscrp_convert_seq_type(s->evt.s.seq.type, s->swap);
 
        spin_lock_bh(&tn->nametbl_lock);
-       seq = nametbl_find_seq(s->net, s->seq.type);
+       seq = nametbl_find_seq(s->net, type);
        if (seq != NULL) {
                spin_lock_bh(&seq->lock);
                list_del_init(&s->nameseq_list);
 
  *
  * Returns 1 if there is overlap, otherwise 0.
  */
-int tipc_subscrp_check_overlap(struct tipc_subscription *sub, u32 found_lower,
+int tipc_subscrp_check_overlap(struct tipc_name_seq *seq, u32 found_lower,
                               u32 found_upper)
 {
-       if (found_lower < sub->seq.lower)
-               found_lower = sub->seq.lower;
-       if (found_upper > sub->seq.upper)
-               found_upper = sub->seq.upper;
+       if (found_lower < seq->lower)
+               found_lower = seq->lower;
+       if (found_upper > seq->upper)
+               found_upper = seq->upper;
        if (found_lower > found_upper)
                return 0;
        return 1;
 }
 
+u32 tipc_subscrp_convert_seq_type(u32 type, int swap)
+{
+       return htohl(type, swap);
+}
+
+void tipc_subscrp_convert_seq(struct tipc_name_seq *in, int swap,
+                             struct tipc_name_seq *out)
+{
+       out->type = htohl(in->type, swap);
+       out->lower = htohl(in->lower, swap);
+       out->upper = htohl(in->upper, swap);
+}
+
 void tipc_subscrp_report_overlap(struct tipc_subscription *sub, u32 found_lower,
                                 u32 found_upper, u32 event, u32 port_ref,
                                 u32 node, int must)
 {
-       if (!tipc_subscrp_check_overlap(sub, found_lower, found_upper))
+       struct tipc_name_seq seq;
+
+       tipc_subscrp_convert_seq(&sub->evt.s.seq, sub->swap, &seq);
+       if (!tipc_subscrp_check_overlap(&seq, found_lower, found_upper))
                return;
        if (!must &&
            !(htohl(sub->evt.s.filter, sub->swap) & TIPC_SUB_PORTS))
 
        /* Initialize subscription object */
        sub->net = net;
-       sub->seq.type = htohl(s->seq.type, swap);
-       sub->seq.lower = htohl(s->seq.lower, swap);
-       sub->seq.upper = htohl(s->seq.upper, swap);
        filter = htohl(s->filter, swap);
        if (((filter & TIPC_SUB_PORTS) && (filter & TIPC_SUB_SERVICE)) ||
-           (sub->seq.lower > sub->seq.upper)) {
+           (htohl(s->seq.lower, swap) > htohl(s->seq.upper, swap))) {
                pr_warn("Subscription rejected, illegal request\n");
                kfree(sub);
                return -EINVAL;
 
  */
 struct tipc_subscription {
        struct tipc_subscriber *subscriber;
-       struct tipc_name_seq seq;
        struct net *net;
        struct timer_list timer;
        struct list_head nameseq_list;
        struct tipc_event evt;
 };
 
-int tipc_subscrp_check_overlap(struct tipc_subscription *sub, u32 found_lower,
+int tipc_subscrp_check_overlap(struct tipc_name_seq *seq, u32 found_lower,
                               u32 found_upper);
 void tipc_subscrp_report_overlap(struct tipc_subscription *sub,
                                 u32 found_lower, u32 found_upper, u32 event,
                                 u32 port_ref, u32 node, int must);
+void tipc_subscrp_convert_seq(struct tipc_name_seq *in, int swap,
+                             struct tipc_name_seq *out);
+u32 tipc_subscrp_convert_seq_type(u32 type, int swap);
 int tipc_topsrv_start(struct net *net);
 void tipc_topsrv_stop(struct net *net);