diff options
Diffstat (limited to 'net/sctp/socket.c')
| -rw-r--r-- | net/sctp/socket.c | 9 | 
1 files changed, 4 insertions, 5 deletions
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index f16c8d97b7f3..3a8318e518f1 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -4622,13 +4622,13 @@ int sctp_for_each_endpoint(int (*cb)(struct sctp_endpoint *, void *),  	for (head = sctp_ep_hashtable; hash < sctp_ep_hashsize;  	     hash++, head++) { -		read_lock(&head->lock); +		read_lock_bh(&head->lock);  		sctp_for_each_hentry(epb, &head->chain) {  			err = cb(sctp_ep(epb), p);  			if (err)  				break;  		} -		read_unlock(&head->lock); +		read_unlock_bh(&head->lock);  	}  	return err; @@ -4666,9 +4666,8 @@ int sctp_for_each_transport(int (*cb)(struct sctp_transport *, void *),  	if (err)  		return err; -	sctp_transport_get_idx(net, &hti, pos); -	obj = sctp_transport_get_next(net, &hti); -	for (; obj && !IS_ERR(obj); obj = sctp_transport_get_next(net, &hti)) { +	obj = sctp_transport_get_idx(net, &hti, pos + 1); +	for (; !IS_ERR_OR_NULL(obj); obj = sctp_transport_get_next(net, &hti)) {  		struct sctp_transport *transport = obj;  		if (!sctp_transport_hold(transport))  |