struct iscsi_iface_param_info *iface_param)
 {
        struct beiscsi_hba *phba = iscsi_host_priv(shost);
-       int ret;
-
-       /* Get the Interface Handle */
-       ret = mgmt_get_all_if_id(phba);
-       if (ret) {
-               beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_CONFIG,
-                           "BS_%d : Getting Interface Handle Failed\n");
-               return ret;
-       }
+       int ret = -EPERM;
 
-       ret = -EPERM;
        switch (iface_param->param) {
        case ISCSI_NET_PARAM_VLAN_ENABLED:
                ret = 0;
        struct beiscsi_hba *phba = iscsi_host_priv(shost);
        struct nlattr *attrib;
        uint32_t rm_len = dt_len;
-       int ret = 0 ;
+       int ret;
 
        if (phba->state & BE_ADAPTER_PCI_ERR) {
                beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_CONFIG,
                return -EBUSY;
        }
 
+       /* update interface_handle */
+       ret = beiscsi_if_get_handle(phba);
+       if (ret) {
+               beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_CONFIG,
+                           "BS_%d : Getting Interface Handle Failed\n");
+               return ret;
+       }
+
        nla_for_each_attr(attrib, data, dt_len, rm_len) {
                iface_param = nla_data(attrib);
 
        struct Scsi_Host *shost = iscsi_iface_to_shost(iface);
        struct beiscsi_hba *phba = iscsi_host_priv(shost);
        struct be_cmd_get_def_gateway_resp gateway;
-       int len = -ENOSYS;
+       int len = -EPERM;
 
        if (phba->state & BE_ADAPTER_PCI_ERR) {
                beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_CONFIG,
                if (!len)
                        len = sprintf(buf, "%pI4\n", &gateway.ip_addr.addr);
                break;
-       default:
-               len = -ENOSYS;
        }
 
        return len;
                           enum iscsi_param param, char *buf)
 {
        struct beiscsi_endpoint *beiscsi_ep = ep->dd_data;
-       int len = 0;
+       int len;
 
        beiscsi_log(beiscsi_ep->phba, KERN_INFO,
                    BEISCSI_LOG_CONFIG,
                        len = sprintf(buf, "%pI6\n", &beiscsi_ep->dst6_addr);
                break;
        default:
-               return -ENOSYS;
+               len = -EPERM;
        }
        return len;
 }
 
        struct mgmt_session_info *boot_sess = &phba->boot_sess;
        struct mgmt_conn_info *boot_conn = &boot_sess->conn_list[0];
        char *str = buf;
-       int rc;
+       int rc = -EPERM;
 
        switch (type) {
        case ISCSI_BOOT_TGT_NAME:
        case ISCSI_BOOT_TGT_NIC_ASSOC:
                rc = sprintf(str, "0\n");
                break;
-       default:
-               rc = -ENOSYS;
-               break;
        }
        return rc;
 }
 {
        struct beiscsi_hba *phba = data;
        char *str = buf;
-       int rc;
+       int rc = -EPERM;
 
        switch (type) {
        case ISCSI_BOOT_INI_INITIATOR_NAME:
                rc = sprintf(str, "%s\n", phba->boot_sess.initiator_iscsiname);
                break;
-       default:
-               rc = -ENOSYS;
-               break;
        }
        return rc;
 }
 {
        struct beiscsi_hba *phba = data;
        char *str = buf;
-       int rc;
+       int rc = -EPERM;
 
        switch (type) {
        case ISCSI_BOOT_ETH_FLAGS:
        case ISCSI_BOOT_ETH_MAC:
                rc  = beiscsi_get_macaddr(str, phba);
                break;
-       default:
-               rc = -ENOSYS;
-               break;
        }
        return rc;
 }
 
 static umode_t beiscsi_tgt_get_attr_visibility(void *data, int type)
 {
-       umode_t rc;
+       umode_t rc = 0;
 
        switch (type) {
        case ISCSI_BOOT_TGT_NAME:
        case ISCSI_BOOT_TGT_FLAGS:
                rc = S_IRUGO;
                break;
-       default:
-               rc = 0;
-               break;
        }
        return rc;
 }
 
 static umode_t beiscsi_ini_get_attr_visibility(void *data, int type)
 {
-       umode_t rc;
+       umode_t rc = 0;
 
        switch (type) {
        case ISCSI_BOOT_INI_INITIATOR_NAME:
                rc = S_IRUGO;
                break;
-       default:
-               rc = 0;
-               break;
        }
        return rc;
 }
 
 static umode_t beiscsi_eth_get_attr_visibility(void *data, int type)
 {
-       umode_t rc;
+       umode_t rc = 0;
 
        switch (type) {
        case ISCSI_BOOT_ETH_FLAGS:
        case ISCSI_BOOT_ETH_INDEX:
                rc = S_IRUGO;
                break;
-       default:
-               rc = 0;
-               break;
        }
        return rc;
 }
 
                            bsg_req->rqst_data.h_vendor.vendor_cmd[0]);
 
                mutex_unlock(&ctrl->mbox_lock);
-               return -ENOSYS;
+               return -EPERM;
        }
 
        wrb = alloc_mcc_wrb(phba, &tag);
        return tag;
 }
 
-unsigned int mgmt_get_all_if_id(struct beiscsi_hba *phba)
-{
-       struct be_ctrl_info *ctrl = &phba->ctrl;
-       struct be_mcc_wrb *wrb;
-       struct be_cmd_get_all_if_id_req *req;
-       struct be_cmd_get_all_if_id_req *pbe_allid;
-       unsigned int tag;
-       int status = 0;
-
-       if (mutex_lock_interruptible(&ctrl->mbox_lock))
-               return -EINTR;
-       wrb = alloc_mcc_wrb(phba, &tag);
-       if (!wrb) {
-               mutex_unlock(&ctrl->mbox_lock);
-               return -ENOMEM;
-       }
-
-       req = embedded_payload(wrb);
-       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
-       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_ISCSI,
-                          OPCODE_COMMON_ISCSI_NTWK_GET_ALL_IF_ID,
-                          sizeof(*req));
-       be_mcc_notify(phba, tag);
-       mutex_unlock(&ctrl->mbox_lock);
-
-       status = beiscsi_mccq_compl_wait(phba, tag, &wrb, NULL);
-       if (status) {
-               beiscsi_log(phba, KERN_WARNING, BEISCSI_LOG_CONFIG,
-                           "BG_%d : Failed in mgmt_get_all_if_id\n");
-               return -EBUSY;
-       }
-
-       pbe_allid = embedded_payload(wrb);
-       phba->interface_handle = pbe_allid->if_hndl_list[0];
-
-       return status;
-}
-
 /*
  * mgmt_exec_nonemb_cmd()- Execute Non Embedded MBX Cmd
  * @phba: Driver priv structure
        return 0;
 }
 
+unsigned int beiscsi_if_get_handle(struct beiscsi_hba *phba)
+{
+       struct be_ctrl_info *ctrl = &phba->ctrl;
+       struct be_mcc_wrb *wrb;
+       struct be_cmd_get_all_if_id_req *req;
+       struct be_cmd_get_all_if_id_req *pbe_allid;
+       unsigned int tag;
+       int status = 0;
+
+       if (mutex_lock_interruptible(&ctrl->mbox_lock))
+               return -EINTR;
+       wrb = alloc_mcc_wrb(phba, &tag);
+       if (!wrb) {
+               mutex_unlock(&ctrl->mbox_lock);
+               return -ENOMEM;
+       }
+
+       req = embedded_payload(wrb);
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_ISCSI,
+                          OPCODE_COMMON_ISCSI_NTWK_GET_ALL_IF_ID,
+                          sizeof(*req));
+       be_mcc_notify(phba, tag);
+       mutex_unlock(&ctrl->mbox_lock);
+
+       status = beiscsi_mccq_compl_wait(phba, tag, &wrb, NULL);
+       if (status) {
+               beiscsi_log(phba, KERN_WARNING, BEISCSI_LOG_CONFIG,
+                           "BG_%d : %s failed: %d\n", __func__, status);
+               return -EBUSY;
+       }
+
+       pbe_allid = embedded_payload(wrb);
+       /* we now support only one interface per function */
+       phba->interface_handle = pbe_allid->if_hndl_list[0];
+
+       return status;
+}
+
 static int beiscsi_if_mod_gw(struct beiscsi_hba *phba,
                             u32 action, u32 ip_type, u8 *gw)
 {
        uint32_t ioctl_size = sizeof(struct be_cmd_get_if_info_resp);
        int rc;
 
-       rc = mgmt_get_all_if_id(phba);
+       rc = beiscsi_if_get_handle(phba);
        if (rc)
                return rc;