On Mon, 2012-02-27 at 14:22 -0500, Neil Horman wrote:
> commit e7a51997dad4e17395be1209970e18d2e9305b24 added a skb flush to the
> fcoe_rx_list, which ensures that we push any pending frames on the list 
> through
> the per-cpu receive thread.  Because of this, its redundant to lock and scan 
> the
> list first, dropping any arriving frames.

Good cleanup, in fact this was not needed before above mentioned commit
also. 

Acked-by: Vasu Dev <[email protected]>


> 
> Signed-off-by: Neil Horman <[email protected]>
> CC: Robert Love <[email protected]>
> CC: Vasu Dev <[email protected]>
> CC: "James E.J. Bottomley" <[email protected]>
> ---
>  drivers/scsi/fcoe/fcoe.c |   22 +++-------------------
>  1 files changed, 3 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
> index 787d5a0..dc5597b 100644
> --- a/drivers/scsi/fcoe/fcoe.c
> +++ b/drivers/scsi/fcoe/fcoe.c
> @@ -2246,31 +2246,14 @@ static int fcoe_link_ok(struct fc_lport *lport)
>  static void fcoe_percpu_clean(struct fc_lport *lport)
>  {
>       struct fcoe_percpu_s *pp;
> -     struct fcoe_rcv_info *fr;
> -     struct sk_buff_head *list;
> -     struct sk_buff *skb, *next;
> -     struct sk_buff *head;
> +     struct sk_buff *skb;
>       unsigned int cpu;
>  
>       for_each_possible_cpu(cpu) {
>               pp = &per_cpu(fcoe_percpu, cpu);
> -             spin_lock_bh(&pp->fcoe_rx_list.lock);
> -             list = &pp->fcoe_rx_list;
> -             head = list->next;
> -             for (skb = head; skb != (struct sk_buff *)list;
> -                  skb = next) {
> -                     next = skb->next;
> -                     fr = fcoe_dev_from_skb(skb);
> -                     if (fr->fr_dev == lport) {
> -                             __skb_unlink(skb, list);
> -                             kfree_skb(skb);
> -                     }
> -             }
>  
> -             if (!pp->thread || !cpu_online(cpu)) {
> -                     spin_unlock_bh(&pp->fcoe_rx_list.lock);
> +             if (!pp->thread || !cpu_online(cpu))
>                       continue;
> -             }
>  
>               skb = dev_alloc_skb(0);
>               if (!skb) {
> @@ -2279,6 +2262,7 @@ static void fcoe_percpu_clean(struct fc_lport *lport)
>               }
>               skb->destructor = fcoe_percpu_flush_done;
>  
> +             spin_lock_bh(&pp->fcoe_rx_list.lock);
>               __skb_queue_tail(&pp->fcoe_rx_list, skb);
>               if (pp->fcoe_rx_list.qlen == 1)
>                       wake_up_process(pp->thread);


_______________________________________________
devel mailing list
[email protected]
https://lists.open-fcoe.org/mailman/listinfo/devel

Reply via email to