| .. | .. |
|---|
| 319 | 319 | { |
|---|
| 320 | 320 | struct fcoe_fcf *sel; |
|---|
| 321 | 321 | struct fcoe_fcf *fcf; |
|---|
| 322 | + unsigned long flags; |
|---|
| 322 | 323 | |
|---|
| 323 | 324 | mutex_lock(&fip->ctlr_mutex); |
|---|
| 324 | | - spin_lock_bh(&fip->ctlr_lock); |
|---|
| 325 | + spin_lock_irqsave(&fip->ctlr_lock, flags); |
|---|
| 325 | 326 | |
|---|
| 326 | 327 | kfree_skb(fip->flogi_req); |
|---|
| 327 | 328 | fip->flogi_req = NULL; |
|---|
| 328 | 329 | list_for_each_entry(fcf, &fip->fcfs, list) |
|---|
| 329 | 330 | fcf->flogi_sent = 0; |
|---|
| 330 | 331 | |
|---|
| 331 | | - spin_unlock_bh(&fip->ctlr_lock); |
|---|
| 332 | + spin_unlock_irqrestore(&fip->ctlr_lock, flags); |
|---|
| 332 | 333 | sel = fip->sel_fcf; |
|---|
| 333 | 334 | |
|---|
| 334 | 335 | if (sel && ether_addr_equal(sel->fcf_mac, fip->dest_addr)) |
|---|
| .. | .. |
|---|
| 699 | 700 | { |
|---|
| 700 | 701 | struct fc_frame *fp; |
|---|
| 701 | 702 | struct fc_frame_header *fh; |
|---|
| 703 | + unsigned long flags; |
|---|
| 702 | 704 | u16 old_xid; |
|---|
| 703 | 705 | u8 op; |
|---|
| 704 | 706 | u8 mac[ETH_ALEN]; |
|---|
| .. | .. |
|---|
| 732 | 734 | op = FIP_DT_FLOGI; |
|---|
| 733 | 735 | if (fip->mode == FIP_MODE_VN2VN) |
|---|
| 734 | 736 | break; |
|---|
| 735 | | - spin_lock_bh(&fip->ctlr_lock); |
|---|
| 737 | + spin_lock_irqsave(&fip->ctlr_lock, flags); |
|---|
| 736 | 738 | kfree_skb(fip->flogi_req); |
|---|
| 737 | 739 | fip->flogi_req = skb; |
|---|
| 738 | 740 | fip->flogi_req_send = 1; |
|---|
| 739 | | - spin_unlock_bh(&fip->ctlr_lock); |
|---|
| 741 | + spin_unlock_irqrestore(&fip->ctlr_lock, flags); |
|---|
| 740 | 742 | schedule_work(&fip->timer_work); |
|---|
| 741 | 743 | return -EINPROGRESS; |
|---|
| 742 | 744 | case ELS_FDISC: |
|---|
| .. | .. |
|---|
| 1713 | 1715 | static int fcoe_ctlr_flogi_retry(struct fcoe_ctlr *fip) |
|---|
| 1714 | 1716 | { |
|---|
| 1715 | 1717 | struct fcoe_fcf *fcf; |
|---|
| 1718 | + unsigned long flags; |
|---|
| 1716 | 1719 | int error; |
|---|
| 1717 | 1720 | |
|---|
| 1718 | 1721 | mutex_lock(&fip->ctlr_mutex); |
|---|
| 1719 | | - spin_lock_bh(&fip->ctlr_lock); |
|---|
| 1722 | + spin_lock_irqsave(&fip->ctlr_lock, flags); |
|---|
| 1720 | 1723 | LIBFCOE_FIP_DBG(fip, "re-sending FLOGI - reselect\n"); |
|---|
| 1721 | 1724 | fcf = fcoe_ctlr_select(fip); |
|---|
| 1722 | 1725 | if (!fcf || fcf->flogi_sent) { |
|---|
| .. | .. |
|---|
| 1727 | 1730 | fcoe_ctlr_solicit(fip, NULL); |
|---|
| 1728 | 1731 | error = fcoe_ctlr_flogi_send_locked(fip); |
|---|
| 1729 | 1732 | } |
|---|
| 1730 | | - spin_unlock_bh(&fip->ctlr_lock); |
|---|
| 1733 | + spin_unlock_irqrestore(&fip->ctlr_lock, flags); |
|---|
| 1731 | 1734 | mutex_unlock(&fip->ctlr_mutex); |
|---|
| 1732 | 1735 | return error; |
|---|
| 1733 | 1736 | } |
|---|
| .. | .. |
|---|
| 1744 | 1747 | static void fcoe_ctlr_flogi_send(struct fcoe_ctlr *fip) |
|---|
| 1745 | 1748 | { |
|---|
| 1746 | 1749 | struct fcoe_fcf *fcf; |
|---|
| 1750 | + unsigned long flags; |
|---|
| 1747 | 1751 | |
|---|
| 1748 | | - spin_lock_bh(&fip->ctlr_lock); |
|---|
| 1752 | + spin_lock_irqsave(&fip->ctlr_lock, flags); |
|---|
| 1749 | 1753 | fcf = fip->sel_fcf; |
|---|
| 1750 | 1754 | if (!fcf || !fip->flogi_req_send) |
|---|
| 1751 | 1755 | goto unlock; |
|---|
| .. | .. |
|---|
| 1772 | 1776 | } else /* XXX */ |
|---|
| 1773 | 1777 | LIBFCOE_FIP_DBG(fip, "No FCF selected - defer send\n"); |
|---|
| 1774 | 1778 | unlock: |
|---|
| 1775 | | - spin_unlock_bh(&fip->ctlr_lock); |
|---|
| 1779 | + spin_unlock_irqrestore(&fip->ctlr_lock, flags); |
|---|
| 1776 | 1780 | } |
|---|
| 1777 | 1781 | |
|---|
| 1778 | 1782 | /** |
|---|