Commit 19564a85 authored by Dan Carpenter's avatar Dan Carpenter Committed by Leon Romanovsky
Browse files

RDMA/rxe: Fix a couple IS_ERR() vs NULL bugs



The lookup_mr() function returns NULL on error.  It never returns error
pointers.

Fixes: 9284bc34 ("RDMA/rxe: Enable asynchronous prefetch for ODP MRs")
Fixes: 3576b0df ("RDMA/rxe: Implement synchronous prefetch for ODP MRs")
Signed-off-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
Link: https://patch.msgid.link/685c1430.050a0220.18b0ef.da83@mx.google.com


Reviewed-by: default avatarZhu Yanjun <yanjun.zhu@linux.dev>
Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
parent 12423d8e
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -470,10 +470,10 @@ static int rxe_ib_prefetch_sg_list(struct ib_pd *ibpd,
		mr = lookup_mr(pd, IB_ACCESS_LOCAL_WRITE,
			       sg_list[i].lkey, RXE_LOOKUP_LOCAL);

		if (IS_ERR(mr)) {
		if (!mr) {
			rxe_dbg_pd(pd, "mr with lkey %x not found\n",
				   sg_list[i].lkey);
			return PTR_ERR(mr);
			return -EINVAL;
		}

		if (advice == IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_WRITE &&
@@ -535,8 +535,10 @@ static int rxe_ib_advise_mr_prefetch(struct ib_pd *ibpd,
		/* Takes a reference, which will be released in the queued work */
		mr = lookup_mr(pd, IB_ACCESS_LOCAL_WRITE,
			       sg_list[i].lkey, RXE_LOOKUP_LOCAL);
		if (IS_ERR(mr))
		if (!mr) {
			mr = ERR_PTR(-EINVAL);
			goto err;
		}

		work->frags[i].io_virt = sg_list[i].addr;
		work->frags[i].length = sg_list[i].length;