diff mbox series

RDMA/core: Use fdget() and fdput()

Message ID 202305051133576690069@zte.com.cn (mailing list archive)
State Rejected
Delegated to: Jason Gunthorpe
Headers show
Series RDMA/core: Use fdget() and fdput() | expand

Commit Message

ye.xingchen@zte.com.cn May 5, 2023, 3:33 a.m. UTC
From: Ye Xingchen <ye.xingchen@zte.com.cn>

convert the fget()/fput() uses to fdget()/fdput().

Signed-off-by: Ye Xingchen <ye.xingchen@zte.com.cn>
---
 drivers/infiniband/core/rdma_core.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

Comments

Jason Gunthorpe May 5, 2023, 11:56 a.m. UTC | #1
On Fri, May 05, 2023 at 11:33:57AM +0800, ye.xingchen@zte.com.cn wrote:
> From: Ye Xingchen <ye.xingchen@zte.com.cn>
> 
> convert the fget()/fput() uses to fdget()/fdput().
> 
> Signed-off-by: Ye Xingchen <ye.xingchen@zte.com.cn>
> ---
>  drivers/infiniband/core/rdma_core.c | 11 +++++------
>  1 file changed, 5 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/infiniband/core/rdma_core.c b/drivers/infiniband/core/rdma_core.c
> index 29b1ab1d5f93..c35df0b27e86 100644
> --- a/drivers/infiniband/core/rdma_core.c
> +++ b/drivers/infiniband/core/rdma_core.c
> @@ -335,7 +335,7 @@ lookup_get_fd_uobject(const struct uverbs_api_object *obj,
>  		      enum rdma_lookup_mode mode)
>  {
>  	const struct uverbs_obj_fd_type *fd_type;
> -	struct file *f;
> +	struct fd f = fdget(fdno);
>  	struct ib_uobject *uobject;
>  	int fdno = id;
> 
> @@ -350,18 +350,17 @@ lookup_get_fd_uobject(const struct uverbs_api_object *obj,
>  	fd_type =
>  		container_of(obj->type_attrs, struct uverbs_obj_fd_type, type);
> 
> -	f = fget(fdno);
> -	if (!f)
> +	if (!f.file)
>  		return ERR_PTR(-EBADF);

This also has incorrect pairing with fdput

Jason
Leon Romanovsky May 5, 2023, 4:32 p.m. UTC | #2
On Fri, May 05, 2023 at 11:33:57AM +0800, ye.xingchen@zte.com.cn wrote:
> From: Ye Xingchen <ye.xingchen@zte.com.cn>
> 
> convert the fget()/fput() uses to fdget()/fdput().

Why? What is wrong with current implementation?

Thanks

> 
> Signed-off-by: Ye Xingchen <ye.xingchen@zte.com.cn>
> ---
>  drivers/infiniband/core/rdma_core.c | 11 +++++------
>  1 file changed, 5 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/infiniband/core/rdma_core.c b/drivers/infiniband/core/rdma_core.c
> index 29b1ab1d5f93..c35df0b27e86 100644
> --- a/drivers/infiniband/core/rdma_core.c
> +++ b/drivers/infiniband/core/rdma_core.c
> @@ -335,7 +335,7 @@ lookup_get_fd_uobject(const struct uverbs_api_object *obj,
>  		      enum rdma_lookup_mode mode)
>  {
>  	const struct uverbs_obj_fd_type *fd_type;
> -	struct file *f;
> +	struct fd f = fdget(fdno);
>  	struct ib_uobject *uobject;
>  	int fdno = id;
> 
> @@ -350,18 +350,17 @@ lookup_get_fd_uobject(const struct uverbs_api_object *obj,
>  	fd_type =
>  		container_of(obj->type_attrs, struct uverbs_obj_fd_type, type);
> 
> -	f = fget(fdno);
> -	if (!f)
> +	if (!f.file)
>  		return ERR_PTR(-EBADF);
> 
> -	uobject = f->private_data;
> +	uobject = f.file->private_data;
>  	/*
>  	 * fget(id) ensures we are not currently running
>  	 * uverbs_uobject_fd_release(), and the caller is expected to ensure
>  	 * that release is never done while a call to lookup is possible.
>  	 */
> -	if (f->f_op != fd_type->fops || uobject->ufile != ufile) {
> -		fput(f);
> +	if (f.file->f_op != fd_type->fops || uobject->ufile != ufile) {
> +		fdput(f);
>  		return ERR_PTR(-EBADF);
>  	}
> 
> -- 
> 2.25.1
Al Viro May 11, 2023, 5:42 a.m. UTC | #3
On Fri, May 05, 2023 at 11:33:57AM +0800, ye.xingchen@zte.com.cn wrote:
> From: Ye Xingchen <ye.xingchen@zte.com.cn>
> 
> convert the fget()/fput() uses to fdget()/fdput().

NAK on the entire series.  *IF* you do that kind of replacements,
you need to understand what you are doing; it's not "fdget() is
like fget(), only better; using it will improve things".

	If that comes from seeing my patch series doing fget() to
fdget() conversions, you might consider the possibility that
I *do* know how to use grep.  And that there might be some
objective difference between the instances that had been changed
and the one that had been left alone.  You could try to figure it
out.  Or look through the list archives.  Or ask...

	Al, more than slightly offended by the implications ;-/
diff mbox series

Patch

diff --git a/drivers/infiniband/core/rdma_core.c b/drivers/infiniband/core/rdma_core.c
index 29b1ab1d5f93..c35df0b27e86 100644
--- a/drivers/infiniband/core/rdma_core.c
+++ b/drivers/infiniband/core/rdma_core.c
@@ -335,7 +335,7 @@  lookup_get_fd_uobject(const struct uverbs_api_object *obj,
 		      enum rdma_lookup_mode mode)
 {
 	const struct uverbs_obj_fd_type *fd_type;
-	struct file *f;
+	struct fd f = fdget(fdno);
 	struct ib_uobject *uobject;
 	int fdno = id;

@@ -350,18 +350,17 @@  lookup_get_fd_uobject(const struct uverbs_api_object *obj,
 	fd_type =
 		container_of(obj->type_attrs, struct uverbs_obj_fd_type, type);

-	f = fget(fdno);
-	if (!f)
+	if (!f.file)
 		return ERR_PTR(-EBADF);

-	uobject = f->private_data;
+	uobject = f.file->private_data;
 	/*
 	 * fget(id) ensures we are not currently running
 	 * uverbs_uobject_fd_release(), and the caller is expected to ensure
 	 * that release is never done while a call to lookup is possible.
 	 */
-	if (f->f_op != fd_type->fops || uobject->ufile != ufile) {
-		fput(f);
+	if (f.file->f_op != fd_type->fops || uobject->ufile != ufile) {
+		fdput(f);
 		return ERR_PTR(-EBADF);
 	}