mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-04-23 23:03:59 +00:00
s390/qeth: translate SETVLAN/DELVLAN errors
Properly return any error encountered during VLAN processing to the the caller. Resulting change in behaviour: if SETVLAN fails while registering a new VLAN ID, the stack no longer creates the corresponding vlan device. Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com> Reviewed-by: Ursula Braun <ubraun@linux.vnet.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ab25a5014e
commit
2aa4867198
2 changed files with 37 additions and 13 deletions
|
@ -166,6 +166,7 @@ enum qeth_ipa_return_codes {
|
||||||
IPA_RC_L2_INVALID_VLAN_ID = 0x2015,
|
IPA_RC_L2_INVALID_VLAN_ID = 0x2015,
|
||||||
IPA_RC_L2_DUP_VLAN_ID = 0x2016,
|
IPA_RC_L2_DUP_VLAN_ID = 0x2016,
|
||||||
IPA_RC_L2_VLAN_ID_NOT_FOUND = 0x2017,
|
IPA_RC_L2_VLAN_ID_NOT_FOUND = 0x2017,
|
||||||
|
IPA_RC_L2_VLAN_ID_NOT_ALLOWED = 0x2050,
|
||||||
IPA_RC_VNICC_VNICBP = 0x20B0,
|
IPA_RC_VNICC_VNICBP = 0x20B0,
|
||||||
IPA_RC_SBP_OSA_NOT_CONFIGURED = 0x2B0C,
|
IPA_RC_SBP_OSA_NOT_CONFIGURED = 0x2B0C,
|
||||||
IPA_RC_SBP_OSA_OS_MISMATCH = 0x2B10,
|
IPA_RC_SBP_OSA_OS_MISMATCH = 0x2B10,
|
||||||
|
|
|
@ -78,7 +78,7 @@ static struct net_device *qeth_l2_netdev_by_devno(unsigned char *read_dev_no)
|
||||||
return ndev;
|
return ndev;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int qeth_setdel_makerc(struct qeth_card *card, int retcode)
|
static int qeth_setdelmac_makerc(struct qeth_card *card, int retcode)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ static int qeth_l2_send_setdelmac(struct qeth_card *card, __u8 *mac,
|
||||||
cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
|
cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
|
||||||
cmd->data.setdelmac.mac_length = OSA_ADDR_LEN;
|
cmd->data.setdelmac.mac_length = OSA_ADDR_LEN;
|
||||||
memcpy(&cmd->data.setdelmac.mac, mac, OSA_ADDR_LEN);
|
memcpy(&cmd->data.setdelmac.mac, mac, OSA_ADDR_LEN);
|
||||||
return qeth_setdel_makerc(card, qeth_send_ipa_cmd(card, iob,
|
return qeth_setdelmac_makerc(card, qeth_send_ipa_cmd(card, iob,
|
||||||
NULL, NULL));
|
NULL, NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,16 +289,39 @@ static void qeth_l2_fill_header(struct qeth_hdr *hdr, struct sk_buff *skb,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int qeth_l2_send_setdelvlan_cb(struct qeth_card *card,
|
static int qeth_setdelvlan_makerc(struct qeth_card *card, int retcode)
|
||||||
struct qeth_reply *reply, unsigned long data)
|
|
||||||
{
|
{
|
||||||
struct qeth_ipa_cmd *cmd;
|
if (retcode)
|
||||||
|
QETH_CARD_TEXT_(card, 2, "err%04x", retcode);
|
||||||
|
|
||||||
|
switch (retcode) {
|
||||||
|
case IPA_RC_SUCCESS:
|
||||||
|
return 0;
|
||||||
|
case IPA_RC_L2_INVALID_VLAN_ID:
|
||||||
|
return -EINVAL;
|
||||||
|
case IPA_RC_L2_DUP_VLAN_ID:
|
||||||
|
return -EEXIST;
|
||||||
|
case IPA_RC_L2_VLAN_ID_NOT_FOUND:
|
||||||
|
return -ENOENT;
|
||||||
|
case IPA_RC_L2_VLAN_ID_NOT_ALLOWED:
|
||||||
|
return -EPERM;
|
||||||
|
case -ENOMEM:
|
||||||
|
return -ENOMEM;
|
||||||
|
default:
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int qeth_l2_send_setdelvlan_cb(struct qeth_card *card,
|
||||||
|
struct qeth_reply *reply,
|
||||||
|
unsigned long data)
|
||||||
|
{
|
||||||
|
struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data;
|
||||||
|
|
||||||
QETH_CARD_TEXT(card, 2, "L2sdvcb");
|
QETH_CARD_TEXT(card, 2, "L2sdvcb");
|
||||||
cmd = (struct qeth_ipa_cmd *) data;
|
|
||||||
if (cmd->hdr.return_code) {
|
if (cmd->hdr.return_code) {
|
||||||
QETH_DBF_MESSAGE(2, "Error in processing VLAN %i on %s: 0x%x. "
|
QETH_DBF_MESSAGE(2, "Error in processing VLAN %i on %s: 0x%x.\n",
|
||||||
"Continuing\n", cmd->data.setdelvlan.vlan_id,
|
cmd->data.setdelvlan.vlan_id,
|
||||||
QETH_CARD_IFNAME(card), cmd->hdr.return_code);
|
QETH_CARD_IFNAME(card), cmd->hdr.return_code);
|
||||||
QETH_CARD_TEXT_(card, 2, "L2VL%4x", cmd->hdr.command);
|
QETH_CARD_TEXT_(card, 2, "L2VL%4x", cmd->hdr.command);
|
||||||
QETH_CARD_TEXT_(card, 2, "err%d", cmd->hdr.return_code);
|
QETH_CARD_TEXT_(card, 2, "err%d", cmd->hdr.return_code);
|
||||||
|
@ -318,8 +341,8 @@ static int qeth_l2_send_setdelvlan(struct qeth_card *card, __u16 i,
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
|
cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
|
||||||
cmd->data.setdelvlan.vlan_id = i;
|
cmd->data.setdelvlan.vlan_id = i;
|
||||||
return qeth_send_ipa_cmd(card, iob,
|
return qeth_setdelvlan_makerc(card, qeth_send_ipa_cmd(card, iob,
|
||||||
qeth_l2_send_setdelvlan_cb, NULL);
|
qeth_l2_send_setdelvlan_cb, NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qeth_l2_process_vlans(struct qeth_card *card)
|
static void qeth_l2_process_vlans(struct qeth_card *card)
|
||||||
|
|
Loading…
Add table
Reference in a new issue