Commit a4e3ee7d authored by David S. Miller's avatar David S. Miller
Browse files

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: default avatarDavid S. Miller <davem@davemloft.net>
parents d21a06d5 72b7f6c4
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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;
	}
+9 −4
Original line number Diff line number Diff line
@@ -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;
+1 −0
Original line number Diff line number Diff line
@@ -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		      */
+2 −2
Original line number Diff line number Diff line
@@ -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)) {