switch infinibarf users of fget() to fget_light()
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 27 Aug 2012 16:47:29 +0000 (12:47 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 27 Sep 2012 01:10:10 +0000 (21:10 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/infiniband/core/ucma.c
drivers/infiniband/core/uverbs_cmd.c
drivers/infiniband/core/uverbs_main.c

index 055ed59838dca128eef4986a9b3186a1f0588b84..6b2ae729de9202c341f92364a04f131983a6e0c0 100644 (file)
@@ -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;
 }
 
index f9d0d7c413a25b9e15775acf12ae20335140a2f7..402679bd30a3be6aae739932bc7df9db8fffa09a 100644 (file)
@@ -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);
 
index 604556d73d250e59cde7559a9e5a870089419fe6..acf75c2cf7ef9f63e0840c4d6185e7133aada23d 100644 (file)
@@ -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;
 }