]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Revert c6537d6742985da1fbf12ae26cde6a096fd35b5c
authorNeil Horman <nhorman@tuxdriver.com>
Thu, 21 Oct 2010 01:06:15 +0000 (01:06 +0000)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 22 Nov 2010 19:00:13 +0000 (11:00 -0800)
[ Upstream commit 8c974438085d2c81b006daeaab8801eedbd19758 ]

Backout the tipc changes to the flags int he subscription message.  These
changees, while reasonable on the surface, interefere with user space ABI
compatibility which is a no-no.  This was part of the changes to fix the
endianess issues in the TIPC protocol, which would be really nice to do but we
need to do so in a way that is backwards compatible with user space.

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
include/linux/tipc.h
net/tipc/subscr.c

index 181c8d0e6f739fbfd091876c0726206491b8b1cd..d10614b29d592a4df809aa40a904c39fe3f33340 100644 (file)
@@ -127,17 +127,23 @@ static inline unsigned int tipc_node(__u32 addr)
  * TIPC topology subscription service definitions
  */
 
-#define TIPC_SUB_SERVICE       0x00    /* Filter for service availability    */
-#define TIPC_SUB_PORTS         0x01    /* Filter for port availability  */
-#define TIPC_SUB_CANCEL         0x04    /* Cancel a subscription         */
+#define TIPC_SUB_PORTS         0x01    /* filter for port availability */
+#define TIPC_SUB_SERVICE       0x02    /* filter for service availability */
+#define TIPC_SUB_CANCEL         0x04    /* cancel a subscription */
+#if 0
+/* The following filter options are not currently implemented */
+#define TIPC_SUB_NO_BIND_EVTS  0x04    /* filter out "publish" events */
+#define TIPC_SUB_NO_UNBIND_EVTS        0x08    /* filter out "withdraw" events */
+#define TIPC_SUB_SINGLE_EVT    0x10    /* expire after first event */
+#endif
 
 #define TIPC_WAIT_FOREVER      ~0      /* timeout for permanent subscription */
 
 struct tipc_subscr {
-       struct tipc_name_seq seq;       /* NBO. Name sequence of interest */
-       __u32 timeout;                  /* NBO. Subscription duration (in ms) */
-        __u32 filter;                  /* NBO. Bitmask of filter options */
-       char usr_handle[8];             /* Opaque. Available for subscriber use */
+       struct tipc_name_seq seq;       /* name sequence of interest */
+       __u32 timeout;                  /* subscription duration (in ms) */
+        __u32 filter;                  /* bitmask of filter options */
+       char usr_handle[8];             /* available for subscriber use */
 };
 
 #define TIPC_PUBLISHED         1       /* publication event */
@@ -145,11 +151,11 @@ struct tipc_subscr {
 #define TIPC_SUBSCR_TIMEOUT    3       /* subscription timeout event */
 
 struct tipc_event {
-       __u32 event;                    /* NBO. Event type, as defined above */
-       __u32 found_lower;              /* NBO. Matching name seq instances  */
-       __u32 found_upper;              /*  "      "       "   "    "        */
-       struct tipc_portid port;        /* NBO. Associated port              */
-       struct tipc_subscr s;           /* Original, associated subscription */
+       __u32 event;                    /* event type */
+       __u32 found_lower;              /* matching name seq instances */
+       __u32 found_upper;              /*    "      "    "     "      */
+       struct tipc_portid port;        /* associated port */
+       struct tipc_subscr s;           /* associated subscription */
 };
 
 /*
index ab6eab4c45e2b0ecbbc460ddbed0045d48792f1c..ff123e56114a14e5e05671ac846d59a4e5555723 100644 (file)
@@ -274,7 +274,7 @@ static void subscr_cancel(struct tipc_subscr *s,
 {
        struct subscription *sub;
        struct subscription *sub_temp;
-       __u32 type, lower, upper, timeout, filter;
+       __u32 type, lower, upper;
        int found = 0;
 
        /* Find first matching subscription, exit if not found */
@@ -282,18 +282,12 @@ static void subscr_cancel(struct tipc_subscr *s,
        type = ntohl(s->seq.type);
        lower = ntohl(s->seq.lower);
        upper = ntohl(s->seq.upper);
-       timeout = ntohl(s->timeout);
-       filter = ntohl(s->filter) & ~TIPC_SUB_CANCEL;
 
        list_for_each_entry_safe(sub, sub_temp, &subscriber->subscription_list,
                                 subscription_list) {
                        if ((type == sub->seq.type) &&
                            (lower == sub->seq.lower) &&
-                           (upper == sub->seq.upper) &&
-                           (timeout == sub->timeout) &&
-                            (filter == sub->filter) &&
-                             !memcmp(s->usr_handle,sub->evt.s.usr_handle,
-                                    sizeof(s->usr_handle)) ){
+                           (upper == sub->seq.upper)) {
                                found = 1;
                                break;
                        }
@@ -310,7 +304,7 @@ static void subscr_cancel(struct tipc_subscr *s,
                k_term_timer(&sub->timer);
                spin_lock_bh(subscriber->lock);
        }
-       dbg("Cancel: removing sub %u,%u,%u from subscriber %p list\n",
+       dbg("Cancel: removing sub %u,%u,%u from subscriber %x list\n",
            sub->seq.type, sub->seq.lower, sub->seq.upper, subscriber);
        subscr_del(sub);
 }
@@ -358,7 +352,8 @@ static struct subscription *subscr_subscribe(struct tipc_subscr *s,
        sub->seq.upper = ntohl(s->seq.upper);
        sub->timeout = ntohl(s->timeout);
        sub->filter = ntohl(s->filter);
-       if ((sub->filter && (sub->filter != TIPC_SUB_PORTS)) ||
+       if ((!(sub->filter & TIPC_SUB_PORTS) ==
+            !(sub->filter & TIPC_SUB_SERVICE)) ||
            (sub->seq.lower > sub->seq.upper)) {
                warn("Subscription rejected, illegal request\n");
                kfree(sub);