302 if (!fmr->mr.map[i])
303 goto bail;
304 }
305 fmr->mr.mapsz = m;
306
307
308
309
310
311 if (!ipath_alloc_lkey(&to_idev(pd->device)->lk_table, &fmr->mr))
312 goto bail;
313 fmr->ibfmr.rkey = fmr->ibfmr.lkey = fmr->mr.lkey;
314
315
316
317
318 fmr->mr.pd = pd;
319 fmr->mr.user_base = 0;
320 fmr->mr.iova = 0;
321 fmr->mr.length = 0;
322 fmr->mr.offset = 0;
323 fmr->mr.access_flags = mr_access_flags;
324 fmr->mr.max_segs = fmr_attr->max_pages;
325 fmr->page_shift = fmr_attr->page_shift;
326
327 ret = &fmr->ibfmr;
328 goto done;
329
330bail:
331 while (i)
332 kfree(fmr->mr.map[--i]);
333 kfree(fmr);
334 ret = ERR_PTR(-ENOMEM);
335
336done:
337 return ret;
338}
339
340
341
342