aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/ax25/af_ax25.c46
-rw-r--r--net/ax25/ax25_ip.c6
-rw-r--r--net/core/pktgen.c13
-rw-r--r--net/dccp/ccids/ccid3.c8
-rw-r--r--net/ipv4/ipconfig.c6
-rw-r--r--net/irda/ircomm/ircomm_tty.c9
-rw-r--r--net/netrom/af_netrom.c28
-rw-r--r--net/netrom/nr_dev.c54
-rw-r--r--net/netrom/nr_in.c15
-rw-r--r--net/netrom/nr_subr.c7
-rw-r--r--net/netrom/sysctl_net_netrom.c12
-rw-r--r--net/rose/af_rose.c8
-rw-r--r--net/rose/rose_dev.c2
-rw-r--r--net/sunrpc/svcsock.c3
14 files changed, 110 insertions, 107 deletions
diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
index ed705ddad56b..8e37e71e34ff 100644
--- a/net/ax25/af_ax25.c
+++ b/net/ax25/af_ax25.c
@@ -1695,16 +1695,12 @@ static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1695 /* These two are safe on a single CPU system as only user tasks fiddle here */ 1695 /* These two are safe on a single CPU system as only user tasks fiddle here */
1696 if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL) 1696 if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL)
1697 amount = skb->len; 1697 amount = skb->len;
1698 res = put_user(amount, (int __user *)argp); 1698 res = put_user(amount, (int __user *) argp);
1699 break; 1699 break;
1700 } 1700 }
1701 1701
1702 case SIOCGSTAMP: 1702 case SIOCGSTAMP:
1703 if (sk != NULL) { 1703 res = sock_get_timestamp(sk, argp);
1704 res = sock_get_timestamp(sk, argp);
1705 break;
1706 }
1707 res = -EINVAL;
1708 break; 1704 break;
1709 1705
1710 case SIOCAX25ADDUID: /* Add a uid to the uid/call map table */ 1706 case SIOCAX25ADDUID: /* Add a uid to the uid/call map table */
@@ -1951,24 +1947,24 @@ static struct net_proto_family ax25_family_ops = {
1951}; 1947};
1952 1948
1953static struct proto_ops ax25_proto_ops = { 1949static struct proto_ops ax25_proto_ops = {
1954 .family = PF_AX25, 1950 .family = PF_AX25,
1955 .owner = THIS_MODULE, 1951 .owner = THIS_MODULE,
1956 .release = ax25_release, 1952 .release = ax25_release,
1957 .bind = ax25_bind, 1953 .bind = ax25_bind,
1958 .connect = ax25_connect, 1954 .connect = ax25_connect,
1959 .socketpair = sock_no_socketpair, 1955 .socketpair = sock_no_socketpair,
1960 .accept = ax25_accept, 1956 .accept = ax25_accept,
1961 .getname = ax25_getname, 1957 .getname = ax25_getname,
1962 .poll = datagram_poll, 1958 .poll = datagram_poll,
1963 .ioctl = ax25_ioctl, 1959 .ioctl = ax25_ioctl,
1964 .listen = ax25_listen, 1960 .listen = ax25_listen,
1965 .shutdown = ax25_shutdown, 1961 .shutdown = ax25_shutdown,
1966 .setsockopt = ax25_setsockopt, 1962 .setsockopt = ax25_setsockopt,
1967 .getsockopt = ax25_getsockopt, 1963 .getsockopt = ax25_getsockopt,
1968 .sendmsg = ax25_sendmsg, 1964 .sendmsg = ax25_sendmsg,
1969 .recvmsg = ax25_recvmsg, 1965 .recvmsg = ax25_recvmsg,
1970 .mmap = sock_no_mmap, 1966 .mmap = sock_no_mmap,
1971 .sendpage = sock_no_sendpage, 1967 .sendpage = sock_no_sendpage,
1972}; 1968};
1973 1969
1974/* 1970/*
@@ -1984,7 +1980,7 @@ static struct notifier_block ax25_dev_notifier = {
1984 .notifier_call =ax25_device_event, 1980 .notifier_call =ax25_device_event,
1985}; 1981};
1986 1982
1987EXPORT_SYMBOL(ax25_encapsulate); 1983EXPORT_SYMBOL(ax25_hard_header);
1988EXPORT_SYMBOL(ax25_rebuild_header); 1984EXPORT_SYMBOL(ax25_rebuild_header);
1989EXPORT_SYMBOL(ax25_findbyuid); 1985EXPORT_SYMBOL(ax25_findbyuid);
1990EXPORT_SYMBOL(ax25_find_cb); 1986EXPORT_SYMBOL(ax25_find_cb);
diff --git a/net/ax25/ax25_ip.c b/net/ax25/ax25_ip.c
index bba0173e2d65..d643dac3eccc 100644
--- a/net/ax25/ax25_ip.c
+++ b/net/ax25/ax25_ip.c
@@ -47,7 +47,7 @@
47 47
48#ifdef CONFIG_INET 48#ifdef CONFIG_INET
49 49
50int ax25_encapsulate(struct sk_buff *skb, struct net_device *dev, unsigned short type, void *daddr, void *saddr, unsigned len) 50int ax25_hard_header(struct sk_buff *skb, struct net_device *dev, unsigned short type, void *daddr, void *saddr, unsigned len)
51{ 51{
52 unsigned char *buff; 52 unsigned char *buff;
53 53
@@ -88,7 +88,7 @@ int ax25_encapsulate(struct sk_buff *skb, struct net_device *dev, unsigned short
88 *buff++ = AX25_P_ARP; 88 *buff++ = AX25_P_ARP;
89 break; 89 break;
90 default: 90 default:
91 printk(KERN_ERR "AX.25: ax25_encapsulate - wrong protocol type 0x%2.2x\n", type); 91 printk(KERN_ERR "AX.25: ax25_hard_header - wrong protocol type 0x%2.2x\n", type);
92 *buff++ = 0; 92 *buff++ = 0;
93 break; 93 break;
94 } 94 }
@@ -209,7 +209,7 @@ put:
209 209
210#else /* INET */ 210#else /* INET */
211 211
212int ax25_encapsulate(struct sk_buff *skb, struct net_device *dev, unsigned short type, void *daddr, void *saddr, unsigned len) 212int ax25_hard_header(struct sk_buff *skb, struct net_device *dev, unsigned short type, void *daddr, void *saddr, unsigned len)
213{ 213{
214 return -AX25_HEADER_LEN; 214 return -AX25_HEADER_LEN;
215} 215}
diff --git a/net/core/pktgen.c b/net/core/pktgen.c
index b3ad49fa7d78..ef430b1e8e42 100644
--- a/net/core/pktgen.c
+++ b/net/core/pktgen.c
@@ -1452,8 +1452,7 @@ static int proc_thread_write(struct file *file, const char __user *user_buffer,
1452 thread_lock(); 1452 thread_lock();
1453 t->control |= T_REMDEV; 1453 t->control |= T_REMDEV;
1454 thread_unlock(); 1454 thread_unlock();
1455 current->state = TASK_INTERRUPTIBLE; 1455 schedule_timeout_interruptible(msecs_to_jiffies(125)); /* Propagate thread->control */
1456 schedule_timeout(HZ/8); /* Propagate thread->control */
1457 ret = count; 1456 ret = count;
1458 sprintf(pg_result, "OK: rem_device_all"); 1457 sprintf(pg_result, "OK: rem_device_all");
1459 goto out; 1458 goto out;
@@ -1716,10 +1715,9 @@ static void spin(struct pktgen_dev *pkt_dev, __u64 spin_until_us)
1716 printk(KERN_INFO "sleeping for %d\n", (int)(spin_until_us - now)); 1715 printk(KERN_INFO "sleeping for %d\n", (int)(spin_until_us - now));
1717 while (now < spin_until_us) { 1716 while (now < spin_until_us) {
1718 /* TODO: optimise sleeping behavior */ 1717 /* TODO: optimise sleeping behavior */
1719 if (spin_until_us - now > (1000000/HZ)+1) { 1718 if (spin_until_us - now > jiffies_to_usecs(1)+1)
1720 current->state = TASK_INTERRUPTIBLE; 1719 schedule_timeout_interruptible(1);
1721 schedule_timeout(1); 1720 else if (spin_until_us - now > 100) {
1722 } else if (spin_until_us - now > 100) {
1723 do_softirq(); 1721 do_softirq();
1724 if (!pkt_dev->running) 1722 if (!pkt_dev->running)
1725 return; 1723 return;
@@ -2449,8 +2447,7 @@ static void pktgen_run_all_threads(void)
2449 } 2447 }
2450 thread_unlock(); 2448 thread_unlock();
2451 2449
2452 current->state = TASK_INTERRUPTIBLE; 2450 schedule_timeout_interruptible(msecs_to_jiffies(125)); /* Propagate thread->control */
2453 schedule_timeout(HZ/8); /* Propagate thread->control */
2454 2451
2455 pktgen_wait_all_threads_run(); 2452 pktgen_wait_all_threads_run();
2456} 2453}
diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c
index e05f4f955eee..38aa84986118 100644
--- a/net/dccp/ccids/ccid3.c
+++ b/net/dccp/ccids/ccid3.c
@@ -1095,6 +1095,10 @@ static void ccid3_hc_rx_get_info(struct sock *sk, struct tcp_info *info)
1095{ 1095{
1096 const struct ccid3_hc_rx_sock *hcrx = ccid3_hc_rx_sk(sk); 1096 const struct ccid3_hc_rx_sock *hcrx = ccid3_hc_rx_sk(sk);
1097 1097
1098 /* Listen socks doesn't have a private CCID block */
1099 if (sk->sk_state == DCCP_LISTEN)
1100 return;
1101
1098 BUG_ON(hcrx == NULL); 1102 BUG_ON(hcrx == NULL);
1099 1103
1100 info->tcpi_ca_state = hcrx->ccid3hcrx_state; 1104 info->tcpi_ca_state = hcrx->ccid3hcrx_state;
@@ -1106,6 +1110,10 @@ static void ccid3_hc_tx_get_info(struct sock *sk, struct tcp_info *info)
1106{ 1110{
1107 const struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk); 1111 const struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk);
1108 1112
1113 /* Listen socks doesn't have a private CCID block */
1114 if (sk->sk_state == DCCP_LISTEN)
1115 return;
1116
1109 BUG_ON(hctx == NULL); 1117 BUG_ON(hctx == NULL);
1110 1118
1111 info->tcpi_rto = hctx->ccid3hctx_t_rto; 1119 info->tcpi_rto = hctx->ccid3hctx_t_rto;
diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
index 953129d392d2..e8674baaa8d9 100644
--- a/net/ipv4/ipconfig.c
+++ b/net/ipv4/ipconfig.c
@@ -1103,10 +1103,8 @@ static int __init ic_dynamic(void)
1103#endif 1103#endif
1104 1104
1105 jiff = jiffies + (d->next ? CONF_INTER_TIMEOUT : timeout); 1105 jiff = jiffies + (d->next ? CONF_INTER_TIMEOUT : timeout);
1106 while (time_before(jiffies, jiff) && !ic_got_reply) { 1106 while (time_before(jiffies, jiff) && !ic_got_reply)
1107 set_current_state(TASK_UNINTERRUPTIBLE); 1107 schedule_timeout_uninterruptible(1);
1108 schedule_timeout(1);
1109 }
1110#ifdef IPCONFIG_DHCP 1108#ifdef IPCONFIG_DHCP
1111 /* DHCP isn't done until we get a DHCPACK. */ 1109 /* DHCP isn't done until we get a DHCPACK. */
1112 if ((ic_got_reply & IC_BOOTP) 1110 if ((ic_got_reply & IC_BOOTP)
diff --git a/net/irda/ircomm/ircomm_tty.c b/net/irda/ircomm/ircomm_tty.c
index 5d1e61168eb7..6f20b4206e08 100644
--- a/net/irda/ircomm/ircomm_tty.c
+++ b/net/irda/ircomm/ircomm_tty.c
@@ -567,10 +567,8 @@ static void ircomm_tty_close(struct tty_struct *tty, struct file *filp)
567 self->tty = NULL; 567 self->tty = NULL;
568 568
569 if (self->blocked_open) { 569 if (self->blocked_open) {
570 if (self->close_delay) { 570 if (self->close_delay)
571 current->state = TASK_INTERRUPTIBLE; 571 schedule_timeout_interruptible(self->close_delay);
572 schedule_timeout(self->close_delay);
573 }
574 wake_up_interruptible(&self->open_wait); 572 wake_up_interruptible(&self->open_wait);
575 } 573 }
576 574
@@ -863,8 +861,7 @@ static void ircomm_tty_wait_until_sent(struct tty_struct *tty, int timeout)
863 spin_lock_irqsave(&self->spinlock, flags); 861 spin_lock_irqsave(&self->spinlock, flags);
864 while (self->tx_skb && self->tx_skb->len) { 862 while (self->tx_skb && self->tx_skb->len) {
865 spin_unlock_irqrestore(&self->spinlock, flags); 863 spin_unlock_irqrestore(&self->spinlock, flags);
866 current->state = TASK_INTERRUPTIBLE; 864 schedule_timeout_interruptible(poll_time);
867 schedule_timeout(poll_time);
868 spin_lock_irqsave(&self->spinlock, flags); 865 spin_lock_irqsave(&self->spinlock, flags);
869 if (signal_pending(current)) 866 if (signal_pending(current))
870 break; 867 break;
diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c
index f4578c759ffc..e5d82d711cae 100644
--- a/net/netrom/af_netrom.c
+++ b/net/netrom/af_netrom.c
@@ -56,6 +56,7 @@ int sysctl_netrom_transport_requested_window_size = NR_DEFAULT_WINDOW;
56int sysctl_netrom_transport_no_activity_timeout = NR_DEFAULT_IDLE; 56int sysctl_netrom_transport_no_activity_timeout = NR_DEFAULT_IDLE;
57int sysctl_netrom_routing_control = NR_DEFAULT_ROUTING; 57int sysctl_netrom_routing_control = NR_DEFAULT_ROUTING;
58int sysctl_netrom_link_fails_count = NR_DEFAULT_FAILS; 58int sysctl_netrom_link_fails_count = NR_DEFAULT_FAILS;
59int sysctl_netrom_reset_circuit = NR_DEFAULT_RESET;
59 60
60static unsigned short circuit = 0x101; 61static unsigned short circuit = 0x101;
61 62
@@ -908,17 +909,17 @@ int nr_rx_frame(struct sk_buff *skb, struct net_device *dev)
908 if (frametype != NR_CONNREQ) { 909 if (frametype != NR_CONNREQ) {
909 /* 910 /*
910 * Here it would be nice to be able to send a reset but 911 * Here it would be nice to be able to send a reset but
911 * NET/ROM doesn't have one. The following hack would 912 * NET/ROM doesn't have one. We've tried to extend the protocol
912 * have been a way to extend the protocol but apparently 913 * by sending NR_CONNACK | NR_CHOKE_FLAGS replies but that
913 * it kills BPQ boxes... :-( 914 * apparently kills BPQ boxes... :-(
915 * So now we try to follow the established behaviour of
916 * G8PZT's Xrouter which is sending packets with command type 7
917 * as an extension of the protocol.
914 */ 918 */
915#if 0 919 if (sysctl_netrom_reset_circuit &&
916 /* 920 (frametype != NR_RESET || flags != 0))
917 * Never reply to a CONNACK/CHOKE. 921 nr_transmit_reset(skb, 1);
918 */ 922
919 if (frametype != NR_CONNACK || flags != NR_CHOKE_FLAG)
920 nr_transmit_refusal(skb, 1);
921#endif
922 return 0; 923 return 0;
923 } 924 }
924 925
@@ -1187,9 +1188,7 @@ static int nr_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1187 } 1188 }
1188 1189
1189 case SIOCGSTAMP: 1190 case SIOCGSTAMP:
1190 ret = -EINVAL; 1191 ret = sock_get_timestamp(sk, argp);
1191 if (sk != NULL)
1192 ret = sock_get_timestamp(sk, argp);
1193 release_sock(sk); 1192 release_sock(sk);
1194 return ret; 1193 return ret;
1195 1194
@@ -1393,8 +1392,7 @@ static int __init nr_proto_init(void)
1393 struct net_device *dev; 1392 struct net_device *dev;
1394 1393
1395 sprintf(name, "nr%d", i); 1394 sprintf(name, "nr%d", i);
1396 dev = alloc_netdev(sizeof(struct net_device_stats), name, 1395 dev = alloc_netdev(sizeof(struct nr_private), name, nr_setup);
1397 nr_setup);
1398 if (!dev) { 1396 if (!dev) {
1399 printk(KERN_ERR "NET/ROM: nr_proto_init - unable to allocate device structure\n"); 1397 printk(KERN_ERR "NET/ROM: nr_proto_init - unable to allocate device structure\n");
1400 goto fail; 1398 goto fail;
diff --git a/net/netrom/nr_dev.c b/net/netrom/nr_dev.c
index 263da4c26494..4e66eef9a034 100644
--- a/net/netrom/nr_dev.c
+++ b/net/netrom/nr_dev.c
@@ -47,7 +47,7 @@ int nr_rx_ip(struct sk_buff *skb, struct net_device *dev)
47 struct net_device_stats *stats = netdev_priv(dev); 47 struct net_device_stats *stats = netdev_priv(dev);
48 48
49 if (!netif_running(dev)) { 49 if (!netif_running(dev)) {
50 stats->rx_errors++; 50 stats->rx_dropped++;
51 return 0; 51 return 0;
52 } 52 }
53 53
@@ -71,15 +71,10 @@ int nr_rx_ip(struct sk_buff *skb, struct net_device *dev)
71 71
72static int nr_rebuild_header(struct sk_buff *skb) 72static int nr_rebuild_header(struct sk_buff *skb)
73{ 73{
74 struct net_device *dev = skb->dev;
75 struct net_device_stats *stats = netdev_priv(dev);
76 struct sk_buff *skbn;
77 unsigned char *bp = skb->data; 74 unsigned char *bp = skb->data;
78 int len;
79 75
80 if (arp_find(bp + 7, skb)) { 76 if (arp_find(bp + 7, skb))
81 return 1; 77 return 1;
82 }
83 78
84 bp[6] &= ~AX25_CBIT; 79 bp[6] &= ~AX25_CBIT;
85 bp[6] &= ~AX25_EBIT; 80 bp[6] &= ~AX25_EBIT;
@@ -90,27 +85,7 @@ static int nr_rebuild_header(struct sk_buff *skb)
90 bp[6] |= AX25_EBIT; 85 bp[6] |= AX25_EBIT;
91 bp[6] |= AX25_SSSID_SPARE; 86 bp[6] |= AX25_SSSID_SPARE;
92 87
93 if ((skbn = skb_clone(skb, GFP_ATOMIC)) == NULL) { 88 return 0;
94 kfree_skb(skb);
95 return 1;
96 }
97
98 if (skb->sk != NULL)
99 skb_set_owner_w(skbn, skb->sk);
100
101 kfree_skb(skb);
102
103 len = skbn->len;
104
105 if (!nr_route_frame(skbn, NULL)) {
106 kfree_skb(skbn);
107 stats->tx_errors++;
108 }
109
110 stats->tx_packets++;
111 stats->tx_bytes += len;
112
113 return 1;
114} 89}
115 90
116#else 91#else
@@ -185,15 +160,27 @@ static int nr_close(struct net_device *dev)
185 160
186static int nr_xmit(struct sk_buff *skb, struct net_device *dev) 161static int nr_xmit(struct sk_buff *skb, struct net_device *dev)
187{ 162{
188 struct net_device_stats *stats = netdev_priv(dev); 163 struct nr_private *nr = netdev_priv(dev);
189 dev_kfree_skb(skb); 164 struct net_device_stats *stats = &nr->stats;
190 stats->tx_errors++; 165 unsigned int len = skb->len;
166
167 if (!nr_route_frame(skb, NULL)) {
168 kfree_skb(skb);
169 stats->tx_errors++;
170 return 0;
171 }
172
173 stats->tx_packets++;
174 stats->tx_bytes += len;
175
191 return 0; 176 return 0;
192} 177}
193 178
194static struct net_device_stats *nr_get_stats(struct net_device *dev) 179static struct net_device_stats *nr_get_stats(struct net_device *dev)
195{ 180{
196 return netdev_priv(dev); 181 struct nr_private *nr = netdev_priv(dev);
182
183 return &nr->stats;
197} 184}
198 185
199void nr_setup(struct net_device *dev) 186void nr_setup(struct net_device *dev)
@@ -208,12 +195,11 @@ void nr_setup(struct net_device *dev)
208 dev->hard_header_len = NR_NETWORK_LEN + NR_TRANSPORT_LEN; 195 dev->hard_header_len = NR_NETWORK_LEN + NR_TRANSPORT_LEN;
209 dev->addr_len = AX25_ADDR_LEN; 196 dev->addr_len = AX25_ADDR_LEN;
210 dev->type = ARPHRD_NETROM; 197 dev->type = ARPHRD_NETROM;
211 dev->tx_queue_len = 40;
212 dev->rebuild_header = nr_rebuild_header; 198 dev->rebuild_header = nr_rebuild_header;
213 dev->set_mac_address = nr_set_mac_address; 199 dev->set_mac_address = nr_set_mac_address;
214 200
215 /* New-style flags. */ 201 /* New-style flags. */
216 dev->flags = 0; 202 dev->flags = IFF_NOARP;
217 203
218 dev->get_stats = nr_get_stats; 204 dev->get_stats = nr_get_stats;
219} 205}
diff --git a/net/netrom/nr_in.c b/net/netrom/nr_in.c
index 64b81a796907..004e8599b8fe 100644
--- a/net/netrom/nr_in.c
+++ b/net/netrom/nr_in.c
@@ -98,6 +98,11 @@ static int nr_state1_machine(struct sock *sk, struct sk_buff *skb,
98 nr_disconnect(sk, ECONNREFUSED); 98 nr_disconnect(sk, ECONNREFUSED);
99 break; 99 break;
100 100
101 case NR_RESET:
102 if (sysctl_netrom_reset_circuit);
103 nr_disconnect(sk, ECONNRESET);
104 break;
105
101 default: 106 default:
102 break; 107 break;
103 } 108 }
@@ -124,6 +129,11 @@ static int nr_state2_machine(struct sock *sk, struct sk_buff *skb,
124 nr_disconnect(sk, 0); 129 nr_disconnect(sk, 0);
125 break; 130 break;
126 131
132 case NR_RESET:
133 if (sysctl_netrom_reset_circuit);
134 nr_disconnect(sk, ECONNRESET);
135 break;
136
127 default: 137 default:
128 break; 138 break;
129 } 139 }
@@ -254,6 +264,11 @@ static int nr_state3_machine(struct sock *sk, struct sk_buff *skb, int frametype
254 } 264 }
255 break; 265 break;
256 266
267 case NR_RESET:
268 if (sysctl_netrom_reset_circuit);
269 nr_disconnect(sk, ECONNRESET);
270 break;
271
257 default: 272 default:
258 break; 273 break;
259 } 274 }
diff --git a/net/netrom/nr_subr.c b/net/netrom/nr_subr.c
index 587bed2674bf..bcb9946b4f56 100644
--- a/net/netrom/nr_subr.c
+++ b/net/netrom/nr_subr.c
@@ -210,10 +210,9 @@ void nr_write_internal(struct sock *sk, int frametype)
210} 210}
211 211
212/* 212/*
213 * This routine is called when a Connect Acknowledge with the Choke Flag 213 * This routine is called to send an error reply.
214 * set is needed to refuse a connection.
215 */ 214 */
216void nr_transmit_refusal(struct sk_buff *skb, int mine) 215void __nr_transmit_reply(struct sk_buff *skb, int mine, unsigned char cmdflags)
217{ 216{
218 struct sk_buff *skbn; 217 struct sk_buff *skbn;
219 unsigned char *dptr; 218 unsigned char *dptr;
@@ -254,7 +253,7 @@ void nr_transmit_refusal(struct sk_buff *skb, int mine)
254 *dptr++ = 0; 253 *dptr++ = 0;
255 } 254 }
256 255
257 *dptr++ = NR_CONNACK | NR_CHOKE_FLAG; 256 *dptr++ = cmdflags;
258 *dptr++ = 0; 257 *dptr++ = 0;
259 258
260 if (!nr_route_frame(skbn, NULL)) 259 if (!nr_route_frame(skbn, NULL))
diff --git a/net/netrom/sysctl_net_netrom.c b/net/netrom/sysctl_net_netrom.c
index c9ed50382ea7..6bb8dda849dc 100644
--- a/net/netrom/sysctl_net_netrom.c
+++ b/net/netrom/sysctl_net_netrom.c
@@ -30,6 +30,7 @@ static int min_idle[] = {0 * HZ};
30static int max_idle[] = {65535 * HZ}; 30static int max_idle[] = {65535 * HZ};
31static int min_route[] = {0}, max_route[] = {1}; 31static int min_route[] = {0}, max_route[] = {1};
32static int min_fails[] = {1}, max_fails[] = {10}; 32static int min_fails[] = {1}, max_fails[] = {10};
33static int min_reset[] = {0}, max_reset[] = {1};
33 34
34static struct ctl_table_header *nr_table_header; 35static struct ctl_table_header *nr_table_header;
35 36
@@ -155,6 +156,17 @@ static ctl_table nr_table[] = {
155 .extra1 = &min_fails, 156 .extra1 = &min_fails,
156 .extra2 = &max_fails 157 .extra2 = &max_fails
157 }, 158 },
159 {
160 .ctl_name = NET_NETROM_RESET,
161 .procname = "reset",
162 .data = &sysctl_netrom_reset_circuit,
163 .maxlen = sizeof(int),
164 .mode = 0644,
165 .proc_handler = &proc_dointvec_minmax,
166 .strategy = &sysctl_intvec,
167 .extra1 = &min_reset,
168 .extra2 = &max_reset
169 },
158 { .ctl_name = 0 } 170 { .ctl_name = 0 }
159}; 171};
160 172
diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c
index 3077878ed4f0..5acb1680524a 100644
--- a/net/rose/af_rose.c
+++ b/net/rose/af_rose.c
@@ -1243,7 +1243,7 @@ static int rose_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1243 amount = sk->sk_sndbuf - atomic_read(&sk->sk_wmem_alloc); 1243 amount = sk->sk_sndbuf - atomic_read(&sk->sk_wmem_alloc);
1244 if (amount < 0) 1244 if (amount < 0)
1245 amount = 0; 1245 amount = 0;
1246 return put_user(amount, (unsigned int __user *)argp); 1246 return put_user(amount, (unsigned int __user *) argp);
1247 } 1247 }
1248 1248
1249 case TIOCINQ: { 1249 case TIOCINQ: {
@@ -1252,13 +1252,11 @@ static int rose_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1252 /* These two are safe on a single CPU system as only user tasks fiddle here */ 1252 /* These two are safe on a single CPU system as only user tasks fiddle here */
1253 if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL) 1253 if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL)
1254 amount = skb->len; 1254 amount = skb->len;
1255 return put_user(amount, (unsigned int __user *)argp); 1255 return put_user(amount, (unsigned int __user *) argp);
1256 } 1256 }
1257 1257
1258 case SIOCGSTAMP: 1258 case SIOCGSTAMP:
1259 if (sk != NULL) 1259 return sock_get_timestamp(sk, (struct timeval __user *) argp);
1260 return sock_get_timestamp(sk, (struct timeval __user *)argp);
1261 return -EINVAL;
1262 1260
1263 case SIOCGIFADDR: 1261 case SIOCGIFADDR:
1264 case SIOCSIFADDR: 1262 case SIOCSIFADDR:
diff --git a/net/rose/rose_dev.c b/net/rose/rose_dev.c
index a8ed9a1d09f9..d297af737d10 100644
--- a/net/rose/rose_dev.c
+++ b/net/rose/rose_dev.c
@@ -149,6 +149,6 @@ void rose_setup(struct net_device *dev)
149 dev->set_mac_address = rose_set_mac_address; 149 dev->set_mac_address = rose_set_mac_address;
150 150
151 /* New-style flags. */ 151 /* New-style flags. */
152 dev->flags = 0; 152 dev->flags = IFF_NOARP;
153 dev->get_stats = rose_get_stats; 153 dev->get_stats = rose_get_stats;
154} 154}
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
index 05fe2e735538..51885b5f744e 100644
--- a/net/sunrpc/svcsock.c
+++ b/net/sunrpc/svcsock.c
@@ -1170,8 +1170,7 @@ svc_recv(struct svc_serv *serv, struct svc_rqst *rqstp, long timeout)
1170 while (rqstp->rq_arghi < pages) { 1170 while (rqstp->rq_arghi < pages) {
1171 struct page *p = alloc_page(GFP_KERNEL); 1171 struct page *p = alloc_page(GFP_KERNEL);
1172 if (!p) { 1172 if (!p) {
1173 set_current_state(TASK_UNINTERRUPTIBLE); 1173 schedule_timeout_uninterruptible(msecs_to_jiffies(500));
1174 schedule_timeout(HZ/2);
1175 continue; 1174 continue;
1176 } 1175 }
1177 rqstp->rq_argpages[rqstp->rq_arghi++] = p; 1176 rqstp->rq_argpages[rqstp->rq_arghi++] = p;