Parcourir la source

switch infinibarf users of fget() to fget_light()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Al Viro il y a 13 ans
Parent
commit
88b428d6e1

+ 3 - 3
drivers/infiniband/core/ucma.c

@@ -1186,13 +1186,13 @@ static ssize_t ucma_migrate_id(struct ucma_file *new_file,
 	struct ucma_context *ctx;
 	struct file *filp;
 	struct ucma_file *cur_file;
-	int ret = 0;
+	int ret = 0, fput_needed;
 
 	if (copy_from_user(&cmd, inbuf, sizeof(cmd)))
 		return -EFAULT;
 
 	/* Get current fd to protect against it being closed */
-	filp = fget(cmd.fd);
+	filp = fget_light(cmd.fd, &fput_needed);
 	if (!filp)
 		return -ENOENT;
 
@@ -1231,7 +1231,7 @@ response:
 
 	ucma_put_ctx(ctx);
 file_put:
-	fput(filp);
+	fput_light(filp, fput_needed);
 	return ret;
 }
 

+ 4 - 9
drivers/infiniband/core/uverbs_cmd.c

@@ -707,7 +707,7 @@ ssize_t ib_uverbs_open_xrcd(struct ib_uverbs_file *file,
 	struct ib_xrcd                 *xrcd = NULL;
 	struct file                    *f = NULL;
 	struct inode                   *inode = NULL;
-	int				ret = 0;
+	int				ret = 0, fput_needed;
 	int				new_xrcd = 0;
 
 	if (out_len < sizeof resp)
@@ -724,18 +724,13 @@ ssize_t ib_uverbs_open_xrcd(struct ib_uverbs_file *file,
 
 	if (cmd.fd != -1) {
 		/* search for file descriptor */
-		f = fget(cmd.fd);
+		f = fget_light(cmd.fd, &fput_needed);
 		if (!f) {
 			ret = -EBADF;
 			goto err_tree_mutex_unlock;
 		}
 
 		inode = f->f_dentry->d_inode;
-		if (!inode) {
-			ret = -EBADF;
-			goto err_tree_mutex_unlock;
-		}
-
 		xrcd = find_xrcd(file->device, inode);
 		if (!xrcd && !(cmd.oflags & O_CREAT)) {
 			/* no file descriptor. Need CREATE flag */
@@ -801,7 +796,7 @@ ssize_t ib_uverbs_open_xrcd(struct ib_uverbs_file *file,
 	}
 
 	if (f)
-		fput(f);
+		fput_light(f, fput_needed);
 
 	mutex_lock(&file->mutex);
 	list_add_tail(&obj->uobject.list, &file->ucontext->xrcd_list);
@@ -831,7 +826,7 @@ err:
 
 err_tree_mutex_unlock:
 	if (f)
-		fput(f);
+		fput_light(f, fput_needed);
 
 	mutex_unlock(&file->device->xrcd_tree_mutex);
 

+ 3 - 2
drivers/infiniband/core/uverbs_main.c

@@ -542,8 +542,9 @@ struct ib_uverbs_event_file *ib_uverbs_lookup_comp_file(int fd)
 {
 	struct ib_uverbs_event_file *ev_file = NULL;
 	struct file *filp;
+	int fput_needed;
 
-	filp = fget(fd);
+	filp = fget_light(fd, &fput_needed);
 	if (!filp)
 		return NULL;
 
@@ -559,7 +560,7 @@ struct ib_uverbs_event_file *ib_uverbs_lookup_comp_file(int fd)
 	kref_get(&ev_file->ref);
 
 out:
-	fput(filp);
+	fput_light(filp, fput_needed);
 	return ev_file;
 }