diff options
Diffstat (limited to 'net')
| -rw-r--r-- | net/bridge/br_device.c | 3 | ||||
| -rw-r--r-- | net/can/bcm.c | 53 | ||||
| -rw-r--r-- | net/ipv4/tcp_input.c | 4 | ||||
| -rw-r--r-- | net/ipv4/tcp_ipv4.c | 11 | ||||
| -rw-r--r-- | net/ipv6/af_inet6.c | 1 | ||||
| -rw-r--r-- | net/ipv6/tcp_ipv6.c | 11 | ||||
| -rw-r--r-- | net/netfilter/ipvs/ip_vs_ctl.c | 2 | ||||
| -rw-r--r-- | net/packet/af_packet.c | 5 | ||||
| -rw-r--r-- | net/rds/iw_rdma.c | 13 |
9 files changed, 55 insertions, 48 deletions
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c index 32b8f9f7f79e..ff3ed6086ce1 100644 --- a/net/bridge/br_device.c +++ b/net/bridge/br_device.c | |||
| @@ -91,7 +91,6 @@ static int br_dev_open(struct net_device *dev) | |||
| 91 | { | 91 | { |
| 92 | struct net_bridge *br = netdev_priv(dev); | 92 | struct net_bridge *br = netdev_priv(dev); |
| 93 | 93 | ||
| 94 | netif_carrier_off(dev); | ||
| 95 | netdev_update_features(dev); | 94 | netdev_update_features(dev); |
| 96 | netif_start_queue(dev); | 95 | netif_start_queue(dev); |
| 97 | br_stp_enable_bridge(br); | 96 | br_stp_enable_bridge(br); |
| @@ -108,8 +107,6 @@ static int br_dev_stop(struct net_device *dev) | |||
| 108 | { | 107 | { |
| 109 | struct net_bridge *br = netdev_priv(dev); | 108 | struct net_bridge *br = netdev_priv(dev); |
| 110 | 109 | ||
| 111 | netif_carrier_off(dev); | ||
| 112 | |||
| 113 | br_stp_disable_bridge(br); | 110 | br_stp_disable_bridge(br); |
| 114 | br_multicast_stop(br); | 111 | br_multicast_stop(br); |
| 115 | 112 | ||
diff --git a/net/can/bcm.c b/net/can/bcm.c index d6c8ae5b2e6a..c84963d2dee6 100644 --- a/net/can/bcm.c +++ b/net/can/bcm.c | |||
| @@ -344,6 +344,18 @@ static void bcm_send_to_user(struct bcm_op *op, struct bcm_msg_head *head, | |||
| 344 | } | 344 | } |
| 345 | } | 345 | } |
| 346 | 346 | ||
| 347 | static void bcm_tx_start_timer(struct bcm_op *op) | ||
| 348 | { | ||
| 349 | if (op->kt_ival1.tv64 && op->count) | ||
| 350 | hrtimer_start(&op->timer, | ||
| 351 | ktime_add(ktime_get(), op->kt_ival1), | ||
| 352 | HRTIMER_MODE_ABS); | ||
| 353 | else if (op->kt_ival2.tv64) | ||
| 354 | hrtimer_start(&op->timer, | ||
| 355 | ktime_add(ktime_get(), op->kt_ival2), | ||
| 356 | HRTIMER_MODE_ABS); | ||
| 357 | } | ||
| 358 | |||
| 347 | static void bcm_tx_timeout_tsklet(unsigned long data) | 359 | static void bcm_tx_timeout_tsklet(unsigned long data) |
| 348 | { | 360 | { |
| 349 | struct bcm_op *op = (struct bcm_op *)data; | 361 | struct bcm_op *op = (struct bcm_op *)data; |
| @@ -365,26 +377,12 @@ static void bcm_tx_timeout_tsklet(unsigned long data) | |||
| 365 | 377 | ||
| 366 | bcm_send_to_user(op, &msg_head, NULL, 0); | 378 | bcm_send_to_user(op, &msg_head, NULL, 0); |
| 367 | } | 379 | } |
| 368 | } | ||
| 369 | |||
| 370 | if (op->kt_ival1.tv64 && (op->count > 0)) { | ||
| 371 | |||
| 372 | /* send (next) frame */ | ||
| 373 | bcm_can_tx(op); | 380 | bcm_can_tx(op); |
| 374 | hrtimer_start(&op->timer, | ||
| 375 | ktime_add(ktime_get(), op->kt_ival1), | ||
| 376 | HRTIMER_MODE_ABS); | ||
| 377 | 381 | ||
| 378 | } else { | 382 | } else if (op->kt_ival2.tv64) |
| 379 | if (op->kt_ival2.tv64) { | 383 | bcm_can_tx(op); |
| 380 | 384 | ||
| 381 | /* send (next) frame */ | 385 | bcm_tx_start_timer(op); |
| 382 | bcm_can_tx(op); | ||
| 383 | hrtimer_start(&op->timer, | ||
| 384 | ktime_add(ktime_get(), op->kt_ival2), | ||
| 385 | HRTIMER_MODE_ABS); | ||
| 386 | } | ||
| 387 | } | ||
| 388 | } | 386 | } |
| 389 | 387 | ||
| 390 | /* | 388 | /* |
| @@ -964,23 +962,20 @@ static int bcm_tx_setup(struct bcm_msg_head *msg_head, struct msghdr *msg, | |||
| 964 | hrtimer_cancel(&op->timer); | 962 | hrtimer_cancel(&op->timer); |
| 965 | } | 963 | } |
| 966 | 964 | ||
| 967 | if ((op->flags & STARTTIMER) && | 965 | if (op->flags & STARTTIMER) { |
| 968 | ((op->kt_ival1.tv64 && op->count) || op->kt_ival2.tv64)) { | 966 | hrtimer_cancel(&op->timer); |
| 969 | |||
| 970 | /* spec: send can_frame when starting timer */ | 967 | /* spec: send can_frame when starting timer */ |
| 971 | op->flags |= TX_ANNOUNCE; | 968 | op->flags |= TX_ANNOUNCE; |
| 972 | |||
| 973 | if (op->kt_ival1.tv64 && (op->count > 0)) { | ||
| 974 | /* op->count-- is done in bcm_tx_timeout_handler */ | ||
| 975 | hrtimer_start(&op->timer, op->kt_ival1, | ||
| 976 | HRTIMER_MODE_REL); | ||
| 977 | } else | ||
| 978 | hrtimer_start(&op->timer, op->kt_ival2, | ||
| 979 | HRTIMER_MODE_REL); | ||
| 980 | } | 969 | } |
| 981 | 970 | ||
| 982 | if (op->flags & TX_ANNOUNCE) | 971 | if (op->flags & TX_ANNOUNCE) { |
| 983 | bcm_can_tx(op); | 972 | bcm_can_tx(op); |
| 973 | if (op->count) | ||
| 974 | op->count--; | ||
| 975 | } | ||
| 976 | |||
| 977 | if (op->flags & STARTTIMER) | ||
| 978 | bcm_tx_start_timer(op); | ||
| 984 | 979 | ||
| 985 | return msg_head->nframes * CFSIZ + MHSIZ; | 980 | return msg_head->nframes * CFSIZ + MHSIZ; |
| 986 | } | 981 | } |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 21fab3edb92c..d73aab3fbfc0 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
| @@ -1389,9 +1389,7 @@ static int tcp_shifted_skb(struct sock *sk, struct sk_buff *skb, | |||
| 1389 | 1389 | ||
| 1390 | BUG_ON(!pcount); | 1390 | BUG_ON(!pcount); |
| 1391 | 1391 | ||
| 1392 | /* Tweak before seqno plays */ | 1392 | if (skb == tp->lost_skb_hint) |
| 1393 | if (!tcp_is_fack(tp) && tcp_is_sack(tp) && tp->lost_skb_hint && | ||
| 1394 | !before(TCP_SKB_CB(tp->lost_skb_hint)->seq, TCP_SKB_CB(skb)->seq)) | ||
| 1395 | tp->lost_cnt_hint += pcount; | 1393 | tp->lost_cnt_hint += pcount; |
| 1396 | 1394 | ||
| 1397 | TCP_SKB_CB(prev)->end_seq += shifted; | 1395 | TCP_SKB_CB(prev)->end_seq += shifted; |
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index c34f01513945..7963e03f1068 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
| @@ -927,18 +927,21 @@ int tcp_v4_md5_do_add(struct sock *sk, __be32 addr, | |||
| 927 | } | 927 | } |
| 928 | sk_nocaps_add(sk, NETIF_F_GSO_MASK); | 928 | sk_nocaps_add(sk, NETIF_F_GSO_MASK); |
| 929 | } | 929 | } |
| 930 | if (tcp_alloc_md5sig_pool(sk) == NULL) { | 930 | |
| 931 | md5sig = tp->md5sig_info; | ||
| 932 | if (md5sig->entries4 == 0 && | ||
| 933 | tcp_alloc_md5sig_pool(sk) == NULL) { | ||
| 931 | kfree(newkey); | 934 | kfree(newkey); |
| 932 | return -ENOMEM; | 935 | return -ENOMEM; |
| 933 | } | 936 | } |
| 934 | md5sig = tp->md5sig_info; | ||
| 935 | 937 | ||
| 936 | if (md5sig->alloced4 == md5sig->entries4) { | 938 | if (md5sig->alloced4 == md5sig->entries4) { |
| 937 | keys = kmalloc((sizeof(*keys) * | 939 | keys = kmalloc((sizeof(*keys) * |
| 938 | (md5sig->entries4 + 1)), GFP_ATOMIC); | 940 | (md5sig->entries4 + 1)), GFP_ATOMIC); |
| 939 | if (!keys) { | 941 | if (!keys) { |
| 940 | kfree(newkey); | 942 | kfree(newkey); |
| 941 | tcp_free_md5sig_pool(); | 943 | if (md5sig->entries4 == 0) |
| 944 | tcp_free_md5sig_pool(); | ||
| 942 | return -ENOMEM; | 945 | return -ENOMEM; |
| 943 | } | 946 | } |
| 944 | 947 | ||
| @@ -982,6 +985,7 @@ int tcp_v4_md5_do_del(struct sock *sk, __be32 addr) | |||
| 982 | kfree(tp->md5sig_info->keys4); | 985 | kfree(tp->md5sig_info->keys4); |
| 983 | tp->md5sig_info->keys4 = NULL; | 986 | tp->md5sig_info->keys4 = NULL; |
| 984 | tp->md5sig_info->alloced4 = 0; | 987 | tp->md5sig_info->alloced4 = 0; |
| 988 | tcp_free_md5sig_pool(); | ||
| 985 | } else if (tp->md5sig_info->entries4 != i) { | 989 | } else if (tp->md5sig_info->entries4 != i) { |
| 986 | /* Need to do some manipulation */ | 990 | /* Need to do some manipulation */ |
| 987 | memmove(&tp->md5sig_info->keys4[i], | 991 | memmove(&tp->md5sig_info->keys4[i], |
| @@ -989,7 +993,6 @@ int tcp_v4_md5_do_del(struct sock *sk, __be32 addr) | |||
| 989 | (tp->md5sig_info->entries4 - i) * | 993 | (tp->md5sig_info->entries4 - i) * |
| 990 | sizeof(struct tcp4_md5sig_key)); | 994 | sizeof(struct tcp4_md5sig_key)); |
| 991 | } | 995 | } |
| 992 | tcp_free_md5sig_pool(); | ||
| 993 | return 0; | 996 | return 0; |
| 994 | } | 997 | } |
| 995 | } | 998 | } |
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c index 3b5669a2582d..d27c797f9f05 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c | |||
| @@ -875,6 +875,7 @@ static struct sk_buff **ipv6_gro_receive(struct sk_buff **head, | |||
| 875 | skb_reset_transport_header(skb); | 875 | skb_reset_transport_header(skb); |
| 876 | __skb_push(skb, skb_gro_offset(skb)); | 876 | __skb_push(skb, skb_gro_offset(skb)); |
| 877 | 877 | ||
| 878 | ops = rcu_dereference(inet6_protos[proto]); | ||
| 878 | if (!ops || !ops->gro_receive) | 879 | if (!ops || !ops->gro_receive) |
| 879 | goto out_unlock; | 880 | goto out_unlock; |
| 880 | 881 | ||
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 3c9fa618b69d..7b8fc5794352 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c | |||
| @@ -591,7 +591,8 @@ static int tcp_v6_md5_do_add(struct sock *sk, const struct in6_addr *peer, | |||
| 591 | } | 591 | } |
| 592 | sk_nocaps_add(sk, NETIF_F_GSO_MASK); | 592 | sk_nocaps_add(sk, NETIF_F_GSO_MASK); |
| 593 | } | 593 | } |
| 594 | if (tcp_alloc_md5sig_pool(sk) == NULL) { | 594 | if (tp->md5sig_info->entries6 == 0 && |
| 595 | tcp_alloc_md5sig_pool(sk) == NULL) { | ||
| 595 | kfree(newkey); | 596 | kfree(newkey); |
| 596 | return -ENOMEM; | 597 | return -ENOMEM; |
| 597 | } | 598 | } |
| @@ -600,8 +601,9 @@ static int tcp_v6_md5_do_add(struct sock *sk, const struct in6_addr *peer, | |||
| 600 | (tp->md5sig_info->entries6 + 1)), GFP_ATOMIC); | 601 | (tp->md5sig_info->entries6 + 1)), GFP_ATOMIC); |
| 601 | 602 | ||
| 602 | if (!keys) { | 603 | if (!keys) { |
| 603 | tcp_free_md5sig_pool(); | ||
| 604 | kfree(newkey); | 604 | kfree(newkey); |
| 605 | if (tp->md5sig_info->entries6 == 0) | ||
| 606 | tcp_free_md5sig_pool(); | ||
| 605 | return -ENOMEM; | 607 | return -ENOMEM; |
| 606 | } | 608 | } |
| 607 | 609 | ||
| @@ -647,6 +649,7 @@ static int tcp_v6_md5_do_del(struct sock *sk, const struct in6_addr *peer) | |||
| 647 | kfree(tp->md5sig_info->keys6); | 649 | kfree(tp->md5sig_info->keys6); |
| 648 | tp->md5sig_info->keys6 = NULL; | 650 | tp->md5sig_info->keys6 = NULL; |
| 649 | tp->md5sig_info->alloced6 = 0; | 651 | tp->md5sig_info->alloced6 = 0; |
| 652 | tcp_free_md5sig_pool(); | ||
| 650 | } else { | 653 | } else { |
| 651 | /* shrink the database */ | 654 | /* shrink the database */ |
| 652 | if (tp->md5sig_info->entries6 != i) | 655 | if (tp->md5sig_info->entries6 != i) |
| @@ -655,7 +658,6 @@ static int tcp_v6_md5_do_del(struct sock *sk, const struct in6_addr *peer) | |||
| 655 | (tp->md5sig_info->entries6 - i) | 658 | (tp->md5sig_info->entries6 - i) |
| 656 | * sizeof (tp->md5sig_info->keys6[0])); | 659 | * sizeof (tp->md5sig_info->keys6[0])); |
| 657 | } | 660 | } |
| 658 | tcp_free_md5sig_pool(); | ||
| 659 | return 0; | 661 | return 0; |
| 660 | } | 662 | } |
| 661 | } | 663 | } |
| @@ -1383,6 +1385,8 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
| 1383 | newtp->af_specific = &tcp_sock_ipv6_mapped_specific; | 1385 | newtp->af_specific = &tcp_sock_ipv6_mapped_specific; |
| 1384 | #endif | 1386 | #endif |
| 1385 | 1387 | ||
| 1388 | newnp->ipv6_ac_list = NULL; | ||
| 1389 | newnp->ipv6_fl_list = NULL; | ||
| 1386 | newnp->pktoptions = NULL; | 1390 | newnp->pktoptions = NULL; |
| 1387 | newnp->opt = NULL; | 1391 | newnp->opt = NULL; |
| 1388 | newnp->mcast_oif = inet6_iif(skb); | 1392 | newnp->mcast_oif = inet6_iif(skb); |
| @@ -1447,6 +1451,7 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
| 1447 | First: no IPv4 options. | 1451 | First: no IPv4 options. |
| 1448 | */ | 1452 | */ |
| 1449 | newinet->inet_opt = NULL; | 1453 | newinet->inet_opt = NULL; |
| 1454 | newnp->ipv6_ac_list = NULL; | ||
| 1450 | newnp->ipv6_fl_list = NULL; | 1455 | newnp->ipv6_fl_list = NULL; |
| 1451 | 1456 | ||
| 1452 | /* Clone RX bits */ | 1457 | /* Clone RX bits */ |
diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c index 2b771dc708a3..5290ac353a5e 100644 --- a/net/netfilter/ipvs/ip_vs_ctl.c +++ b/net/netfilter/ipvs/ip_vs_ctl.c | |||
| @@ -3679,7 +3679,7 @@ int __net_init ip_vs_control_net_init(struct net *net) | |||
| 3679 | int idx; | 3679 | int idx; |
| 3680 | struct netns_ipvs *ipvs = net_ipvs(net); | 3680 | struct netns_ipvs *ipvs = net_ipvs(net); |
| 3681 | 3681 | ||
| 3682 | ipvs->rs_lock = __RW_LOCK_UNLOCKED(ipvs->rs_lock); | 3682 | rwlock_init(&ipvs->rs_lock); |
| 3683 | 3683 | ||
| 3684 | /* Initialize rs_table */ | 3684 | /* Initialize rs_table */ |
| 3685 | for (idx = 0; idx < IP_VS_RTAB_SIZE; idx++) | 3685 | for (idx = 0; idx < IP_VS_RTAB_SIZE; idx++) |
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index c698cec0a445..fabb4fafa281 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c | |||
| @@ -961,7 +961,10 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev, | |||
| 961 | return 0; | 961 | return 0; |
| 962 | 962 | ||
| 963 | drop_n_acct: | 963 | drop_n_acct: |
| 964 | po->stats.tp_drops = atomic_inc_return(&sk->sk_drops); | 964 | spin_lock(&sk->sk_receive_queue.lock); |
| 965 | po->stats.tp_drops++; | ||
| 966 | atomic_inc(&sk->sk_drops); | ||
| 967 | spin_unlock(&sk->sk_receive_queue.lock); | ||
| 965 | 968 | ||
| 966 | drop_n_restore: | 969 | drop_n_restore: |
| 967 | if (skb_head != skb->data && skb_shared(skb)) { | 970 | if (skb_head != skb->data && skb_shared(skb)) { |
diff --git a/net/rds/iw_rdma.c b/net/rds/iw_rdma.c index 8b77edbab272..4e1de171866c 100644 --- a/net/rds/iw_rdma.c +++ b/net/rds/iw_rdma.c | |||
| @@ -84,7 +84,8 @@ static int rds_iw_map_fastreg(struct rds_iw_mr_pool *pool, | |||
| 84 | static void rds_iw_free_fastreg(struct rds_iw_mr_pool *pool, struct rds_iw_mr *ibmr); | 84 | static void rds_iw_free_fastreg(struct rds_iw_mr_pool *pool, struct rds_iw_mr *ibmr); |
| 85 | static unsigned int rds_iw_unmap_fastreg_list(struct rds_iw_mr_pool *pool, | 85 | static unsigned int rds_iw_unmap_fastreg_list(struct rds_iw_mr_pool *pool, |
| 86 | struct list_head *unmap_list, | 86 | struct list_head *unmap_list, |
| 87 | struct list_head *kill_list); | 87 | struct list_head *kill_list, |
| 88 | int *unpinned); | ||
| 88 | static void rds_iw_destroy_fastreg(struct rds_iw_mr_pool *pool, struct rds_iw_mr *ibmr); | 89 | static void rds_iw_destroy_fastreg(struct rds_iw_mr_pool *pool, struct rds_iw_mr *ibmr); |
| 89 | 90 | ||
| 90 | static int rds_iw_get_device(struct rds_sock *rs, struct rds_iw_device **rds_iwdev, struct rdma_cm_id **cm_id) | 91 | static int rds_iw_get_device(struct rds_sock *rs, struct rds_iw_device **rds_iwdev, struct rdma_cm_id **cm_id) |
| @@ -499,7 +500,7 @@ static int rds_iw_flush_mr_pool(struct rds_iw_mr_pool *pool, int free_all) | |||
| 499 | LIST_HEAD(unmap_list); | 500 | LIST_HEAD(unmap_list); |
| 500 | LIST_HEAD(kill_list); | 501 | LIST_HEAD(kill_list); |
| 501 | unsigned long flags; | 502 | unsigned long flags; |
| 502 | unsigned int nfreed = 0, ncleaned = 0, free_goal; | 503 | unsigned int nfreed = 0, ncleaned = 0, unpinned = 0, free_goal; |
| 503 | int ret = 0; | 504 | int ret = 0; |
| 504 | 505 | ||
| 505 | rds_iw_stats_inc(s_iw_rdma_mr_pool_flush); | 506 | rds_iw_stats_inc(s_iw_rdma_mr_pool_flush); |
| @@ -524,7 +525,8 @@ static int rds_iw_flush_mr_pool(struct rds_iw_mr_pool *pool, int free_all) | |||
| 524 | * will be destroyed by the unmap function. | 525 | * will be destroyed by the unmap function. |
| 525 | */ | 526 | */ |
| 526 | if (!list_empty(&unmap_list)) { | 527 | if (!list_empty(&unmap_list)) { |
| 527 | ncleaned = rds_iw_unmap_fastreg_list(pool, &unmap_list, &kill_list); | 528 | ncleaned = rds_iw_unmap_fastreg_list(pool, &unmap_list, |
| 529 | &kill_list, &unpinned); | ||
| 528 | /* If we've been asked to destroy all MRs, move those | 530 | /* If we've been asked to destroy all MRs, move those |
| 529 | * that were simply cleaned to the kill list */ | 531 | * that were simply cleaned to the kill list */ |
| 530 | if (free_all) | 532 | if (free_all) |
| @@ -548,6 +550,7 @@ static int rds_iw_flush_mr_pool(struct rds_iw_mr_pool *pool, int free_all) | |||
| 548 | spin_unlock_irqrestore(&pool->list_lock, flags); | 550 | spin_unlock_irqrestore(&pool->list_lock, flags); |
| 549 | } | 551 | } |
| 550 | 552 | ||
| 553 | atomic_sub(unpinned, &pool->free_pinned); | ||
| 551 | atomic_sub(ncleaned, &pool->dirty_count); | 554 | atomic_sub(ncleaned, &pool->dirty_count); |
| 552 | atomic_sub(nfreed, &pool->item_count); | 555 | atomic_sub(nfreed, &pool->item_count); |
| 553 | 556 | ||
| @@ -828,7 +831,8 @@ static void rds_iw_free_fastreg(struct rds_iw_mr_pool *pool, | |||
| 828 | 831 | ||
| 829 | static unsigned int rds_iw_unmap_fastreg_list(struct rds_iw_mr_pool *pool, | 832 | static unsigned int rds_iw_unmap_fastreg_list(struct rds_iw_mr_pool *pool, |
| 830 | struct list_head *unmap_list, | 833 | struct list_head *unmap_list, |
| 831 | struct list_head *kill_list) | 834 | struct list_head *kill_list, |
| 835 | int *unpinned) | ||
| 832 | { | 836 | { |
| 833 | struct rds_iw_mapping *mapping, *next; | 837 | struct rds_iw_mapping *mapping, *next; |
| 834 | unsigned int ncleaned = 0; | 838 | unsigned int ncleaned = 0; |
| @@ -855,6 +859,7 @@ static unsigned int rds_iw_unmap_fastreg_list(struct rds_iw_mr_pool *pool, | |||
| 855 | 859 | ||
| 856 | spin_lock_irqsave(&pool->list_lock, flags); | 860 | spin_lock_irqsave(&pool->list_lock, flags); |
| 857 | list_for_each_entry_safe(mapping, next, unmap_list, m_list) { | 861 | list_for_each_entry_safe(mapping, next, unmap_list, m_list) { |
| 862 | *unpinned += mapping->m_sg.len; | ||
| 858 | list_move(&mapping->m_list, &laundered); | 863 | list_move(&mapping->m_list, &laundered); |
| 859 | ncleaned++; | 864 | ncleaned++; |
| 860 | } | 865 | } |
