queue_delayed_work(ipoib_workqueue, &priv->ah_reap_task,
                           round_jiffies_relative(HZ));
 
-       set_bit(IPOIB_FLAG_INITIALIZED, &priv->flags);
+       if (!test_and_set_bit(IPOIB_FLAG_INITIALIZED, &priv->flags))
+               napi_enable(&priv->napi);
 
        return 0;
 }
        struct ipoib_tx_buf *tx_req;
        int i;
 
-       clear_bit(IPOIB_FLAG_INITIALIZED, &priv->flags);
+       if (test_and_clear_bit(IPOIB_FLAG_INITIALIZED, &priv->flags))
+               napi_disable(&priv->napi);
 
        ipoib_cm_dev_stop(dev);
 
 
 
        ipoib_dbg(priv, "bringing up interface\n");
 
-       if (!test_and_set_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags))
-               napi_enable(&priv->napi);
+       set_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags);
 
        if (ipoib_pkey_dev_delay_open(dev))
                return 0;
        ipoib_ib_dev_stop(dev, 1);
 
 err_disable:
-       napi_disable(&priv->napi);
        clear_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags);
 
        return -EINVAL;
        ipoib_dbg(priv, "stopping interface\n");
 
        clear_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags);
-       napi_disable(&priv->napi);
 
        netif_stop_queue(dev);