diff options
| -rw-r--r-- | drivers/scsi/fcoe/fcoe.c | 108 | ||||
| -rw-r--r-- | drivers/scsi/fcoe/fcoe.h | 24 |
2 files changed, 77 insertions, 55 deletions
diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c index c15878e88157..0a5609bb5817 100644 --- a/drivers/scsi/fcoe/fcoe.c +++ b/drivers/scsi/fcoe/fcoe.c | |||
| @@ -45,8 +45,6 @@ | |||
| 45 | 45 | ||
| 46 | #include "fcoe.h" | 46 | #include "fcoe.h" |
| 47 | 47 | ||
| 48 | static int debug_fcoe; | ||
| 49 | |||
| 50 | MODULE_AUTHOR("Open-FCoE.org"); | 48 | MODULE_AUTHOR("Open-FCoE.org"); |
| 51 | MODULE_DESCRIPTION("FCoE"); | 49 | MODULE_DESCRIPTION("FCoE"); |
| 52 | MODULE_LICENSE("GPL v2"); | 50 | MODULE_LICENSE("GPL v2"); |
| @@ -305,23 +303,22 @@ static int fcoe_netdev_config(struct fc_lport *lp, struct net_device *netdev) | |||
| 305 | #ifdef NETIF_F_FCOE_CRC | 303 | #ifdef NETIF_F_FCOE_CRC |
| 306 | if (netdev->features & NETIF_F_FCOE_CRC) { | 304 | if (netdev->features & NETIF_F_FCOE_CRC) { |
| 307 | lp->crc_offload = 1; | 305 | lp->crc_offload = 1; |
| 308 | printk(KERN_DEBUG "fcoe:%s supports FCCRC offload\n", | 306 | FCOE_NETDEV_DBG(netdev, "Supports FCCRC offload\n"); |
| 309 | netdev->name); | ||
| 310 | } | 307 | } |
| 311 | #endif | 308 | #endif |
| 312 | #ifdef NETIF_F_FSO | 309 | #ifdef NETIF_F_FSO |
| 313 | if (netdev->features & NETIF_F_FSO) { | 310 | if (netdev->features & NETIF_F_FSO) { |
| 314 | lp->seq_offload = 1; | 311 | lp->seq_offload = 1; |
| 315 | lp->lso_max = netdev->gso_max_size; | 312 | lp->lso_max = netdev->gso_max_size; |
| 316 | printk(KERN_DEBUG "fcoe:%s supports LSO for max len 0x%x\n", | 313 | FCOE_NETDEV_DBG(netdev, "Supports LSO for max len 0x%x\n", |
| 317 | netdev->name, lp->lso_max); | 314 | lp->lso_max); |
| 318 | } | 315 | } |
| 319 | #endif | 316 | #endif |
| 320 | if (netdev->fcoe_ddp_xid) { | 317 | if (netdev->fcoe_ddp_xid) { |
| 321 | lp->lro_enabled = 1; | 318 | lp->lro_enabled = 1; |
| 322 | lp->lro_xid = netdev->fcoe_ddp_xid; | 319 | lp->lro_xid = netdev->fcoe_ddp_xid; |
| 323 | printk(KERN_DEBUG "fcoe:%s supports LRO for max xid 0x%x\n", | 320 | FCOE_NETDEV_DBG(netdev, "Supports LRO for max xid 0x%x\n", |
| 324 | netdev->name, lp->lro_xid); | 321 | lp->lro_xid); |
| 325 | } | 322 | } |
| 326 | skb_queue_head_init(&fc->fcoe_pending_queue); | 323 | skb_queue_head_init(&fc->fcoe_pending_queue); |
| 327 | fc->fcoe_pending_queue_active = 0; | 324 | fc->fcoe_pending_queue_active = 0; |
| @@ -407,7 +404,8 @@ static int fcoe_shost_config(struct fc_lport *lp, struct Scsi_Host *shost, | |||
| 407 | /* add the new host to the SCSI-ml */ | 404 | /* add the new host to the SCSI-ml */ |
| 408 | rc = scsi_add_host(lp->host, dev); | 405 | rc = scsi_add_host(lp->host, dev); |
| 409 | if (rc) { | 406 | if (rc) { |
| 410 | FC_DBG("fcoe_shost_config:error on scsi_add_host\n"); | 407 | FCOE_NETDEV_DBG(fcoe_netdev(lp), "fcoe_shost_config: " |
| 408 | "error on scsi_add_host\n"); | ||
| 411 | return rc; | 409 | return rc; |
| 412 | } | 410 | } |
| 413 | sprintf(fc_host_symbolic_name(lp->host), "%s v%s over %s", | 411 | sprintf(fc_host_symbolic_name(lp->host), "%s v%s over %s", |
| @@ -448,8 +446,7 @@ static int fcoe_if_destroy(struct net_device *netdev) | |||
| 448 | 446 | ||
| 449 | BUG_ON(!netdev); | 447 | BUG_ON(!netdev); |
| 450 | 448 | ||
| 451 | printk(KERN_DEBUG "fcoe_if_destroy:interface on %s\n", | 449 | FCOE_NETDEV_DBG(netdev, "Destroying interface\n"); |
| 452 | netdev->name); | ||
| 453 | 450 | ||
| 454 | lp = fcoe_hostlist_lookup(netdev); | 451 | lp = fcoe_hostlist_lookup(netdev); |
| 455 | if (!lp) | 452 | if (!lp) |
| @@ -560,8 +557,7 @@ static int fcoe_if_create(struct net_device *netdev) | |||
| 560 | 557 | ||
| 561 | BUG_ON(!netdev); | 558 | BUG_ON(!netdev); |
| 562 | 559 | ||
| 563 | printk(KERN_DEBUG "fcoe_if_create:interface on %s\n", | 560 | FCOE_NETDEV_DBG(netdev, "Create Interface\n"); |
| 564 | netdev->name); | ||
| 565 | 561 | ||
| 566 | lp = fcoe_hostlist_lookup(netdev); | 562 | lp = fcoe_hostlist_lookup(netdev); |
| 567 | if (lp) | 563 | if (lp) |
| @@ -570,7 +566,7 @@ static int fcoe_if_create(struct net_device *netdev) | |||
| 570 | shost = libfc_host_alloc(&fcoe_shost_template, | 566 | shost = libfc_host_alloc(&fcoe_shost_template, |
| 571 | sizeof(struct fcoe_softc)); | 567 | sizeof(struct fcoe_softc)); |
| 572 | if (!shost) { | 568 | if (!shost) { |
| 573 | FC_DBG("Could not allocate host structure\n"); | 569 | FCOE_NETDEV_DBG(netdev, "Could not allocate host structure\n"); |
| 574 | return -ENOMEM; | 570 | return -ENOMEM; |
| 575 | } | 571 | } |
| 576 | lp = shost_priv(shost); | 572 | lp = shost_priv(shost); |
| @@ -579,7 +575,8 @@ static int fcoe_if_create(struct net_device *netdev) | |||
| 579 | /* configure fc_lport, e.g., em */ | 575 | /* configure fc_lport, e.g., em */ |
| 580 | rc = fcoe_lport_config(lp); | 576 | rc = fcoe_lport_config(lp); |
| 581 | if (rc) { | 577 | if (rc) { |
| 582 | FC_DBG("Could not configure lport\n"); | 578 | FCOE_NETDEV_DBG(netdev, "Could not configure lport for the " |
| 579 | "interface\n"); | ||
| 583 | goto out_host_put; | 580 | goto out_host_put; |
| 584 | } | 581 | } |
| 585 | 582 | ||
| @@ -593,28 +590,32 @@ static int fcoe_if_create(struct net_device *netdev) | |||
| 593 | /* configure lport network properties */ | 590 | /* configure lport network properties */ |
| 594 | rc = fcoe_netdev_config(lp, netdev); | 591 | rc = fcoe_netdev_config(lp, netdev); |
| 595 | if (rc) { | 592 | if (rc) { |
| 596 | FC_DBG("Could not configure netdev for the interface\n"); | 593 | FCOE_NETDEV_DBG(netdev, "Could not configure netdev for the " |
| 594 | "interface\n"); | ||
| 597 | goto out_netdev_cleanup; | 595 | goto out_netdev_cleanup; |
| 598 | } | 596 | } |
| 599 | 597 | ||
| 600 | /* configure lport scsi host properties */ | 598 | /* configure lport scsi host properties */ |
| 601 | rc = fcoe_shost_config(lp, shost, &netdev->dev); | 599 | rc = fcoe_shost_config(lp, shost, &netdev->dev); |
| 602 | if (rc) { | 600 | if (rc) { |
| 603 | FC_DBG("Could not configure shost for lport\n"); | 601 | FCOE_NETDEV_DBG(netdev, "Could not configure shost for the " |
| 602 | "interface\n"); | ||
| 604 | goto out_netdev_cleanup; | 603 | goto out_netdev_cleanup; |
| 605 | } | 604 | } |
| 606 | 605 | ||
| 607 | /* lport exch manager allocation */ | 606 | /* lport exch manager allocation */ |
| 608 | rc = fcoe_em_config(lp); | 607 | rc = fcoe_em_config(lp); |
| 609 | if (rc) { | 608 | if (rc) { |
| 610 | FC_DBG("Could not configure em for lport\n"); | 609 | FCOE_NETDEV_DBG(netdev, "Could not configure the EM for the " |
| 610 | "interface\n"); | ||
| 611 | goto out_netdev_cleanup; | 611 | goto out_netdev_cleanup; |
| 612 | } | 612 | } |
| 613 | 613 | ||
| 614 | /* Initialize the library */ | 614 | /* Initialize the library */ |
| 615 | rc = fcoe_libfc_config(lp, &fcoe_libfc_fcn_templ); | 615 | rc = fcoe_libfc_config(lp, &fcoe_libfc_fcn_templ); |
| 616 | if (rc) { | 616 | if (rc) { |
| 617 | FC_DBG("Could not configure libfc for lport!\n"); | 617 | FCOE_NETDEV_DBG(netdev, "Could not configure libfc for the " |
| 618 | "interface\n"); | ||
| 618 | goto out_lp_destroy; | 619 | goto out_lp_destroy; |
| 619 | } | 620 | } |
| 620 | 621 | ||
| @@ -653,7 +654,7 @@ static int __init fcoe_if_init(void) | |||
| 653 | fc_attach_transport(&fcoe_transport_function); | 654 | fc_attach_transport(&fcoe_transport_function); |
| 654 | 655 | ||
| 655 | if (!scsi_transport_fcoe_sw) { | 656 | if (!scsi_transport_fcoe_sw) { |
| 656 | printk(KERN_ERR "fcoe_init:fc_attach_transport() failed\n"); | 657 | printk(KERN_ERR "fcoe: Failed to attach to the FC transport\n"); |
| 657 | return -ENODEV; | 658 | return -ENODEV; |
| 658 | } | 659 | } |
| 659 | 660 | ||
| @@ -714,7 +715,7 @@ static void fcoe_percpu_thread_destroy(unsigned int cpu) | |||
| 714 | unsigned targ_cpu = smp_processor_id(); | 715 | unsigned targ_cpu = smp_processor_id(); |
| 715 | #endif /* CONFIG_SMP */ | 716 | #endif /* CONFIG_SMP */ |
| 716 | 717 | ||
| 717 | printk(KERN_DEBUG "fcoe: Destroying receive thread for CPU %d\n", cpu); | 718 | FCOE_DBG("Destroying receive thread for CPU %d\n", cpu); |
| 718 | 719 | ||
| 719 | /* Prevent any new skbs from being queued for this CPU. */ | 720 | /* Prevent any new skbs from being queued for this CPU. */ |
| 720 | p = &per_cpu(fcoe_percpu, cpu); | 721 | p = &per_cpu(fcoe_percpu, cpu); |
| @@ -736,8 +737,8 @@ static void fcoe_percpu_thread_destroy(unsigned int cpu) | |||
| 736 | p0 = &per_cpu(fcoe_percpu, targ_cpu); | 737 | p0 = &per_cpu(fcoe_percpu, targ_cpu); |
| 737 | spin_lock_bh(&p0->fcoe_rx_list.lock); | 738 | spin_lock_bh(&p0->fcoe_rx_list.lock); |
| 738 | if (p0->thread) { | 739 | if (p0->thread) { |
| 739 | FC_DBG("Moving frames from CPU %d to CPU %d\n", | 740 | FCOE_DBG("Moving frames from CPU %d to CPU %d\n", |
| 740 | cpu, targ_cpu); | 741 | cpu, targ_cpu); |
| 741 | 742 | ||
| 742 | while ((skb = __skb_dequeue(&p->fcoe_rx_list)) != NULL) | 743 | while ((skb = __skb_dequeue(&p->fcoe_rx_list)) != NULL) |
| 743 | __skb_queue_tail(&p0->fcoe_rx_list, skb); | 744 | __skb_queue_tail(&p0->fcoe_rx_list, skb); |
| @@ -803,12 +804,12 @@ static int fcoe_cpu_callback(struct notifier_block *nfb, | |||
| 803 | switch (action) { | 804 | switch (action) { |
| 804 | case CPU_ONLINE: | 805 | case CPU_ONLINE: |
| 805 | case CPU_ONLINE_FROZEN: | 806 | case CPU_ONLINE_FROZEN: |
| 806 | FC_DBG("CPU %x online: Create Rx thread\n", cpu); | 807 | FCOE_DBG("CPU %x online: Create Rx thread\n", cpu); |
| 807 | fcoe_percpu_thread_create(cpu); | 808 | fcoe_percpu_thread_create(cpu); |
| 808 | break; | 809 | break; |
| 809 | case CPU_DEAD: | 810 | case CPU_DEAD: |
| 810 | case CPU_DEAD_FROZEN: | 811 | case CPU_DEAD_FROZEN: |
| 811 | FC_DBG("CPU %x offline: Remove Rx thread\n", cpu); | 812 | FCOE_DBG("CPU %x offline: Remove Rx thread\n", cpu); |
| 812 | fcoe_percpu_thread_destroy(cpu); | 813 | fcoe_percpu_thread_destroy(cpu); |
| 813 | break; | 814 | break; |
| 814 | default: | 815 | default: |
| @@ -846,24 +847,21 @@ int fcoe_rcv(struct sk_buff *skb, struct net_device *dev, | |||
| 846 | fc = container_of(ptype, struct fcoe_softc, fcoe_packet_type); | 847 | fc = container_of(ptype, struct fcoe_softc, fcoe_packet_type); |
| 847 | lp = fc->ctlr.lp; | 848 | lp = fc->ctlr.lp; |
| 848 | if (unlikely(lp == NULL)) { | 849 | if (unlikely(lp == NULL)) { |
| 849 | FC_DBG("cannot find hba structure"); | 850 | FCOE_NETDEV_DBG(dev, "Cannot find hba structure"); |
| 850 | goto err2; | 851 | goto err2; |
| 851 | } | 852 | } |
| 852 | if (!lp->link_up) | 853 | if (!lp->link_up) |
| 853 | goto err2; | 854 | goto err2; |
| 854 | 855 | ||
| 855 | if (unlikely(debug_fcoe)) { | 856 | FCOE_NETDEV_DBG(dev, "skb_info: len:%d data_len:%d head:%p " |
| 856 | FC_DBG("skb_info: len:%d data_len:%d head:%p data:%p tail:%p " | 857 | "data:%p tail:%p end:%p sum:%d dev:%s", |
| 857 | "end:%p sum:%d dev:%s", skb->len, skb->data_len, | 858 | skb->len, skb->data_len, skb->head, skb->data, |
| 858 | skb->head, skb->data, skb_tail_pointer(skb), | 859 | skb_tail_pointer(skb), skb_end_pointer(skb), |
| 859 | skb_end_pointer(skb), skb->csum, | 860 | skb->csum, skb->dev ? skb->dev->name : "<NULL>"); |
| 860 | skb->dev ? skb->dev->name : "<NULL>"); | ||
| 861 | |||
| 862 | } | ||
| 863 | 861 | ||
| 864 | /* check for FCOE packet type */ | 862 | /* check for FCOE packet type */ |
| 865 | if (unlikely(eth_hdr(skb)->h_proto != htons(ETH_P_FCOE))) { | 863 | if (unlikely(eth_hdr(skb)->h_proto != htons(ETH_P_FCOE))) { |
| 866 | FC_DBG("wrong FC type frame"); | 864 | FCOE_NETDEV_DBG(dev, "Wrong FC type frame"); |
| 867 | goto err; | 865 | goto err; |
| 868 | } | 866 | } |
| 869 | 867 | ||
| @@ -901,8 +899,9 @@ int fcoe_rcv(struct sk_buff *skb, struct net_device *dev, | |||
| 901 | * the first CPU now. For non-SMP systems this | 899 | * the first CPU now. For non-SMP systems this |
| 902 | * will check the same CPU twice. | 900 | * will check the same CPU twice. |
| 903 | */ | 901 | */ |
| 904 | FC_DBG("CPU is online, but no receive thread ready " | 902 | FCOE_NETDEV_DBG(dev, "CPU is online, but no receive thread " |
| 905 | "for incoming skb- using first online CPU.\n"); | 903 | "ready for incoming skb- using first online " |
| 904 | "CPU.\n"); | ||
| 906 | 905 | ||
| 907 | spin_unlock_bh(&fps->fcoe_rx_list.lock); | 906 | spin_unlock_bh(&fps->fcoe_rx_list.lock); |
| 908 | cpu = first_cpu(cpu_online_map); | 907 | cpu = first_cpu(cpu_online_map); |
| @@ -1201,19 +1200,17 @@ int fcoe_percpu_receive_thread(void *arg) | |||
| 1201 | fr = fcoe_dev_from_skb(skb); | 1200 | fr = fcoe_dev_from_skb(skb); |
| 1202 | lp = fr->fr_dev; | 1201 | lp = fr->fr_dev; |
| 1203 | if (unlikely(lp == NULL)) { | 1202 | if (unlikely(lp == NULL)) { |
| 1204 | FC_DBG("invalid HBA Structure"); | 1203 | FCOE_NETDEV_DBG(skb->dev, "Invalid HBA Structure"); |
| 1205 | kfree_skb(skb); | 1204 | kfree_skb(skb); |
| 1206 | continue; | 1205 | continue; |
| 1207 | } | 1206 | } |
| 1208 | 1207 | ||
| 1209 | if (unlikely(debug_fcoe)) { | 1208 | FCOE_NETDEV_DBG(skb->dev, "skb_info: len:%d data_len:%d " |
| 1210 | FC_DBG("skb_info: len:%d data_len:%d head:%p data:%p " | 1209 | "head:%p data:%p tail:%p end:%p sum:%d dev:%s", |
| 1211 | "tail:%p end:%p sum:%d dev:%s", | 1210 | skb->len, skb->data_len, |
| 1212 | skb->len, skb->data_len, | 1211 | skb->head, skb->data, skb_tail_pointer(skb), |
| 1213 | skb->head, skb->data, skb_tail_pointer(skb), | 1212 | skb_end_pointer(skb), skb->csum, |
| 1214 | skb_end_pointer(skb), skb->csum, | 1213 | skb->dev ? skb->dev->name : "<NULL>"); |
| 1215 | skb->dev ? skb->dev->name : "<NULL>"); | ||
| 1216 | } | ||
| 1217 | 1214 | ||
| 1218 | /* | 1215 | /* |
| 1219 | * Save source MAC address before discarding header. | 1216 | * Save source MAC address before discarding header. |
| @@ -1233,7 +1230,7 @@ int fcoe_percpu_receive_thread(void *arg) | |||
| 1233 | stats = fc_lport_get_stats(lp); | 1230 | stats = fc_lport_get_stats(lp); |
| 1234 | if (unlikely(FC_FCOE_DECAPS_VER(hp) != FC_FCOE_VER)) { | 1231 | if (unlikely(FC_FCOE_DECAPS_VER(hp) != FC_FCOE_VER)) { |
| 1235 | if (stats->ErrorFrames < 5) | 1232 | if (stats->ErrorFrames < 5) |
| 1236 | printk(KERN_WARNING "FCoE version " | 1233 | printk(KERN_WARNING "fcoe: FCoE version " |
| 1237 | "mismatch: The frame has " | 1234 | "mismatch: The frame has " |
| 1238 | "version %x, but the " | 1235 | "version %x, but the " |
| 1239 | "initiator supports version " | 1236 | "initiator supports version " |
| @@ -1286,7 +1283,7 @@ int fcoe_percpu_receive_thread(void *arg) | |||
| 1286 | if (fr_flags(fp) & FCPHF_CRC_UNCHECKED) { | 1283 | if (fr_flags(fp) & FCPHF_CRC_UNCHECKED) { |
| 1287 | if (le32_to_cpu(fr_crc(fp)) != | 1284 | if (le32_to_cpu(fr_crc(fp)) != |
| 1288 | ~crc32(~0, skb->data, fr_len)) { | 1285 | ~crc32(~0, skb->data, fr_len)) { |
| 1289 | if (debug_fcoe || stats->InvalidCRCCount < 5) | 1286 | if (stats->InvalidCRCCount < 5) |
| 1290 | printk(KERN_WARNING "fcoe: dropping " | 1287 | printk(KERN_WARNING "fcoe: dropping " |
| 1291 | "frame with CRC error\n"); | 1288 | "frame with CRC error\n"); |
| 1292 | stats->InvalidCRCCount++; | 1289 | stats->InvalidCRCCount++; |
| @@ -1432,7 +1429,8 @@ static int fcoe_device_notification(struct notifier_block *notifier, | |||
| 1432 | case NETDEV_REGISTER: | 1429 | case NETDEV_REGISTER: |
| 1433 | break; | 1430 | break; |
| 1434 | default: | 1431 | default: |
| 1435 | FC_DBG("Unknown event %ld from netdev netlink\n", event); | 1432 | FCOE_NETDEV_DBG(real_dev, "Unknown event %ld " |
| 1433 | "from netdev netlink\n", event); | ||
| 1436 | } | 1434 | } |
| 1437 | if (link_possible && !fcoe_link_ok(lp)) | 1435 | if (link_possible && !fcoe_link_ok(lp)) |
| 1438 | fcoe_ctlr_link_up(&fc->ctlr); | 1436 | fcoe_ctlr_link_up(&fc->ctlr); |
| @@ -1505,8 +1503,8 @@ static int fcoe_ethdrv_get(const struct net_device *netdev) | |||
| 1505 | 1503 | ||
| 1506 | owner = fcoe_netdev_to_module_owner(netdev); | 1504 | owner = fcoe_netdev_to_module_owner(netdev); |
| 1507 | if (owner) { | 1505 | if (owner) { |
| 1508 | printk(KERN_DEBUG "fcoe:hold driver module %s for %s\n", | 1506 | FCOE_NETDEV_DBG(netdev, "Hold driver module %s\n", |
| 1509 | module_name(owner), netdev->name); | 1507 | module_name(owner)); |
| 1510 | return try_module_get(owner); | 1508 | return try_module_get(owner); |
| 1511 | } | 1509 | } |
| 1512 | return -ENODEV; | 1510 | return -ENODEV; |
| @@ -1527,8 +1525,8 @@ static int fcoe_ethdrv_put(const struct net_device *netdev) | |||
| 1527 | 1525 | ||
| 1528 | owner = fcoe_netdev_to_module_owner(netdev); | 1526 | owner = fcoe_netdev_to_module_owner(netdev); |
| 1529 | if (owner) { | 1527 | if (owner) { |
| 1530 | printk(KERN_DEBUG "fcoe:release driver module %s for %s\n", | 1528 | FCOE_NETDEV_DBG(netdev, "Release driver module %s\n", |
| 1531 | module_name(owner), netdev->name); | 1529 | module_name(owner)); |
| 1532 | module_put(owner); | 1530 | module_put(owner); |
| 1533 | return 0; | 1531 | return 0; |
| 1534 | } | 1532 | } |
| @@ -1559,7 +1557,7 @@ static int fcoe_destroy(const char *buffer, struct kernel_param *kp) | |||
| 1559 | } | 1557 | } |
| 1560 | rc = fcoe_if_destroy(netdev); | 1558 | rc = fcoe_if_destroy(netdev); |
| 1561 | if (rc) { | 1559 | if (rc) { |
| 1562 | printk(KERN_ERR "fcoe: fcoe_if_destroy(%s) failed\n", | 1560 | printk(KERN_ERR "fcoe: Failed to destroy interface (%s)\n", |
| 1563 | netdev->name); | 1561 | netdev->name); |
| 1564 | rc = -EIO; | 1562 | rc = -EIO; |
| 1565 | goto out_putdev; | 1563 | goto out_putdev; |
| @@ -1598,7 +1596,7 @@ static int fcoe_create(const char *buffer, struct kernel_param *kp) | |||
| 1598 | 1596 | ||
| 1599 | rc = fcoe_if_create(netdev); | 1597 | rc = fcoe_if_create(netdev); |
| 1600 | if (rc) { | 1598 | if (rc) { |
| 1601 | printk(KERN_ERR "fcoe: fcoe_if_create(%s) failed\n", | 1599 | printk(KERN_ERR "fcoe: Failed to create interface (%s)\n", |
| 1602 | netdev->name); | 1600 | netdev->name); |
| 1603 | fcoe_ethdrv_put(netdev); | 1601 | fcoe_ethdrv_put(netdev); |
| 1604 | rc = -EIO; | 1602 | rc = -EIO; |
diff --git a/drivers/scsi/fcoe/fcoe.h b/drivers/scsi/fcoe/fcoe.h index a1eb8c1988b0..0d724fa0898f 100644 --- a/drivers/scsi/fcoe/fcoe.h +++ b/drivers/scsi/fcoe/fcoe.h | |||
| @@ -40,6 +40,30 @@ | |||
| 40 | #define FCOE_MIN_XID 0x0001 /* the min xid supported by fcoe_sw */ | 40 | #define FCOE_MIN_XID 0x0001 /* the min xid supported by fcoe_sw */ |
| 41 | #define FCOE_MAX_XID 0x07ef /* the max xid supported by fcoe_sw */ | 41 | #define FCOE_MAX_XID 0x07ef /* the max xid supported by fcoe_sw */ |
| 42 | 42 | ||
| 43 | unsigned int fcoe_debug_logging; | ||
| 44 | module_param_named(debug_logging, fcoe_debug_logging, int, S_IRUGO|S_IWUSR); | ||
| 45 | MODULE_PARM_DESC(debug_logging, "a bit mask of logging levels"); | ||
| 46 | |||
| 47 | #define FCOE_LOGGING 0x01 /* General logging, not categorized */ | ||
| 48 | #define FCOE_NETDEV_LOGGING 0x02 /* Netdevice logging */ | ||
| 49 | |||
| 50 | #define FCOE_CHECK_LOGGING(LEVEL, CMD) \ | ||
| 51 | do { \ | ||
| 52 | if (unlikely(fcoe_debug_logging & LEVEL)) \ | ||
| 53 | do { \ | ||
| 54 | CMD; \ | ||
| 55 | } while (0); \ | ||
| 56 | } while (0); | ||
| 57 | |||
| 58 | #define FCOE_DBG(fmt, args...) \ | ||
| 59 | FCOE_CHECK_LOGGING(FCOE_LOGGING, \ | ||
| 60 | printk(KERN_INFO "fcoe: " fmt, ##args);) | ||
| 61 | |||
| 62 | #define FCOE_NETDEV_DBG(netdev, fmt, args...) \ | ||
| 63 | FCOE_CHECK_LOGGING(FCOE_NETDEV_LOGGING, \ | ||
| 64 | printk(KERN_INFO "fcoe: %s" fmt, \ | ||
| 65 | netdev->name, ##args);) | ||
| 66 | |||
| 43 | /* | 67 | /* |
| 44 | * this percpu struct for fcoe | 68 | * this percpu struct for fcoe |
| 45 | */ | 69 | */ |
