diff options
Diffstat (limited to 'net/tipc/subscr.c')
| -rw-r--r-- | net/tipc/subscr.c | 57 | 
1 files changed, 22 insertions, 35 deletions
| diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c index ac91f0dfa14..ff123e56114 100644 --- a/net/tipc/subscr.c +++ b/net/tipc/subscr.c @@ -76,19 +76,6 @@ struct top_srv {  static struct top_srv topsrv = { 0 };  /** - * htohl - convert value to endianness used by destination - * @in: value to convert - * @swap: non-zero if endianness must be reversed - * - * Returns converted value - */ - -static u32 htohl(u32 in, int swap) -{ -	return swap ? swab32(in) : in; -} - -/**   * subscr_send_event - send a message containing a tipc_event to the subscriber   *   * Note: Must not hold subscriber's server port lock, since tipc_send() will @@ -107,11 +94,11 @@ static void subscr_send_event(struct subscription *sub,  	msg_sect.iov_base = (void *)&sub->evt;  	msg_sect.iov_len = sizeof(struct tipc_event); -	sub->evt.event = htohl(event, sub->swap); -	sub->evt.found_lower = htohl(found_lower, sub->swap); -	sub->evt.found_upper = htohl(found_upper, sub->swap); -	sub->evt.port.ref = htohl(port_ref, sub->swap); -	sub->evt.port.node = htohl(node, sub->swap); +	sub->evt.event = htonl(event); +	sub->evt.found_lower = htonl(found_lower); +	sub->evt.found_upper = htonl(found_upper); +	sub->evt.port.ref = htonl(port_ref); +	sub->evt.port.node = htonl(node);  	tipc_send(sub->server_ref, 1, &msg_sect);  } @@ -287,16 +274,23 @@ static void subscr_cancel(struct tipc_subscr *s,  {  	struct subscription *sub;  	struct subscription *sub_temp; +	__u32 type, lower, upper;  	int found = 0;  	/* Find first matching subscription, exit if not found */ +	type = ntohl(s->seq.type); +	lower = ntohl(s->seq.lower); +	upper = ntohl(s->seq.upper); +  	list_for_each_entry_safe(sub, sub_temp, &subscriber->subscription_list,  				 subscription_list) { -		if (!memcmp(s, &sub->evt.s, sizeof(struct tipc_subscr))) { -			found = 1; -			break; -		} +			if ((type == sub->seq.type) && +			    (lower == sub->seq.lower) && +			    (upper == sub->seq.upper)) { +				found = 1; +				break; +			}  	}  	if (!found)  		return; @@ -325,16 +319,10 @@ static struct subscription *subscr_subscribe(struct tipc_subscr *s,  					     struct subscriber *subscriber)  {  	struct subscription *sub; -	int swap; - -	/* Determine subscriber's endianness */ - -	swap = !(s->filter & (TIPC_SUB_PORTS | TIPC_SUB_SERVICE));  	/* Detect & process a subscription cancellation request */ -	if (s->filter & htohl(TIPC_SUB_CANCEL, swap)) { -		s->filter &= ~htohl(TIPC_SUB_CANCEL, swap); +	if (ntohl(s->filter) & TIPC_SUB_CANCEL) {  		subscr_cancel(s, subscriber);  		return NULL;  	} @@ -359,11 +347,11 @@ static struct subscription *subscr_subscribe(struct tipc_subscr *s,  	/* Initialize subscription object */ -	sub->seq.type = htohl(s->seq.type, swap); -	sub->seq.lower = htohl(s->seq.lower, swap); -	sub->seq.upper = htohl(s->seq.upper, swap); -	sub->timeout = htohl(s->timeout, swap); -	sub->filter = htohl(s->filter, swap); +	sub->seq.type = ntohl(s->seq.type); +	sub->seq.lower = ntohl(s->seq.lower); +	sub->seq.upper = ntohl(s->seq.upper); +	sub->timeout = ntohl(s->timeout); +	sub->filter = ntohl(s->filter);  	if ((!(sub->filter & TIPC_SUB_PORTS) ==  	     !(sub->filter & TIPC_SUB_SERVICE)) ||  	    (sub->seq.lower > sub->seq.upper)) { @@ -376,7 +364,6 @@ static struct subscription *subscr_subscribe(struct tipc_subscr *s,  	INIT_LIST_HEAD(&sub->nameseq_list);  	list_add(&sub->subscription_list, &subscriber->subscription_list);  	sub->server_ref = subscriber->port_ref; -	sub->swap = swap;  	memcpy(&sub->evt.s, s, sizeof(struct tipc_subscr));  	atomic_inc(&topsrv.subscription_count);  	if (sub->timeout != TIPC_WAIT_FOREVER) { | 
