]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/infiniband/core/umem.c
Merge branches 'pm-core', 'pm-qos', 'pm-domains' and 'pm-opp'
[linux.git] / drivers / infiniband / core / umem.c
index 84b4eff90395e5eb2afc7d66a2f932de8afd28f2..4609b921f899c9d7481b86825f18fe076a6f732c 100644 (file)
@@ -51,7 +51,7 @@ static void __ib_umem_release(struct ib_device *dev, struct ib_umem *umem, int d
 
        if (umem->nmap > 0)
                ib_dma_unmap_sg(dev, umem->sg_head.sgl,
-                               umem->nmap,
+                               umem->npages,
                                DMA_BIDIRECTIONAL);
 
        for_each_sg(umem->sg_head.sgl, sg, umem->npages, i) {
@@ -134,6 +134,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
                 IB_ACCESS_REMOTE_ATOMIC | IB_ACCESS_MW_BIND));
 
        if (access & IB_ACCESS_ON_DEMAND) {
+               put_pid(umem->pid);
                ret = ib_umem_odp_get(context, umem);
                if (ret) {
                        kfree(umem);
@@ -149,6 +150,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
 
        page_list = (struct page **) __get_free_page(GFP_KERNEL);
        if (!page_list) {
+               put_pid(umem->pid);
                kfree(umem);
                return ERR_PTR(-ENOMEM);
        }