[rds-devel] [bug report] net/rds: Handle ODP mr registration/unregistration

Dan Carpenter dan.carpenter at oracle.com
Wed Jan 22 20:55:48 PST 2020


Hello Hans Westgaard Ry,

The patch 2eafa1746f17: "net/rds: Handle ODP mr
registration/unregistration" from Jan 15, 2020, leads to the
following static checker warning:

	net/rds/rdma.c:741 rds_cmsg_rdma_args()
	warn: assigning IS_ERR()

net/rds/rdma.c
   717                          goto out_pages;
   718  
   719                  if (ret == -EOPNOTSUPP) {
   720                          struct rds_mr *local_odp_mr;
   721  
   722                          if (!rs->rs_transport->get_mr) {
   723                                  ret = -EOPNOTSUPP;
   724                                  goto out_pages;
   725                          }
   726                          local_odp_mr =
   727                                  kzalloc(sizeof(*local_odp_mr), GFP_KERNEL);
   728                          if (!local_odp_mr) {
   729                                  ret = -ENOMEM;
   730                                  goto out_pages;
   731                          }
   732                          RB_CLEAR_NODE(&local_odp_mr->r_rb_node);
   733                          refcount_set(&local_odp_mr->r_refcount, 1);
   734                          local_odp_mr->r_trans = rs->rs_transport;
   735                          local_odp_mr->r_sock = rs;
   736                          local_odp_mr->r_trans_private =
   737                                  rs->rs_transport->get_mr(
   738                                          NULL, 0, rs, &local_odp_mr->r_key, NULL,
   739                                          iov->addr, iov->bytes, ODP_VIRTUAL);
   740                          if (IS_ERR(local_odp_mr->r_trans_private)) {
   741                                  ret = IS_ERR(local_odp_mr->r_trans_private);
                                        ^^^^^^^^^^^^
This should be "ret = PTR_ERR()"

   742                                  rdsdebug("get_mr ret %d %p\"", ret,
   743                                           local_odp_mr->r_trans_private);
   744                                  kfree(local_odp_mr);
   745                                  ret = -EOPNOTSUPP;

My guess is that -EOPNOTSUPP is actually the correct error that we want
to return, but I thought I would point that out as something to
consider

   746                                  goto out_pages;
   747                          }
   748                          rdsdebug("Need odp; local_odp_mr %p trans_private %p\n",
   749                                   local_odp_mr, local_odp_mr->r_trans_private);
   750                          op->op_odp_mr = local_odp_mr;

regards,
dan carpenter



More information about the rds-devel mailing list