Merge branch 'net-smc-show-unique-rsn-code-for-exceeded-max-dmb-count'
Karsten Graul says: ==================== net/smc: show unique rsn code for exceeded max dmb count Resolve some confusion at the user side when the reason code shows out-of-memory but actually there is enough memory left. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
a4e3ee7d20
@ -231,7 +231,7 @@ static int ism_alloc_dmb(struct ism_dev *ism, struct smcd_dmb *dmb)
|
||||
bit = find_next_zero_bit(ism->sba_bitmap, ISM_NR_DMBS,
|
||||
ISM_DMB_BIT_OFFSET);
|
||||
if (bit == ISM_NR_DMBS)
|
||||
return -ENOMEM;
|
||||
return -ENOSPC;
|
||||
|
||||
dmb->sba_idx = bit;
|
||||
}
|
||||
|
@ -719,8 +719,11 @@ static int smc_connect_ism(struct smc_sock *smc,
|
||||
}
|
||||
|
||||
/* Create send and receive buffers */
|
||||
if (smc_buf_create(smc, true))
|
||||
return smc_connect_abort(smc, SMC_CLC_DECL_MEM,
|
||||
rc = smc_buf_create(smc, true);
|
||||
if (rc)
|
||||
return smc_connect_abort(smc, (rc == -ENOSPC) ?
|
||||
SMC_CLC_DECL_MAX_DMB :
|
||||
SMC_CLC_DECL_MEM,
|
||||
ini->cln_first_contact);
|
||||
|
||||
smc_conn_save_peer_info(smc, aclc);
|
||||
@ -1200,12 +1203,14 @@ static int smc_listen_ism_init(struct smc_sock *new_smc,
|
||||
}
|
||||
|
||||
/* Create send and receive buffers */
|
||||
if (smc_buf_create(new_smc, true)) {
|
||||
rc = smc_buf_create(new_smc, true);
|
||||
if (rc) {
|
||||
if (ini->cln_first_contact == SMC_FIRST_CONTACT)
|
||||
smc_lgr_cleanup_early(&new_smc->conn);
|
||||
else
|
||||
smc_conn_free(&new_smc->conn);
|
||||
return SMC_CLC_DECL_MEM;
|
||||
return (rc == -ENOSPC) ? SMC_CLC_DECL_MAX_DMB :
|
||||
SMC_CLC_DECL_MEM;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -48,6 +48,7 @@
|
||||
#define SMC_CLC_DECL_NOACTLINK 0x030a0000 /* no active smc-r link in lgr */
|
||||
#define SMC_CLC_DECL_NOSRVLINK 0x030b0000 /* SMC-R link from srv not found */
|
||||
#define SMC_CLC_DECL_VERSMISMAT 0x030c0000 /* SMC version mismatch */
|
||||
#define SMC_CLC_DECL_MAX_DMB 0x030d0000 /* SMC-D DMB limit exceeded */
|
||||
#define SMC_CLC_DECL_SYNCERR 0x04000000 /* synchronization error */
|
||||
#define SMC_CLC_DECL_PEERDECL 0x05000000 /* peer declined during handshake */
|
||||
#define SMC_CLC_DECL_INTERR 0x09990000 /* internal error */
|
||||
|
@ -1614,7 +1614,7 @@ static struct smc_buf_desc *smcd_new_buf_create(struct smc_link_group *lgr,
|
||||
rc = smc_ism_register_dmb(lgr, bufsize, buf_desc);
|
||||
if (rc) {
|
||||
kfree(buf_desc);
|
||||
return ERR_PTR(-EAGAIN);
|
||||
return (rc == -ENOMEM) ? ERR_PTR(-EAGAIN) : ERR_PTR(rc);
|
||||
}
|
||||
buf_desc->pages = virt_to_page(buf_desc->cpu_addr);
|
||||
/* CDC header stored in buf. So, pretend it was smaller */
|
||||
@ -1688,7 +1688,7 @@ static int __smc_buf_create(struct smc_sock *smc, bool is_smcd, bool is_rmb)
|
||||
}
|
||||
|
||||
if (IS_ERR(buf_desc))
|
||||
return -ENOMEM;
|
||||
return PTR_ERR(buf_desc);
|
||||
|
||||
if (!is_smcd) {
|
||||
if (smcr_buf_map_usable_links(lgr, buf_desc, is_rmb)) {
|
||||
|
Loading…
Reference in New Issue
Block a user