RE: [PATCH] RDMA/umem: Minor optimization

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----Original Message-----
> From: linux-rdma-owner@xxxxxxxxxxxxxxx <linux-rdma-
> owner@xxxxxxxxxxxxxxx> On Behalf Of Doug Ledford
> Sent: Thursday, September 20, 2018 3:23 PM
> To: linux-rdma@xxxxxxxxxxxxxxx
> Cc: Doug Ledford <dledford@xxxxxxxxxx>
> Subject: [PATCH] RDMA/umem: Minor optimization
> 
> Noticed while reviewing d4b4dd1b9706 ("RDMA/umem: Do not use
> current->tgid to track the mm_struct") patch.  Why would we take a lock,
> adjust a protected variable, drop the lock, and *then* check the input into
> our protected variable adjustment?  Then we have to take the lock again on
> our error unwind.  Let's just check the input early and skip taking the locks
> needlessly if the input isn't valid.
> 
> Signed-off-by: Doug Ledford <dledford@xxxxxxxxxx>
> ---
>  drivers/infiniband/core/umem.c | 9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/infiniband/core/umem.c
> b/drivers/infiniband/core/umem.c index c32a3e27a896..34d7256f5ba0
> 100644
> --- a/drivers/infiniband/core/umem.c
> +++ b/drivers/infiniband/core/umem.c
> @@ -147,6 +147,10 @@ struct ib_umem *ib_umem_get(struct ib_ucontext
> *context, unsigned long addr,
>  		umem->hugetlb = 0;
> 
>  	npages = ib_umem_num_pages(umem);
> +	if (npages == 0 || npages > UINT_MAX) {
> +		ret = -EINVAL;
> +		goto out;
> +	}
> 
>  	lock_limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT;
> 
> @@ -161,11 +165,6 @@ struct ib_umem *ib_umem_get(struct ib_ucontext
> *context, unsigned long addr,
> 
>  	cur_base = addr & PAGE_MASK;
> 
> -	if (npages == 0 || npages > UINT_MAX) {
> -		ret = -EINVAL;
> -		goto vma;
> -	}
> -
>  	ret = sg_alloc_table(&umem->sg_head, npages, GFP_KERNEL);
>  	if (ret)
>  		goto vma;
> --
> 2.17.1
Reviewed-by: Parav Pandit <parav@xxxxxxxxxxxx>




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux