|
@@ -389,44 +389,29 @@ rpcrdma_ia_open(struct rpcrdma_xprt *xprt, struct sockaddr *addr, int memreg)
|
|
|
ia->ri_pd = ib_alloc_pd(ia->ri_device);
|
|
|
if (IS_ERR(ia->ri_pd)) {
|
|
|
rc = PTR_ERR(ia->ri_pd);
|
|
|
- dprintk("RPC: %s: ib_alloc_pd() failed %i\n",
|
|
|
- __func__, rc);
|
|
|
+ pr_err("rpcrdma: ib_alloc_pd() returned %d\n", rc);
|
|
|
goto out2;
|
|
|
}
|
|
|
|
|
|
- if (memreg == RPCRDMA_FRMR) {
|
|
|
- if (!(ia->ri_device->attrs.device_cap_flags &
|
|
|
- IB_DEVICE_MEM_MGT_EXTENSIONS) ||
|
|
|
- (ia->ri_device->attrs.max_fast_reg_page_list_len == 0)) {
|
|
|
- dprintk("RPC: %s: FRMR registration "
|
|
|
- "not supported by HCA\n", __func__);
|
|
|
- memreg = RPCRDMA_MTHCAFMR;
|
|
|
- }
|
|
|
- }
|
|
|
- if (memreg == RPCRDMA_MTHCAFMR) {
|
|
|
- if (!ia->ri_device->alloc_fmr) {
|
|
|
- dprintk("RPC: %s: MTHCAFMR registration "
|
|
|
- "not supported by HCA\n", __func__);
|
|
|
- rc = -EINVAL;
|
|
|
- goto out3;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
switch (memreg) {
|
|
|
case RPCRDMA_FRMR:
|
|
|
- ia->ri_ops = &rpcrdma_frwr_memreg_ops;
|
|
|
- break;
|
|
|
+ if (frwr_is_supported(ia)) {
|
|
|
+ ia->ri_ops = &rpcrdma_frwr_memreg_ops;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ /*FALLTHROUGH*/
|
|
|
case RPCRDMA_MTHCAFMR:
|
|
|
- ia->ri_ops = &rpcrdma_fmr_memreg_ops;
|
|
|
- break;
|
|
|
+ if (fmr_is_supported(ia)) {
|
|
|
+ ia->ri_ops = &rpcrdma_fmr_memreg_ops;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ /*FALLTHROUGH*/
|
|
|
default:
|
|
|
- printk(KERN_ERR "RPC: Unsupported memory "
|
|
|
- "registration mode: %d\n", memreg);
|
|
|
- rc = -ENOMEM;
|
|
|
+ pr_err("rpcrdma: Unsupported memory registration mode: %d\n",
|
|
|
+ memreg);
|
|
|
+ rc = -EINVAL;
|
|
|
goto out3;
|
|
|
}
|
|
|
- dprintk("RPC: %s: memory registration strategy is '%s'\n",
|
|
|
- __func__, ia->ri_ops->ro_displayname);
|
|
|
|
|
|
return 0;
|
|
|
|